qute

A software analysis framework built around the QBE intermediate language

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

  1export
  2function $bubble_sort(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 1
  9	%.11 =l alloc4 4
 10	%.30 =l alloc4 4
 11	jmp @body.2
 12@body.2
 13	%.6 =w cnew 0, 0
 14	storeb %.6, %.5
 15	jmp @while_cond.3
 16@while_cond.3
 17	%.7 =w loadub %.5
 18	%.8 =w extub %.7
 19	%.9 =w ceqw %.8, 0
 20	jnz %.9, @while_body.4, @while_join.5
 21@while_body.4
 22	%.10 =w cnew 1, 0
 23	storeb %.10, %.5
 24	storew 0, %.11
 25	jmp @for_cond.6
 26@for_cond.6
 27	%.12 =w loadw %.11
 28	%.13 =w loadw %.4
 29	%.14 =w sub %.13, 1
 30	%.15 =w cultw %.12, %.14
 31	jnz %.15, @for_body.7, @for_join.9
 32@for_body.7
 33	%.16 =l loadl %.2
 34	%.17 =w loadw %.11
 35	%.18 =l extsw %.17
 36	%.19 =l mul %.18, 4
 37	%.20 =l add %.16, %.19
 38	%.21 =w loadw %.20
 39	%.22 =l loadl %.2
 40	%.23 =w loadw %.11
 41	%.24 =w add %.23, 1
 42	%.25 =l extsw %.24
 43	%.26 =l mul %.25, 4
 44	%.27 =l add %.22, %.26
 45	%.28 =w loadw %.27
 46	%.29 =w csgtw %.21, %.28
 47	jnz %.29, @if_true.10, @if_false.11
 48@if_true.10
 49	%.31 =l loadl %.2
 50	%.32 =w loadw %.11
 51	%.33 =l extsw %.32
 52	%.34 =l mul %.33, 4
 53	%.35 =l add %.31, %.34
 54	%.36 =w loadw %.35
 55	storew %.36, %.30
 56	%.37 =l loadl %.2
 57	%.38 =w loadw %.11
 58	%.39 =w add %.38, 1
 59	%.40 =l extsw %.39
 60	%.41 =l mul %.40, 4
 61	%.42 =l add %.37, %.41
 62	%.43 =w loadw %.42
 63	%.44 =l loadl %.2
 64	%.45 =w loadw %.11
 65	%.46 =l extsw %.45
 66	%.47 =l mul %.46, 4
 67	%.48 =l add %.44, %.47
 68	storew %.43, %.48
 69	%.49 =w loadw %.30
 70	%.50 =l loadl %.2
 71	%.51 =w loadw %.11
 72	%.52 =w add %.51, 1
 73	%.53 =l extsw %.52
 74	%.54 =l mul %.53, 4
 75	%.55 =l add %.50, %.54
 76	storew %.49, %.55
 77	%.56 =w cnew 0, 0
 78	storeb %.56, %.5
 79	jmp @if_false.11
 80@if_false.11
 81	jmp @for_cont.8
 82@for_cont.8
 83	%.57 =w loadw %.11
 84	%.58 =w add %.57, 1
 85	storew %.58, %.11
 86	jmp @for_cond.6
 87@for_join.9
 88	jmp @while_cond.3
 89@while_join.5
 90	ret
 91}
 92export
 93function w $rand(l %.1) {
 94@start.12
 95	%.2 =l alloc8 8
 96	storel %.1, %.2
 97	jmp @body.13
 98@body.13
 99	%.3 =l loadl %.2
100	%.4 =l loadl %.3
101	%.5 =l mul 6364136223846793005, %.4
102	%.6 =l extsw 1
103	%.7 =l add %.5, %.6
104	%.8 =l loadl %.2
105	storel %.7, %.8
106	%.9 =l loadl %.2
107	%.10 =l loadl %.9
108	ret %.10
109}
110export
111function $fillary(l %.1, w %.3) {
112@start.14
113	%.2 =l alloc8 8
114	storel %.1, %.2
115	%.4 =l alloc4 4
116	storew %.3, %.4
117	%.5 =l alloc8 8
118	%.7 =l alloc4 4
119	jmp @body.15
120@body.15
121	%.6 =l extsw 42
122	storel %.6, %.5
123	storew 0, %.7
124	jmp @for_cond.16
125@for_cond.16
126	%.8 =w loadw %.7
127	%.9 =w loadw %.4
128	%.10 =w cultw %.8, %.9
129	jnz %.10, @for_body.17, @for_join.19
130@for_body.17
131	%.11 =w call $rand(l %.5)
132	%.12 =l loadl %.2
133	%.13 =w loadw %.7
134	%.14 =l extuw %.13
135	%.15 =l mul %.14, 4
136	%.16 =l add %.12, %.15
137	storew %.11, %.16
138	jmp @for_cont.18
139@for_cont.18
140	%.17 =w loadw %.7
141	%.18 =w add %.17, 1
142	storew %.18, %.7
143	jmp @for_cond.16
144@for_join.19
145	ret
146}
147export
148function w $entry(w %.1) {
149@start.20
150	%.2 =l alloc4 4
151	storew %.1, %.2
152	%.9 =l alloc4 4
153	jmp @body.21
154@body.21
155	%.3 =w loadw %.2
156	%.4 =l extuw %.3
157	%.5 =l mul %.4, 4
158	%.6 =l alloc4 %.5
159	%.7 =w loadw %.2
160	call $fillary(l %.6, w %.7)
161	%.8 =w loadw %.2
162	call $bubble_sort(l %.6, w %.8)
163	storew 0, %.9
164	jmp @for_cond.22
165@for_cond.22
166	%.10 =w loadw %.9
167	%.11 =w loadw %.2
168	%.12 =w sub %.11, 1
169	%.13 =w cultw %.10, %.12
170	jnz %.13, @for_body.23, @for_join.25
171@for_body.23
172	%.14 =w loadw %.9
173	%.15 =l extuw %.14
174	%.16 =l mul %.15, 4
175	%.17 =l add %.6, %.16
176	%.18 =w loadw %.17
177	%.19 =w loadw %.9
178	%.20 =w add %.19, 1
179	%.21 =l extuw %.20
180	%.22 =l mul %.21, 4
181	%.23 =l add %.6, %.22
182	%.24 =w loadw %.23
183	%.25 =w csgtw %.18, %.24
184	jnz %.25, @if_true.26, @if_false.27
185@if_true.26
186	ret 1
187@if_false.27
188	jmp @for_cont.24
189@for_cont.24
190	%.26 =w loadw %.9
191	%.27 =w add %.26, 1
192	storew %.27, %.9
193	jmp @for_cond.22
194@for_join.25
195	ret 0
196}
197export
198function w $main() {
199@start.28
200	jmp @body.29
201@body.29
202	%.1 =w call $entry(w 1000)
203	ret 0
204}