quebex

A software analysis framework built around the QBE intermediate language

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

 1function w $first_divisor(w %.1) {
 2@start.1
 3	%.2 =l alloc4 4
 4	storew %.1, %.2
 5	%.3 =l alloc4 4
 6	jmp @body.2
 7@body.2
 8	storew 2, %.3
 9	jmp @for_cond.3
10@for_cond.3
11	%.4 =w loadw %.3
12	%.5 =w loadw %.2
13	%.6 =w cultw %.4, %.5
14	jnz %.6, @for_body.4, @for_join.6
15@for_body.4
16	%.7 =w loadw %.2
17	%.8 =w loadw %.3
18	%.9 =w urem %.7, %.8
19	%.10 =w ceqw %.9, 0
20	jnz %.10, @if_true.7, @if_false.8
21@if_true.7
22	%.11 =w loadw %.3
23	ret %.11
24@if_false.8
25	jmp @for_cont.5
26@for_cont.5
27	%.12 =w loadw %.3
28	%.13 =w add %.12, 1
29	storew %.13, %.3
30	jmp @for_cond.3
31@for_join.6
32	%.14 =w loadw %.2
33	ret %.14
34}
35export
36function w $entry(w %.1) {
37@start.9
38	%.2 =l alloc4 4
39	storew %.1, %.2
40	%.5 =l alloc4 4
41	%.9 =l alloc4 4
42	jmp @body.10
43@body.10
44	%.3 =w loadw %.2
45	%.4 =w culew %.3, 50
46	jnz %.4, @if_true.11, @if_false.12
47@if_true.11
48	%.6 =w loadw %.2
49	storew %.6, %.5
50	%.7 =w loadw %.5
51	%.8 =w culew %.7, 1
52	jnz %.8, @if_true.13, @if_false.14
53@if_true.13
54	ret 0
55@if_false.14
56	%.10 =w loadw %.5
57	storew %.10, %.9
58	%.11 =w loadw %.9
59	%.12 =w call $first_divisor(w %.11)
60	%.13 =w loadw %.9
61	%.14 =w ceqw %.12, %.13
62	jnz %.14, @if_true.16, @if_false.17
63@if_true.16
64	ret 1
65@if_false.17
66	ret 0
67@if_join.18
68	jmp @if_join.15
69@if_join.15
70	jmp @if_false.12
71@if_false.12
72	ret 0
73}