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