source: Deliverables/D2.2/8051/tests/tmp_tests/Frontend/struct_and_ptr_and_fact.RTLabs @ 1525

Last change on this file since 1525 was 1525, checked in by ayache, 9 years ago

D2.2: function pointers using JMP.

File size: 7.3 KB
Line 
1program:
2
3
4  globals:
5    "p" { ptr }
6    "save" { struct {int32, int32} }
7
8
9  extern "print_sint": int4s -> void
10
11
12  extern "newline": void
13
14
15  "fact1"(int4s %0)
16    locals: int4s %1, int4s %2, int4s %4, int4s %5, int1s %6, int4s %7, int4s %8
17    result: int4s %3
18    stacksize: struct {}
19    entry: fact113
20    exit: fact10
21
22    fact19: emit _cost0 --> fact18
23    fact18: imm %6, imm_int 1 --> fact17
24    fact17: int1sto4 %3, %6 --> fact10
25    fact16: emit _cost1 --> fact15
26    fact15: imm %5, imm_int 1 --> fact14
27    fact14: sub %4, %0, %5 --> fact13
28    fact13: call "fact1", [%4], %2: int4s -> int4s --> fact12
29    fact12: id %1, %2 --> fact11
30    fact113: emit _cost2 --> fact112
31    fact112: imm %8, imm_int 1 --> fact111
32    fact111: le %7, %0, %8 --> fact110
33    fact110: %7? --> fact19, fact16
34    fact11: mul %3, %0, %1 --> fact10
35    fact10: return %3
36
37
38  "fact2"(int4s %0)
39    locals: int4s %1, int4s %2, int4s %4, int4s %5, int4s %6, int1s %7, int1s %8
40    result: int4s %3
41    stacksize: struct {}
42    entry: fact215
43    exit: fact20
44
45    fact29: notbool %5, %6 --> fact28
46    fact28: %5? --> fact22, fact27
47    fact27: emit _cost3 --> fact26
48    fact26: mul %2, %2, %1 --> fact25
49    fact25: imm %4, imm_int 1 --> fact24
50    fact24: add %1, %1, %4 --> fact23
51    fact23: --> fact210
52    fact22: emit _cost4 --> fact21
53    fact215: emit _cost5 --> fact214
54    fact214: imm %8, imm_int 1 --> fact213
55    fact213: int1sto4 %2, %8 --> fact212
56    fact212: imm %7, imm_int 1 --> fact211
57    fact211: int1sto4 %1, %7 --> fact23
58    fact210: le %6, %1, %0 --> fact29
59    fact21: id %3, %2 --> fact20
60    fact20: return %3
61
62
63  "main"()
64    locals: int4s %0, int4s %1, int4s %2, int4s %3, int1s %5, int1u %6, int4s %7, int1u %8, int4s %9, int4s %10, ptr %11, ptr %12, offset %13, ptr %14, offset %15, ptr %16, ptr %17, offset %18, ptr %19, ptr %20, int1s %21, int1s %22, int1s %23, ptr %24, offset %25, ptr %26, ptr %27, offset %28, ptr %29, offset %30, int4s %31, ptr %32, ptr %33, offset %34, ptr %35, ptr %36, offset %37, ptr %38, offset %39, int4s %40, ptr %41, ptr %42, offset %43, ptr %44, int4s %45, ptr %46, ptr %47, offset %48, ptr %49, offset %50, ptr %51, offset %52, ptr %53, int4s %54, ptr %55, ptr %56, offset %57, ptr %58, offset %59, ptr %60, offset %61, ptr %62, ptr %63, ptr %64, offset %65, ptr %66, ptr %67, ptr %68, offset %69, ptr %70, int1s %71, int1s %72, int1s %73, ptr %74, offset %75, ptr %76, int4s %77, int1s %78, ptr %79, offset %80, ptr %81, offset %82
65    result: int4s %4
66    stacksize: struct {struct {int32, int32}, struct {int32, int32}, ptr[3]}
67    entry: main91
68    exit: main0
69
70    main91: emit _cost6 --> main90
71    main90: imm %81, imm_addr STACK --> main89
72    main9: addp %12, %14, %15 --> main8
73    main89: imm %82, imm_offset { struct {struct {int32, int32}}, 0 } --> main88
74    main88: addp %79, %81, %82 --> main87
75    main87: imm %80, imm_offset { struct {int32, int32}, 1 } --> main86
76    main86: addp %76, %79, %80 --> main85
77    main85: imm %78, imm_int 5 --> main84
78    main84: int1sto4 %77, %78 --> main83
79    main83: store int32, %76, %77 --> main82
80    main82: imm %74, imm_addr STACK --> main81
81    main81: imm %75, imm_offset { struct {struct {int32, int32}, struct {int32, int32}, ptr[3]}, 2 } --> main80
82    main80: addp %70, %74, %75 --> main79
83    main8: imm %13, imm_offset { struct {int32, int32}, 1 } --> main7
84    main79: imm %72, imm_int 1 --> main78
85    main78: imm %73, imm_sizeof (ptr) --> main77
86    main77: mul %71, %72, %73 --> main76
87    main76: addp %66, %70, %71 --> main75
88    main75: imm %68, imm_addr STACK --> main74
89    main74: imm %69, imm_offset { struct {struct {int32, int32}}, 0 } --> main73
90    main73: addp %67, %68, %69 --> main72
91    main72: store ptr, %66, %67 --> main71
92    main71: imm %62, imm_addr "p" --> main70
93    main70: imm %64, imm_addr STACK --> main69
94    main7: addp %11, %12, %13 --> main6
95    main69: imm %65, imm_offset { struct {struct {int32, int32}}, 0 } --> main68
96    main68: addp %63, %64, %65 --> main67
97    main67: store ptr, %62, %63 --> main66
98    main66: imm %60, imm_addr "save" --> main65
99    main65: imm %61, imm_offset { struct {int32, int32}, 0 } --> main64
100    main64: addp %53, %60, %61 --> main63
101    main63: imm %58, imm_addr STACK --> main62
102    main62: imm %59, imm_offset { struct {struct {int32, int32}}, 0 } --> main61
103    main61: addp %56, %58, %59 --> main60
104    main60: imm %57, imm_offset { struct {int32, int32}, 0 } --> main59
105    main6: load int32, %11, %10 --> main5
106    main59: addp %55, %56, %57 --> main58
107    main58: load int32, %55, %54 --> main57
108    main57: store int32, %53, %54 --> main56
109    main56: imm %51, imm_addr "save" --> main55
110    main55: imm %52, imm_offset { struct {int32, int32}, 1 } --> main54
111    main54: addp %44, %51, %52 --> main53
112    main53: imm %49, imm_addr STACK --> main52
113    main52: imm %50, imm_offset { struct {struct {int32, int32}}, 0 } --> main51
114    main51: addp %47, %49, %50 --> main50
115    main50: imm %48, imm_offset { struct {int32, int32}, 1 } --> main49
116    main5: eq %7, %9, %10 --> main4
117    main49: addp %46, %47, %48 --> main48
118    main48: load int32, %46, %45 --> main47
119    main47: store int32, %44, %45 --> main46
120    main46: imm %42, imm_addr "save" --> main45
121    main45: imm %43, imm_offset { struct {int32, int32}, 1 } --> main44
122    main44: addp %41, %42, %43 --> main43
123    main43: load int32, %41, %40 --> main42
124    main42: call "fact1", [%40], %2: int4s -> int4s --> main41
125    main41: id %1, %2 --> main40
126    main40: imm %38, imm_addr STACK --> main39
127    main4: call "print_sint", [%7], %8: int4s -> void --> main3
128    main39: imm %39, imm_offset { struct {struct {int32, int32}}, 0 } --> main38
129    main38: addp %36, %38, %39 --> main37
130    main37: imm %37, imm_offset { struct {int32, int32}, 1 } --> main36
131    main36: addp %35, %36, %37 --> main35
132    main35: store int32, %35, %1 --> main34
133    main34: imm %33, imm_addr "save" --> main33
134    main33: imm %34, imm_offset { struct {int32, int32}, 1 } --> main32
135    main32: addp %32, %33, %34 --> main31
136    main31: load int32, %32, %31 --> main30
137    main30: call "fact2", [%31], %3: int4s -> int4s --> main29
138    main3: call "newline", [], %6: void --> main2
139    main29: id %0, %3 --> main28
140    main28: imm %29, imm_addr STACK --> main27
141    main27: imm %30, imm_offset { struct {struct {int32, int32}, struct {int32, int32}}, 1 } --> main26
142    main26: addp %27, %29, %30 --> main25
143    main25: imm %28, imm_offset { struct {int32, int32}, 1 } --> main24
144    main24: addp %26, %27, %28 --> main23
145    main23: store int32, %26, %0 --> main22
146    main22: imm %24, imm_addr STACK --> main21
147    main21: imm %25, imm_offset { struct {struct {int32, int32}, struct {int32, int32}, ptr[3]}, 2 } --> main20
148    main20: addp %20, %24, %25 --> main19
149    main2: imm %5, imm_int 0 --> main1
150    main19: imm %22, imm_int 1 --> main18
151    main18: imm %23, imm_sizeof (ptr) --> main17
152    main17: mul %21, %22, %23 --> main16
153    main16: addp %19, %20, %21 --> main15
154    main15: load ptr, %19, %17 --> main14
155    main14: imm %18, imm_offset { struct {int32, int32}, 1 } --> main13
156    main13: addp %16, %17, %18 --> main12
157    main12: load int32, %16, %9 --> main11
158    main11: imm %14, imm_addr STACK --> main10
159    main10: imm %15, imm_offset { struct {struct {int32, int32}, struct {int32, int32}}, 1 } --> main9
160    main1: int1sto4 %4, %5 --> main0
161    main0: return %4
162
163
Note: See TracBrowser for help on using the repository browser.