quebex

A software analysis framework built around the QBE intermediate language

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

 1export
 2function $__assert_fail() {
 3@start.1
 4@body.2
 5	hlt
 6}
 7function w $first_divisor(w %.1) {
 8@start.3
 9	%.2 =l alloc4 4
10	storew %.1, %.2
11	%.3 =l alloc4 4
12@body.4
13	storew 2, %.3
14@for_cond.5
15	%.4 =w loadw %.3
16	%.5 =w loadw %.2
17	%.6 =w csltw %.4, %.5
18	jnz %.6, @for_body.6, @for_join.8
19@for_body.6
20	%.7 =w loadw %.2
21	%.8 =w loadw %.3
22	%.9 =w rem %.7, %.8
23	%.10 =w ceqw %.9, 0
24	jnz %.10, @if_true.9, @if_false.10
25@if_true.9
26	%.11 =w loadw %.3
27	ret %.11
28@if_false.10
29@for_cont.7
30	%.12 =w loadw %.3
31	%.13 =w add %.12, 1
32	storew %.13, %.3
33	jmp @for_cond.5
34@for_join.8
35	%.14 =w loadw %.2
36	ret %.14
37}
38data $.Lstring.4 = align 1 { b "prime\000", }
39export
40function w $main() {
41@start.11
42	%.1 =l alloc4 4
43@body.12
44	%.2 =l extsw 1
45	call $quebex_make_symbolic(l %.1, l %.2, l 4, l $.Lstring.4)
46	%.3 =w loadw %.1
47	%.4 =w cslew %.3, 50
48	jnz %.4, @if_true.13, @if_false.14
49@if_true.13
50	%.5 =w loadw %.1
51	%.6 =w csgtw %.5, 1
52	jnz %.6, @logic_right.15, @logic_join.16
53@logic_right.15
54	%.7 =w loadw %.1
55	%.8 =w call $first_divisor(w %.7)
56	%.9 =w loadw %.1
57	%.10 =w ceqw %.8, %.9
58	%.11 =w cnew %.10, 0
59@logic_join.16
60	%.12 =w phi @if_true.13 0, @logic_right.15 %.11
61	jnz %.12, @if_true.17, @if_false.18
62@if_true.17
63	%.13 =w loadw %.1
64	%.14 =w cnew %.13, 43
65	jnz %.14, @logic_join.20, @logic_right.19
66@logic_right.19
67	call $__assert_fail()
68	hlt
69@dead.21
70	%.15 =w cnew 0, 0
71@logic_join.20
72	%.16 =w phi @if_true.17 1, @dead.21 %.15
73	ret 1
74@if_false.18
75	ret 0
76@if_join.22
77@if_false.14
78	ret 0
79}