quebex

A software analysis framework built around the QBE intermediate language

git clone https://git.8pit.net/quebex.git

 1export
 2function $bubble_sort(l %.1) {
 3@start.1
 4	%.2 =l alloc8 8
 5	storel %.1, %.2
 6	%.3 =l alloc4 1
 7	%.9 =l alloc4 4
 8	%.27 =l alloc4 4
 9@body.2
10	%.4 =w cnew 0, 0
11	storeb %.4, %.3
12@while_cond.3
13	%.5 =w loadub %.3
14	%.6 =w extub %.5
15	%.7 =w ceqw %.6, 0
16	jnz %.7, @while_body.4, @while_join.5
17@while_body.4
18	%.8 =w cnew 1, 0
19	storeb %.8, %.3
20	storew 0, %.9
21@for_cond.6
22	%.10 =w loadw %.9
23	%.11 =w sub 6, 1
24	%.12 =w csltw %.10, %.11
25	jnz %.12, @for_body.7, @for_join.9
26@for_body.7
27	%.13 =l loadl %.2
28	%.14 =w loadw %.9
29	%.15 =l extsw %.14
30	%.16 =l mul %.15, 4
31	%.17 =l add %.13, %.16
32	%.18 =w loadw %.17
33	%.19 =l loadl %.2
34	%.20 =w loadw %.9
35	%.21 =w add %.20, 1
36	%.22 =l extsw %.21
37	%.23 =l mul %.22, 4
38	%.24 =l add %.19, %.23
39	%.25 =w loadw %.24
40	%.26 =w csgtw %.18, %.25
41	jnz %.26, @if_true.10, @if_false.11
42@if_true.10
43	%.28 =l loadl %.2
44	%.29 =w loadw %.9
45	%.30 =l extsw %.29
46	%.31 =l mul %.30, 4
47	%.32 =l add %.28, %.31
48	%.33 =w loadw %.32
49	storew %.33, %.27
50	%.34 =l loadl %.2
51	%.35 =w loadw %.9
52	%.36 =w add %.35, 1
53	%.37 =l extsw %.36
54	%.38 =l mul %.37, 4
55	%.39 =l add %.34, %.38
56	%.40 =w loadw %.39
57	%.41 =l loadl %.2
58	%.42 =w loadw %.9
59	%.43 =l extsw %.42
60	%.44 =l mul %.43, 4
61	%.45 =l add %.41, %.44
62	storew %.40, %.45
63	%.46 =w loadw %.27
64	%.47 =l loadl %.2
65	%.48 =w loadw %.9
66	%.49 =w add %.48, 1
67	%.50 =l extsw %.49
68	%.51 =l mul %.50, 4
69	%.52 =l add %.47, %.51
70	storew %.46, %.52
71	%.53 =w cnew 0, 0
72	storeb %.53, %.3
73@if_false.11
74@for_cont.8
75	%.54 =w loadw %.9
76	%.55 =w add %.54, 1
77	storew %.55, %.9
78	jmp @for_cond.6
79@for_join.9
80	jmp @while_cond.3
81@while_join.5
82	ret
83}
84data $.Lstring.3 = align 1 { b "array\000", }
85export
86function w $main() {
87@start.12
88	%.1 =l alloc4 24
89@body.13
90	%.2 =l extsw 6
91	call $quebex_symbolic_array(l %.1, l %.2, l 4, l $.Lstring.3)
92	call $bubble_sort(l %.1)
93	ret 0
94}