quebex

A software analysis framework built around the QBE intermediate language

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

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