Commit 1d23e27ca3ae13655041d4aaf6325a922e3bef27
1 parent
dd7468b7
Exists in
master
incremental
Showing
9 changed files
with
21 additions
and
248 deletions
Show diff stats
runtime/test3
No preview for this file type
sim2c-1.0/epilogue.m4
@@ -2,5 +2,6 @@ _divert_(-1)_dnl_ | @@ -2,5 +2,6 @@ _divert_(-1)_dnl_ | ||
2 | # ----------------------------------------------------------------------------- | 2 | # ----------------------------------------------------------------------------- |
3 | _divert_(0)_dnl_ | 3 | _divert_(0)_dnl_ |
4 | #include <stdio.h> | 4 | #include <stdio.h> |
5 | +#include <stdlib.h> | ||
5 | _dumpdata_ | 6 | _dumpdata_ |
6 | _dumptext_ | 7 | _dumptext_ |
No preview for this file type
sim2c-1.0/test2.c
@@ -1,228 +0,0 @@ | @@ -1,228 +0,0 @@ | ||
1 | -#include <stdio.h> | ||
2 | - | ||
3 | -// == Global data ============================================================= | ||
4 | - | ||
5 | -#define W * 4 | ||
6 | -#define KB * 1024 | ||
7 | -#define MB KB KB | ||
8 | - | ||
9 | -#define DATA_SZ 1 MB | ||
10 | -#define HEAP_SZ 1 MB | ||
11 | -#define STACK_SZ 1 MB | ||
12 | - | ||
13 | -#define MEM_SZ ((DATA_SZ) + (HEAP_SZ) + (STACK_SZ)) | ||
14 | - | ||
15 | -union { | ||
16 | - int mem[0]; | ||
17 | - struct { | ||
18 | - int m_display[0]; // data label for "display" | ||
19 | - int a_0001; | ||
20 | - int a_0002; | ||
21 | - int a_0003; | ||
22 | - int m_htop[0]; // data label for "htop" | ||
23 | - int a_0004; | ||
24 | - int m_heap[0]; // data label for "heap" | ||
25 | - } named; | ||
26 | - struct { | ||
27 | - int z_data[DATA_SZ]; | ||
28 | - int z_heap[HEAP_SZ]; | ||
29 | - int z_stack[STACK_SZ]; | ||
30 | - } zone; | ||
31 | -} global; | ||
32 | - | ||
33 | -#define M global.mem | ||
34 | -#define DATA global.zone.z_data | ||
35 | -#define HEAP global.zone.z_heap | ||
36 | -#define STACK global.zone.z_stack | ||
37 | - | ||
38 | -int SP = MEM_SZ; | ||
39 | -int FP = 0; | ||
40 | -int SR; | ||
41 | -void *PC; // (unused) | ||
42 | - | ||
43 | -// -- Names for global variables ---------------------------------------------- | ||
44 | - | ||
45 | -#define GV_display ((int *) &global.named.m_display - (int *) &global.named) | ||
46 | -#define GV_htop ((int *) &global.named.m_htop - (int *) &global.named) | ||
47 | -#define GV_heap ((int *) &global.named.m_heap - (int *) &global.named) | ||
48 | - | ||
49 | -// == Program ================================================================= | ||
50 | - | ||
51 | -int main (int argc, char *argv[]) | ||
52 | -{ | ||
53 | - int i; | ||
54 | - | ||
55 | -// -- Initialization ---------------------------------------------------------- | ||
56 | - global.named.a_0001 = 0; | ||
57 | - global.named.a_0002 = 0; | ||
58 | - global.named.a_0003 = 0; | ||
59 | - global.named.a_0004 = GV_heap; | ||
60 | - | ||
61 | -// -- Library ----------------------------------------------------------------- | ||
62 | - | ||
63 | - goto lib_init; // skip library code! | ||
64 | - | ||
65 | -print_int: // print_int (int) -> () | ||
66 | - printf ("%d\n", M[SP+1]); | ||
67 | - goto * ((void *) M[SP++]); | ||
68 | - | ||
69 | -print_char: // print_char (int) -> () | ||
70 | - putchar (M[SP+1]); | ||
71 | - goto * ((void *) M[SP++]); | ||
72 | - | ||
73 | -read_int: // read_int () -> int | ||
74 | - scanf ("%d", &M[SP+1]); | ||
75 | - goto * ((void *) M[SP++]); | ||
76 | - | ||
77 | -read_char: // read_char () -> int | ||
78 | - M[SP+1] = getchar (); | ||
79 | - goto * ((void *) M[SP++]); | ||
80 | - | ||
81 | -halt: // halt () -> () | ||
82 | - return 0; | ||
83 | - | ||
84 | -dump_regs: // dump_regs () -> () | ||
85 | - { | ||
86 | - printf ("-- Register dump --\n"); | ||
87 | - printf ("SP = 0x%x (%d)\n", (int) SP, (int) SP); | ||
88 | - printf ("FP = 0x%x (%d)\n", (int) FP, (int) FP); | ||
89 | - printf ("SR = 0x%x (%d)\n", (int) SR, (int) SR); | ||
90 | - printf ("PC = (unused)\n"); | ||
91 | - } | ||
92 | - goto * ((void *) M[SP++]); | ||
93 | - | ||
94 | -dump_stack: // dump_stack () -> () | ||
95 | - { | ||
96 | - printf ("-- Stack dump --\n"); | ||
97 | - } | ||
98 | - goto * ((void *) M[SP++]); | ||
99 | - | ||
100 | -stack_trace: // stack_trace () -> () | ||
101 | - { | ||
102 | - printf ("-- Stack trace --\n"); | ||
103 | - } | ||
104 | - goto * ((void *) M[SP++]); | ||
105 | - | ||
106 | -lib_init: | ||
107 | - { | ||
108 | - // (declarations for function ) (print_int); | ||
109 | - // (declarations for function ) (print_char); | ||
110 | - // (declarations for function ) (read_int); | ||
111 | - // (declarations for function ) (read_char); | ||
112 | - // (declarations for function ) (halt); | ||
113 | - // (declarations for function ) (dump_regs); | ||
114 | - // (declarations for function ) (dump_stack); | ||
115 | - // (declarations for function ) (stack_trace); | ||
116 | - } | ||
117 | - | ||
118 | -// -- Start execution --------------------------------------------------------- | ||
119 | - M[--SP] = (int) &&L_exit_program; // Save return address for main program | ||
120 | - goto program; // start kicking... | ||
121 | -L_exit_program: // Return here, and... | ||
122 | - exit (0); // quit. | ||
123 | - | ||
124 | - | ||
125 | -// -- Instructions ------------------------------------------------------------ | ||
126 | - M[--SP] = (int) &&_let_0; // PUSH _let_0 | ||
127 | - goto * ((void *) M[SP++]); // JUMP | ||
128 | -nfactor_1: | ||
129 | - M[--SP] = 4; // PUSH 4 | ||
130 | - { int N = M[SP]; M[SP]= FP; FP=SP+1; SP -= N; } // LINK | ||
131 | - M[--SP] = GV_display; // PUSH display | ||
132 | - M[--SP] = 8; // PUSH 8 | ||
133 | - M[SP+1] = M[SP+1] + M[SP+0]; ++SP; // ADD | ||
134 | - M[SP-1] = M[SP]; --SP; // DUP | ||
135 | - M[SP] = M[M[SP]]; // LOAD | ||
136 | - M[--SP] = -4; // PUSH -4 | ||
137 | - M[SP] = M[SP] + FP; // LOCAL | ||
138 | - M[M[SP]] = M[SP+1]; SP += 2; // STORE | ||
139 | - M[--SP] = 0; // PUSH 0 | ||
140 | - M[SP] = M[SP] + FP; // LOCAL | ||
141 | - M[SP-1] = M[SP]; M[SP] = M[SP+1]; M[SP+1]=M[SP-1]; // SWAP | ||
142 | - M[M[SP]] = M[SP+1]; SP += 2; // STORE | ||
143 | - M[--SP] = (int) &&_then_1; // PUSH _then_1 | ||
144 | - M[--SP] = (int) &&_neq_3; // PUSH _neq_3 | ||
145 | - M[--SP] = 12; // PUSH 12 | ||
146 | - M[SP] = M[SP] + FP; // LOCAL | ||
147 | - M[SP] = M[M[SP]]; // LOAD | ||
148 | - M[--SP] = 0; // PUSH 0 | ||
149 | - M[SP+1] = M[SP+1] - M[SP+0]; ++SP; // SUB | ||
150 | - if (! M[SP++]) goto P_26; // SKIPZ | ||
151 | - goto * ((void *) M[SP++]); // JUMP | ||
152 | -P_26: ++SP; // POP | ||
153 | - M[--SP] = 1; // PUSH 1 | ||
154 | - M[--SP] = (int) &&_fimeq_4; // PUSH _fimeq_4 | ||
155 | - goto * ((void *) M[SP++]); // JUMP | ||
156 | -_neq_3: | ||
157 | - M[--SP] = 0; // PUSH 0 | ||
158 | -_fimeq_4: | ||
159 | - if (! M[SP++]) goto P_33; // SKIPZ | ||
160 | - goto * ((void *) M[SP++]); // JUMP | ||
161 | -P_33: ++SP; // POP | ||
162 | - M[--SP] = 12; // PUSH 12 | ||
163 | - M[SP] = M[SP] + FP; // LOCAL | ||
164 | - M[SP] = M[M[SP]]; // LOAD | ||
165 | - M[--SP] = 12; // PUSH 12 | ||
166 | - M[SP] = M[SP] + FP; // LOCAL | ||
167 | - M[SP] = M[M[SP]]; // LOAD | ||
168 | - M[--SP] = 1; // PUSH 1 | ||
169 | - M[SP+1] = M[SP+1] - M[SP+0]; ++SP; // SUB | ||
170 | - M[SP-1] = M[SP]; --SP; // DUP | ||
171 | - M[--SP] = (int) &&nfactor_1; // PUSH nfactor_1 | ||
172 | - { void *C = (void *) M[SP]; M[SP]=(int)&&P_45; goto *C; } // CALL | ||
173 | -P_45: M[SP-1] = M[SP]; M[SP] = M[SP+1]; M[SP+1]=M[SP-1]; // SWAP | ||
174 | - ++SP; // POP | ||
175 | - M[SP+1] = M[SP+1] * M[SP+0]; ++SP; // MUL | ||
176 | - M[--SP] = (int) &&_fimif_2; // PUSH _fimif_2 | ||
177 | - goto * ((void *) M[SP++]); // JUMP | ||
178 | -_then_1: | ||
179 | - M[--SP] = 1; // PUSH 1 | ||
180 | -_fimif_2: | ||
181 | - M[--SP] = 8; // PUSH 8 | ||
182 | - M[SP] = M[SP] + FP; // LOCAL | ||
183 | - M[M[SP]] = M[SP+1]; SP += 2; // STORE | ||
184 | - M[--SP] = -4; // PUSH -4 | ||
185 | - M[SP] = M[SP] + FP; // LOCAL | ||
186 | - M[SP] = M[M[SP]]; // LOAD | ||
187 | - M[--SP] = GV_display; // PUSH display | ||
188 | - M[--SP] = 8; // PUSH 8 | ||
189 | - M[SP+1] = M[SP+1] + M[SP+0]; ++SP; // ADD | ||
190 | - M[M[SP]] = M[SP+1]; SP += 2; // STORE | ||
191 | - SP=FP; FP=M[SP-1]; // UNLINK | ||
192 | - goto * ((void *) M[SP++]); // JUMP | ||
193 | -_let_0: | ||
194 | - M[--SP] = 0; // PUSH 0 | ||
195 | - M[--SP] = 4; // PUSH 4 | ||
196 | - { int N = M[SP]; M[SP]= FP; FP=SP+1; SP -= N; } // LINK | ||
197 | - M[--SP] = GV_display; // PUSH display | ||
198 | - M[--SP] = 4; // PUSH 4 | ||
199 | - M[SP+1] = M[SP+1] + M[SP+0]; ++SP; // ADD | ||
200 | - M[SP-1] = M[SP]; --SP; // DUP | ||
201 | - M[SP] = M[M[SP]]; // LOAD | ||
202 | - M[--SP] = -4; // PUSH -4 | ||
203 | - M[SP] = M[SP] + FP; // LOCAL | ||
204 | - M[M[SP]] = M[SP+1]; SP += 2; // STORE | ||
205 | - M[--SP] = 0; // PUSH 0 | ||
206 | - M[SP] = M[SP] + FP; // LOCAL | ||
207 | - M[SP-1] = M[SP]; M[SP] = M[SP+1]; M[SP+1]=M[SP-1]; // SWAP | ||
208 | - M[M[SP]] = M[SP+1]; SP += 2; // STORE | ||
209 | - M[--SP] = 10; // PUSH 10 | ||
210 | - M[SP-1] = M[SP]; --SP; // DUP | ||
211 | - M[--SP] = (int) &&nfactor_1; // PUSH nfactor_1 | ||
212 | - { void *C = (void *) M[SP]; M[SP]=(int)&&P_82; goto *C; } // CALL | ||
213 | -P_82: M[SP-1] = M[SP]; M[SP] = M[SP+1]; M[SP+1]=M[SP-1]; // SWAP | ||
214 | - ++SP; // POP | ||
215 | - M[--SP] = 4; // PUSH 4 | ||
216 | - M[SP] = M[SP] + FP; // LOCAL | ||
217 | - M[M[SP]] = M[SP+1]; SP += 2; // STORE | ||
218 | - M[--SP] = -4; // PUSH -4 | ||
219 | - M[SP] = M[SP] + FP; // LOCAL | ||
220 | - M[SP] = M[M[SP]]; // LOAD | ||
221 | - M[--SP] = GV_display; // PUSH display | ||
222 | - M[--SP] = 4; // PUSH 4 | ||
223 | - M[SP+1] = M[SP+1] + M[SP+0]; ++SP; // ADD | ||
224 | - M[M[SP]] = M[SP+1]; SP += 2; // STORE | ||
225 | - SP=FP; FP=M[SP-1]; // UNLINK | ||
226 | - | ||
227 | -} | ||
228 | - |
sim2c-1.0/test3
No preview for this file type
sim2c-1.0/test3.c
@@ -13,15 +13,15 @@ | @@ -13,15 +13,15 @@ | ||
13 | #define MEM_SZ ((DATA_SZ) + (HEAP_SZ) + (STACK_SZ)) | 13 | #define MEM_SZ ((DATA_SZ) + (HEAP_SZ) + (STACK_SZ)) |
14 | 14 | ||
15 | union { | 15 | union { |
16 | - long mem[0]; | 16 | + int mem[0]; |
17 | struct { | 17 | struct { |
18 | - long m_x; | ||
19 | - long m_xpto[20]; | 18 | + int m_x; |
19 | + int m_xpto[20]; | ||
20 | } named; | 20 | } named; |
21 | struct { | 21 | struct { |
22 | - long z_data[DATA_SZ]; | ||
23 | - long z_heap[HEAP_SZ]; | ||
24 | - long z_stack[STACK_SZ]; | 22 | + int z_data[DATA_SZ]; |
23 | + int z_heap[HEAP_SZ]; | ||
24 | + int z_stack[STACK_SZ]; | ||
25 | } zone; | 25 | } zone; |
26 | } global; | 26 | } global; |
27 | 27 | ||
@@ -30,21 +30,21 @@ union { | @@ -30,21 +30,21 @@ union { | ||
30 | #define HEAP global.zone.z_heap | 30 | #define HEAP global.zone.z_heap |
31 | #define STACK global.zone.z_stack | 31 | #define STACK global.zone.z_stack |
32 | 32 | ||
33 | -long SP = MEM_SZ; | ||
34 | -long FP = 0; | ||
35 | -long SR; | 33 | +int SP = MEM_SZ; |
34 | +int FP = 0; | ||
35 | +int SR; | ||
36 | void *PC; // (unused) | 36 | void *PC; // (unused) |
37 | 37 | ||
38 | // -- Names for global variables ---------------------------------------------- | 38 | // -- Names for global variables ---------------------------------------------- |
39 | 39 | ||
40 | -#define GV_x ((long *) &global.named.m_x - (long *) &global.named) | ||
41 | -#define GV_xpto ((long *) &global.named.m_xpto - (long *) &global.named) | 40 | +#define GV_x ((int *) &global.named.m_x - (int *) &global.named) |
41 | +#define GV_xpto ((int *) &global.named.m_xpto - (int *) &global.named) | ||
42 | 42 | ||
43 | // == Program ================================================================= | 43 | // == Program ================================================================= |
44 | 44 | ||
45 | int main (int argc, char *argv[]) | 45 | int main (int argc, char *argv[]) |
46 | { | 46 | { |
47 | - long i; | 47 | + int i; |
48 | 48 | ||
49 | // -- Initialization ---------------------------------------------------------- | 49 | // -- Initialization ---------------------------------------------------------- |
50 | global.named.m_x = 123; | 50 | global.named.m_x = 123; |
@@ -55,7 +55,7 @@ int main (int argc, char *argv[]) | @@ -55,7 +55,7 @@ int main (int argc, char *argv[]) | ||
55 | goto lib_init; // skip library code! | 55 | goto lib_init; // skip library code! |
56 | 56 | ||
57 | print_int: // print_int (int) -> () | 57 | print_int: // print_int (int) -> () |
58 | - printf ("%ld\n", M[SP+1]); | 58 | + printf ("%d\n", M[SP+1]); |
59 | goto * ((void *) M[SP++]); | 59 | goto * ((void *) M[SP++]); |
60 | 60 | ||
61 | print_char: // print_char (int) -> () | 61 | print_char: // print_char (int) -> () |
@@ -76,9 +76,9 @@ halt: // halt () -> () | @@ -76,9 +76,9 @@ halt: // halt () -> () | ||
76 | dump_regs: // dump_regs () -> () | 76 | dump_regs: // dump_regs () -> () |
77 | { | 77 | { |
78 | printf ("-- Register dump --\n"); | 78 | printf ("-- Register dump --\n"); |
79 | - printf ("SP = 0x%x (%d)\n", (long) SP, (long) SP); | ||
80 | - printf ("FP = 0x%x (%d)\n", (long) FP, (long) FP); | ||
81 | - printf ("SR = 0x%x (%d)\n", (long) SR, (long) SR); | 79 | + printf ("SP = 0x%x (%d)\n", (int) SP, (int) SP); |
80 | + printf ("FP = 0x%x (%d)\n", (int) FP, (int) FP); | ||
81 | + printf ("SR = 0x%x (%d)\n", (int) SR, (int) SR); | ||
82 | printf ("PC = (unused)\n"); | 82 | printf ("PC = (unused)\n"); |
83 | } | 83 | } |
84 | goto * ((void *) M[SP++]); | 84 | goto * ((void *) M[SP++]); |
@@ -108,7 +108,7 @@ lib_init: | @@ -108,7 +108,7 @@ lib_init: | ||
108 | } | 108 | } |
109 | 109 | ||
110 | // -- Start execution --------------------------------------------------------- | 110 | // -- Start execution --------------------------------------------------------- |
111 | - M[--SP] = (long) &&L_exit_program; // Save return address for main program | 111 | + M[--SP] = (int) &&L_exit_program; // Save return address for main program |
112 | goto program; // start kicking... | 112 | goto program; // start kicking... |
113 | L_exit_program: // Return here, and... | 113 | L_exit_program: // Return here, and... |
114 | exit (0); // quit. | 114 | exit (0); // quit. |
@@ -117,10 +117,10 @@ L_exit_program: // Return here, and... | @@ -117,10 +117,10 @@ L_exit_program: // Return here, and... | ||
117 | // -- Instructions ------------------------------------------------------------ | 117 | // -- Instructions ------------------------------------------------------------ |
118 | program: | 118 | program: |
119 | M[--SP] = 0; // PUSH 0 | 119 | M[--SP] = 0; // PUSH 0 |
120 | - { long N = M[SP]; M[SP]= FP; FP=SP+1; SP -= N; } // LINK | 120 | + { int N = M[SP]; M[SP]= FP; FP=SP+1; SP -= N; } // LINK |
121 | M[--SP] = 12; // PUSH 12 | 121 | M[--SP] = 12; // PUSH 12 |
122 | - M[--SP] = (long) &&print_int; // PUSH print_int | ||
123 | - { void *C = (void *) M[SP]; M[SP]=(long)&&P_6; goto *C; } // CALL | 122 | + M[--SP] = (int) &&print_int; // PUSH print_int |
123 | + { void *C = (void *) M[SP]; M[SP]=(int)&&P_6; goto *C; } // CALL | ||
124 | P_6: SP=FP; FP=M[SP-1]; // UNLINK | 124 | P_6: SP=FP; FP=M[SP-1]; // UNLINK |
125 | goto * ((void *) M[SP++]); // JUMP | 125 | goto * ((void *) M[SP++]); // JUMP |
126 | 126 |
No preview for this file type
No preview for this file type