Matt Coles 8 lat temu
rodzic
commit
f782720823

+ 11 - 0
cw/main.c

@@ -268,6 +268,17 @@ BIND* recursive_interpret(NODE *tree, ENV *env_ptr) {
268 268
     add_function_to_env(tree, env_ptr);
269 269
     return NULL;
270 270
   }
271
+  if (tree->type=='~') {
272
+    if (tree->right->type == '=') {
273
+      printf("ASSIGNING TYPE:\n");
274
+      print_tree(tree->left);
275
+      add_var_to_env(tree->right, env_ptr);
276
+      return NULL;
277
+    } else {
278
+      recursive_interpret(tree->left, env_ptr);
279
+      return recursive_interpret(tree->right, env_ptr);
280
+    }
281
+  }
271 282
   if (tree->type=='=') {
272 283
     // this is a variable definition
273 284
     add_var_to_env(tree, env_ptr);

+ 3 - 9
cw/simple.c

@@ -1,11 +1,5 @@
1
-/* ##answer: 11 */
2
-function cplus(int a) {
3
-  int cplusa(int b) {
4
-    return a + b;
5
-  }
6
-  return cplusa;
7
-}
8
-
9 1
 int main() {
10
-  return cplus(5)(6);
2
+  int x = 1;
3
+
4
+  return x();
11 5
 }

+ 77 - 0
tac/tests/all_scopes.asm

@@ -0,0 +1,77 @@
1
+.globl __start
2
+__start:
3
+li $a0, 72
4
+li $v0, 9
5
+syscall
6
+or $fp, $0, $v0
7
+la $t0, main
8
+sw $t0, 0($fp)
9
+sw $0, 4($fp)
10
+jal main
11
+j done
12
+fun1:
13
+li $a0, 72
14
+li $v0, 9
15
+syscall
16
+sw $fp, 4($v0)
17
+sw $16, 8($fp)
18
+sw $17, 12($fp)
19
+sw $18, 16($fp)
20
+sw $19, 20($fp)
21
+sw $20, 24($fp)
22
+sw $21, 28($fp)
23
+sw $22, 32($fp)
24
+sw $23, 36($fp)
25
+or $fp, $0, $v0
26
+la $t0, fun1
27
+sw $t0, 0($fp)
28
+sw $ra, 64($fp)
29
+li $8, 11
30
+or $16, $0, $8
31
+sw $16, 8($fp)
32
+sw $17, 12($fp)
33
+sw $18, 16($fp)
34
+sw $19, 20($fp)
35
+sw $20, 24($fp)
36
+sw $21, 28($fp)
37
+sw $22, 32($fp)
38
+sw $23, 36($fp)
39
+or $v1, $0, $16
40
+jr $31
41
+main:
42
+li $a0, 72
43
+li $v0, 9
44
+syscall
45
+sw $fp, 4($v0)
46
+or $fp, $0, $v0
47
+la $t0, main
48
+sw $t0, 0($fp)
49
+sw $ra, 64($fp)
50
+li $9, 4
51
+or $16, $0, $9
52
+jal fun1
53
+lw $fp, 4($fp)
54
+lw $ra, 64($fp)
55
+lw $16, 8($fp)
56
+or $10, $0, $v1
57
+mult $16, $10
58
+mflo $11
59
+sw $16, 8($fp)
60
+sw $17, 12($fp)
61
+sw $18, 16($fp)
62
+sw $19, 20($fp)
63
+sw $20, 24($fp)
64
+sw $21, 28($fp)
65
+sw $22, 32($fp)
66
+sw $23, 36($fp)
67
+or $v1, $0, $11
68
+jr $31
69
+done:
70
+or $a0, $v1, $0
71
+ori $v0, $0, 1
72
+syscall
73
+ori $a0, $0, 0xA
74
+ori $v0, $0, 0xB
75
+syscall
76
+ori $v0, $0, 10
77
+syscall

+ 125 - 0
tac/tests/cplus.asm

@@ -0,0 +1,125 @@
1
+.globl __start
2
+__start:
3
+li $a0, 72
4
+li $v0, 9
5
+syscall
6
+or $fp, $0, $v0
7
+la $t0, main
8
+sw $t0, 0($fp)
9
+sw $0, 4($fp)
10
+jal main
11
+j done
12
+cplus:
13
+li $a0, 72
14
+li $v0, 9
15
+syscall
16
+sw $fp, 4($v0)
17
+sw $16, 8($fp)
18
+sw $17, 12($fp)
19
+sw $18, 16($fp)
20
+sw $19, 20($fp)
21
+sw $20, 24($fp)
22
+sw $21, 28($fp)
23
+sw $22, 32($fp)
24
+sw $23, 36($fp)
25
+or $fp, $0, $v0
26
+la $t0, cplus
27
+sw $t0, 0($fp)
28
+sw $ra, 64($fp)
29
+or $16, $0, $5
30
+li $a0, 72
31
+li $v0, 9
32
+syscall
33
+or $17, $v0, $0
34
+la $v0, cplusa
35
+sw $v0, 0($17)
36
+sw $fp, 68($17)
37
+sw $16, 8($fp)
38
+sw $17, 12($fp)
39
+sw $18, 16($fp)
40
+sw $19, 20($fp)
41
+sw $20, 24($fp)
42
+sw $21, 28($fp)
43
+sw $22, 32($fp)
44
+sw $23, 36($fp)
45
+or $v1, $0, $17
46
+jr $31
47
+cplusa:
48
+li $a0, 72
49
+li $v0, 9
50
+syscall
51
+sw $k1, 68($v0)
52
+sw $fp, 4($v0)
53
+sw $16, 8($fp)
54
+sw $17, 12($fp)
55
+sw $18, 16($fp)
56
+sw $19, 20($fp)
57
+sw $20, 24($fp)
58
+sw $21, 28($fp)
59
+sw $22, 32($fp)
60
+sw $23, 36($fp)
61
+or $fp, $0, $v0
62
+la $t0, cplusa
63
+sw $t0, 0($fp)
64
+sw $ra, 64($fp)
65
+or $16, $0, $5
66
+or $k0, $fp, $0
67
+lw $fp, 68($fp)
68
+lw $fp, 68($fp)
69
+lw $8, 8($fp)
70
+or $fp, $k0, $0
71
+add $9, $8, $16
72
+sw $16, 8($fp)
73
+sw $17, 12($fp)
74
+sw $18, 16($fp)
75
+sw $19, 20($fp)
76
+sw $20, 24($fp)
77
+sw $21, 28($fp)
78
+sw $22, 32($fp)
79
+sw $23, 36($fp)
80
+or $v1, $0, $9
81
+jr $31
82
+main:
83
+li $a0, 72
84
+li $v0, 9
85
+syscall
86
+sw $fp, 4($v0)
87
+or $fp, $0, $v0
88
+la $t0, main
89
+sw $t0, 0($fp)
90
+sw $ra, 64($fp)
91
+li $10, 5
92
+or $5, $0, $10
93
+jal cplus
94
+lw $fp, 4($fp)
95
+lw $ra, 64($fp)
96
+or $11, $0, $v1
97
+or $16, $0, $11
98
+li $12, 2
99
+or $5, $0, $12
100
+lw $gp, 0($16)
101
+or $k1, $0, $16
102
+jalr $gp
103
+lw $fp, 4($fp)
104
+lw $ra, 64($fp)
105
+lw $16, 8($fp)
106
+or $13, $0, $v1
107
+sw $16, 8($fp)
108
+sw $17, 12($fp)
109
+sw $18, 16($fp)
110
+sw $19, 20($fp)
111
+sw $20, 24($fp)
112
+sw $21, 28($fp)
113
+sw $22, 32($fp)
114
+sw $23, 36($fp)
115
+or $v1, $0, $13
116
+jr $31
117
+done:
118
+or $a0, $v1, $0
119
+ori $v0, $0, 1
120
+syscall
121
+ori $a0, $0, 0xA
122
+ori $v0, $0, 0xB
123
+syscall
124
+ori $v0, $0, 10
125
+syscall

+ 92 - 0
tac/tests/func_args.asm

@@ -0,0 +1,92 @@
1
+.globl __start
2
+__start:
3
+li $a0, 72
4
+li $v0, 9
5
+syscall
6
+or $fp, $0, $v0
7
+la $t0, main
8
+sw $t0, 0($fp)
9
+sw $0, 4($fp)
10
+jal main
11
+j done
12
+aplusb:
13
+li $a0, 72
14
+li $v0, 9
15
+syscall
16
+sw $fp, 4($v0)
17
+sw $16, 8($fp)
18
+sw $17, 12($fp)
19
+sw $18, 16($fp)
20
+sw $19, 20($fp)
21
+sw $20, 24($fp)
22
+sw $21, 28($fp)
23
+sw $22, 32($fp)
24
+sw $23, 36($fp)
25
+or $fp, $0, $v0
26
+la $t0, aplusb
27
+sw $t0, 0($fp)
28
+sw $ra, 64($fp)
29
+or $16, $0, $5
30
+or $17, $0, $6
31
+add $8, $16, $17
32
+sw $16, 8($fp)
33
+sw $17, 12($fp)
34
+sw $18, 16($fp)
35
+sw $19, 20($fp)
36
+sw $20, 24($fp)
37
+sw $21, 28($fp)
38
+sw $22, 32($fp)
39
+sw $23, 36($fp)
40
+or $v1, $0, $8
41
+jr $31
42
+main:
43
+li $a0, 72
44
+li $v0, 9
45
+syscall
46
+sw $fp, 4($v0)
47
+or $fp, $0, $v0
48
+la $t0, main
49
+sw $t0, 0($fp)
50
+sw $ra, 64($fp)
51
+li $9, 2
52
+or $5, $0, $9
53
+li $10, 3
54
+or $6, $0, $10
55
+jal aplusb
56
+lw $fp, 4($fp)
57
+lw $ra, 64($fp)
58
+or $11, $0, $v1
59
+li $12, 4
60
+or $5, $0, $12
61
+li $13, 5
62
+or $6, $0, $13
63
+jal aplusb
64
+lw $fp, 4($fp)
65
+lw $ra, 64($fp)
66
+or $14, $0, $v1
67
+or $5, $0, $11
68
+or $6, $0, $14
69
+jal aplusb
70
+lw $fp, 4($fp)
71
+lw $ra, 64($fp)
72
+or $15, $0, $v1
73
+or $16, $0, $15
74
+sw $16, 8($fp)
75
+sw $17, 12($fp)
76
+sw $18, 16($fp)
77
+sw $19, 20($fp)
78
+sw $20, 24($fp)
79
+sw $21, 28($fp)
80
+sw $22, 32($fp)
81
+sw $23, 36($fp)
82
+or $v1, $0, $16
83
+jr $31
84
+done:
85
+or $a0, $v1, $0
86
+ori $v0, $0, 1
87
+syscall
88
+ori $a0, $0, 0xA
89
+ori $v0, $0, 0xB
90
+syscall
91
+ori $v0, $0, 10
92
+syscall

+ 77 - 0
tac/tests/func_call.asm

@@ -0,0 +1,77 @@
1
+.globl __start
2
+__start:
3
+li $a0, 72
4
+li $v0, 9
5
+syscall
6
+or $fp, $0, $v0
7
+la $t0, main
8
+sw $t0, 0($fp)
9
+sw $0, 4($fp)
10
+jal main
11
+j done
12
+foo:
13
+li $a0, 72
14
+li $v0, 9
15
+syscall
16
+sw $fp, 4($v0)
17
+sw $16, 8($fp)
18
+sw $17, 12($fp)
19
+sw $18, 16($fp)
20
+sw $19, 20($fp)
21
+sw $20, 24($fp)
22
+sw $21, 28($fp)
23
+sw $22, 32($fp)
24
+sw $23, 36($fp)
25
+or $fp, $0, $v0
26
+la $t0, foo
27
+sw $t0, 0($fp)
28
+sw $ra, 64($fp)
29
+li $8, 5
30
+sw $16, 8($fp)
31
+sw $17, 12($fp)
32
+sw $18, 16($fp)
33
+sw $19, 20($fp)
34
+sw $20, 24($fp)
35
+sw $21, 28($fp)
36
+sw $22, 32($fp)
37
+sw $23, 36($fp)
38
+or $v1, $0, $8
39
+jr $31
40
+main:
41
+li $a0, 72
42
+li $v0, 9
43
+syscall
44
+sw $fp, 4($v0)
45
+or $fp, $0, $v0
46
+la $t0, main
47
+sw $t0, 0($fp)
48
+sw $ra, 64($fp)
49
+jal foo
50
+lw $fp, 4($fp)
51
+lw $ra, 64($fp)
52
+or $9, $0, $v1
53
+li $11, 3
54
+add $10, $9, $11
55
+or $16, $0, $10
56
+li $13, 17
57
+div $16, $13
58
+mfhi $12
59
+sw $16, 8($fp)
60
+sw $17, 12($fp)
61
+sw $18, 16($fp)
62
+sw $19, 20($fp)
63
+sw $20, 24($fp)
64
+sw $21, 28($fp)
65
+sw $22, 32($fp)
66
+sw $23, 36($fp)
67
+or $v1, $0, $12
68
+jr $31
69
+done:
70
+or $a0, $v1, $0
71
+ori $v0, $0, 1
72
+syscall
73
+ori $a0, $0, 0xA
74
+ori $v0, $0, 0xB
75
+syscall
76
+ori $v0, $0, 10
77
+syscall

+ 43 - 0
tac/tests/modulo.asm

@@ -0,0 +1,43 @@
1
+.globl __start
2
+__start:
3
+li $a0, 72
4
+li $v0, 9
5
+syscall
6
+or $fp, $0, $v0
7
+la $t0, main
8
+sw $t0, 0($fp)
9
+sw $0, 4($fp)
10
+jal main
11
+j done
12
+main:
13
+li $a0, 72
14
+li $v0, 9
15
+syscall
16
+sw $fp, 4($v0)
17
+or $fp, $0, $v0
18
+la $t0, main
19
+sw $t0, 0($fp)
20
+sw $ra, 64($fp)
21
+li $8, 5
22
+li $10, 2
23
+div $8, $10
24
+mfhi $9
25
+sw $16, 8($fp)
26
+sw $17, 12($fp)
27
+sw $18, 16($fp)
28
+sw $19, 20($fp)
29
+sw $20, 24($fp)
30
+sw $21, 28($fp)
31
+sw $22, 32($fp)
32
+sw $23, 36($fp)
33
+or $v1, $0, $9
34
+jr $31
35
+done:
36
+or $a0, $v1, $0
37
+ori $v0, $0, 1
38
+syscall
39
+ori $a0, $0, 0xA
40
+ori $v0, $0, 0xB
41
+syscall
42
+ori $v0, $0, 10
43
+syscall

+ 191 - 0
tac/tests/odd_recursion.asm

@@ -0,0 +1,191 @@
1
+.globl __start
2
+__start:
3
+li $a0, 72
4
+li $v0, 9
5
+syscall
6
+or $fp, $0, $v0
7
+la $t0, main
8
+sw $t0, 0($fp)
9
+sw $0, 4($fp)
10
+jal main
11
+j done
12
+biggerIsOdd:
13
+li $a0, 72
14
+li $v0, 9
15
+syscall
16
+sw $fp, 4($v0)
17
+sw $16, 8($fp)
18
+sw $17, 12($fp)
19
+sw $18, 16($fp)
20
+sw $19, 20($fp)
21
+sw $20, 24($fp)
22
+sw $21, 28($fp)
23
+sw $22, 32($fp)
24
+sw $23, 36($fp)
25
+or $fp, $0, $v0
26
+la $t0, biggerIsOdd
27
+sw $t0, 0($fp)
28
+sw $ra, 64($fp)
29
+or $16, $0, $5
30
+or $17, $0, $6
31
+ble $16, $17, L0
32
+or $5, $0, $16
33
+jal isOdd
34
+lw $fp, 4($fp)
35
+lw $ra, 64($fp)
36
+lw $16, 8($fp)
37
+lw $17, 12($fp)
38
+or $8, $0, $v1
39
+sw $16, 8($fp)
40
+sw $17, 12($fp)
41
+sw $18, 16($fp)
42
+sw $19, 20($fp)
43
+sw $20, 24($fp)
44
+sw $21, 28($fp)
45
+sw $22, 32($fp)
46
+sw $23, 36($fp)
47
+or $v1, $0, $8
48
+jr $31
49
+j L1
50
+L0:
51
+or $5, $0, $17
52
+jal isOdd
53
+lw $fp, 4($fp)
54
+lw $ra, 64($fp)
55
+lw $16, 8($fp)
56
+lw $17, 12($fp)
57
+or $9, $0, $v1
58
+sw $16, 8($fp)
59
+sw $17, 12($fp)
60
+sw $18, 16($fp)
61
+sw $19, 20($fp)
62
+sw $20, 24($fp)
63
+sw $21, 28($fp)
64
+sw $22, 32($fp)
65
+sw $23, 36($fp)
66
+or $v1, $0, $9
67
+jr $31
68
+L1:
69
+isOdd:
70
+li $a0, 72
71
+li $v0, 9
72
+syscall
73
+sw $fp, 4($v0)
74
+sw $16, 8($fp)
75
+sw $17, 12($fp)
76
+sw $18, 16($fp)
77
+sw $19, 20($fp)
78
+sw $20, 24($fp)
79
+sw $21, 28($fp)
80
+sw $22, 32($fp)
81
+sw $23, 36($fp)
82
+or $fp, $0, $v0
83
+la $t0, isOdd
84
+sw $t0, 0($fp)
85
+sw $ra, 64($fp)
86
+or $16, $0, $5
87
+li $10, 1
88
+bne $16, $10, L2
89
+li $11, 1
90
+sw $16, 8($fp)
91
+sw $17, 12($fp)
92
+sw $18, 16($fp)
93
+sw $19, 20($fp)
94
+sw $20, 24($fp)
95
+sw $21, 28($fp)
96
+sw $22, 32($fp)
97
+sw $23, 36($fp)
98
+or $v1, $0, $11
99
+jr $31
100
+j L3
101
+L2:
102
+li $13, 1
103
+sub $12, $16, $13
104
+or $5, $0, $12
105
+jal isOdd
106
+lw $fp, 4($fp)
107
+lw $ra, 64($fp)
108
+lw $16, 8($fp)
109
+or $14, $0, $v1
110
+li $15, 1
111
+bne $14, $15, L4
112
+sw $16, 8($fp)
113
+sw $17, 12($fp)
114
+sw $18, 16($fp)
115
+sw $19, 20($fp)
116
+sw $20, 24($fp)
117
+sw $21, 28($fp)
118
+sw $22, 32($fp)
119
+sw $23, 36($fp)
120
+or $v1, $0, $0
121
+jr $31
122
+j L5
123
+L4:
124
+li $24, 1
125
+sw $16, 8($fp)
126
+sw $17, 12($fp)
127
+sw $18, 16($fp)
128
+sw $19, 20($fp)
129
+sw $20, 24($fp)
130
+sw $21, 28($fp)
131
+sw $22, 32($fp)
132
+sw $23, 36($fp)
133
+or $v1, $0, $24
134
+jr $31
135
+L5:
136
+L3:
137
+main:
138
+li $a0, 72
139
+li $v0, 9
140
+syscall
141
+sw $fp, 4($v0)
142
+or $fp, $0, $v0
143
+la $t0, main
144
+sw $t0, 0($fp)
145
+sw $ra, 64($fp)
146
+li $25, 5
147
+or $16, $0, $25
148
+li $8, 7
149
+or $17, $0, $8
150
+or $5, $0, $16
151
+or $6, $0, $17
152
+jal biggerIsOdd
153
+lw $fp, 4($fp)
154
+lw $ra, 64($fp)
155
+lw $16, 8($fp)
156
+lw $17, 12($fp)
157
+or $9, $0, $v1
158
+li $10, 1
159
+bne $9, $10, L6
160
+li $11, 400
161
+sw $16, 8($fp)
162
+sw $17, 12($fp)
163
+sw $18, 16($fp)
164
+sw $19, 20($fp)
165
+sw $20, 24($fp)
166
+sw $21, 28($fp)
167
+sw $22, 32($fp)
168
+sw $23, 36($fp)
169
+or $v1, $0, $11
170
+jr $31
171
+L6:
172
+li $12, 66
173
+sw $16, 8($fp)
174
+sw $17, 12($fp)
175
+sw $18, 16($fp)
176
+sw $19, 20($fp)
177
+sw $20, 24($fp)
178
+sw $21, 28($fp)
179
+sw $22, 32($fp)
180
+sw $23, 36($fp)
181
+or $v1, $0, $12
182
+jr $31
183
+done:
184
+or $a0, $v1, $0
185
+ori $v0, $0, 1
186
+syscall
187
+ori $a0, $0, 0xA
188
+ori $v0, $0, 0xB
189
+syscall
190
+ori $v0, $0, 10
191
+syscall

+ 172 - 0
tac/tests/recursion.asm

@@ -0,0 +1,172 @@
1
+.globl __start
2
+__start:
3
+li $a0, 72
4
+li $v0, 9
5
+syscall
6
+or $fp, $0, $v0
7
+la $t0, main
8
+sw $t0, 0($fp)
9
+sw $0, 4($fp)
10
+jal main
11
+j done
12
+fact:
13
+li $a0, 72
14
+li $v0, 9
15
+syscall
16
+sw $fp, 4($v0)
17
+sw $16, 8($fp)
18
+sw $17, 12($fp)
19
+sw $18, 16($fp)
20
+sw $19, 20($fp)
21
+sw $20, 24($fp)
22
+sw $21, 28($fp)
23
+sw $22, 32($fp)
24
+sw $23, 36($fp)
25
+or $fp, $0, $v0
26
+la $t0, fact
27
+sw $t0, 0($fp)
28
+sw $ra, 64($fp)
29
+or $16, $0, $5
30
+li $a0, 72
31
+li $v0, 9
32
+syscall
33
+or $17, $v0, $0
34
+la $v0, inner_fact
35
+sw $v0, 0($17)
36
+sw $fp, 68($17)
37
+or $5, $0, $16
38
+li $8, 1
39
+or $6, $0, $8
40
+lw $gp, 0($17)
41
+or $k1, $0, $17
42
+jalr $gp
43
+lw $fp, 4($fp)
44
+lw $ra, 64($fp)
45
+lw $16, 8($fp)
46
+lw $17, 12($fp)
47
+or $9, $0, $v1
48
+sw $16, 8($fp)
49
+sw $17, 12($fp)
50
+sw $18, 16($fp)
51
+sw $19, 20($fp)
52
+sw $20, 24($fp)
53
+sw $21, 28($fp)
54
+sw $22, 32($fp)
55
+sw $23, 36($fp)
56
+or $v1, $0, $9
57
+jr $31
58
+inner_fact:
59
+li $a0, 72
60
+li $v0, 9
61
+syscall
62
+sw $k1, 68($v0)
63
+sw $fp, 4($v0)
64
+sw $16, 8($fp)
65
+sw $17, 12($fp)
66
+sw $18, 16($fp)
67
+sw $19, 20($fp)
68
+sw $20, 24($fp)
69
+sw $21, 28($fp)
70
+sw $22, 32($fp)
71
+sw $23, 36($fp)
72
+or $fp, $0, $v0
73
+la $t0, inner_fact
74
+sw $t0, 0($fp)
75
+sw $ra, 64($fp)
76
+or $16, $0, $5
77
+or $17, $0, $6
78
+bne $16, $0, L0
79
+sw $16, 8($fp)
80
+sw $17, 12($fp)
81
+sw $18, 16($fp)
82
+sw $19, 20($fp)
83
+sw $20, 24($fp)
84
+sw $21, 28($fp)
85
+sw $22, 32($fp)
86
+sw $23, 36($fp)
87
+or $v1, $0, $17
88
+jr $31
89
+L0:
90
+li $11, 1
91
+sub $10, $16, $11
92
+mult $17, $16
93
+mflo $12
94
+or $5, $0, $10
95
+or $6, $0, $12
96
+or $k0, $fp, $0
97
+lw $fp, 68($fp)
98
+lw $fp, 68($fp)
99
+lw $14, 12($fp)
100
+or $fp, $k0, $0
101
+lw $gp, 0($14)
102
+or $k1, $0, $14
103
+jalr $gp
104
+lw $fp, 4($fp)
105
+lw $ra, 64($fp)
106
+lw $16, 8($fp)
107
+lw $17, 12($fp)
108
+or $13, $0, $v1
109
+sw $16, 8($fp)
110
+sw $17, 12($fp)
111
+sw $18, 16($fp)
112
+sw $19, 20($fp)
113
+sw $20, 24($fp)
114
+sw $21, 28($fp)
115
+sw $22, 32($fp)
116
+sw $23, 36($fp)
117
+or $v1, $0, $13
118
+jr $31
119
+main:
120
+li $a0, 72
121
+li $v0, 9
122
+syscall
123
+sw $fp, 4($v0)
124
+or $fp, $0, $v0
125
+la $t0, main
126
+sw $t0, 0($fp)
127
+sw $ra, 64($fp)
128
+li $15, 3
129
+or $5, $0, $15
130
+jal fact
131
+lw $fp, 4($fp)
132
+lw $ra, 64($fp)
133
+or $24, $0, $v1
134
+or $16, $0, $24
135
+li $25, 5
136
+or $5, $0, $25
137
+jal fact
138
+lw $fp, 4($fp)
139
+lw $ra, 64($fp)
140
+lw $16, 8($fp)
141
+or $8, $0, $v1
142
+or $17, $0, $8
143
+li $9, 7
144
+or $5, $0, $9
145
+jal fact
146
+lw $fp, 4($fp)
147
+lw $ra, 64($fp)
148
+lw $16, 8($fp)
149
+lw $17, 12($fp)
150
+or $10, $0, $v1
151
+or $18, $0, $10
152
+add $11, $16, $17
153
+add $12, $11, $18
154
+sw $16, 8($fp)
155
+sw $17, 12($fp)
156
+sw $18, 16($fp)
157
+sw $19, 20($fp)
158
+sw $20, 24($fp)
159
+sw $21, 28($fp)
160
+sw $22, 32($fp)
161
+sw $23, 36($fp)
162
+or $v1, $0, $12
163
+jr $31
164
+done:
165
+or $a0, $v1, $0
166
+ori $v0, $0, 1
167
+syscall
168
+ori $a0, $0, 0xA
169
+ori $v0, $0, 0xB
170
+syscall
171
+ori $v0, $0, 10
172
+syscall

+ 42 - 0
tac/tests/return_only.asm

@@ -0,0 +1,42 @@
1
+.globl __start
2
+__start:
3
+li $a0, 72
4
+li $v0, 9
5
+syscall
6
+or $fp, $0, $v0
7
+la $t0, main
8
+sw $t0, 0($fp)
9
+sw $0, 4($fp)
10
+jal main
11
+j done
12
+main:
13
+li $a0, 72
14
+li $v0, 9
15
+syscall
16
+sw $fp, 4($v0)
17
+or $fp, $0, $v0
18
+la $t0, main
19
+sw $t0, 0($fp)
20
+sw $ra, 64($fp)
21
+li $8, 1
22
+li $10, 2
23
+add $9, $8, $10
24
+sw $16, 8($fp)
25
+sw $17, 12($fp)
26
+sw $18, 16($fp)
27
+sw $19, 20($fp)
28
+sw $20, 24($fp)
29
+sw $21, 28($fp)
30
+sw $22, 32($fp)
31
+sw $23, 36($fp)
32
+or $v1, $0, $9
33
+jr $31
34
+done:
35
+or $a0, $v1, $0
36
+ori $v0, $0, 1
37
+syscall
38
+ori $a0, $0, 0xA
39
+ori $v0, $0, 0xB
40
+syscall
41
+ori $v0, $0, 10
42
+syscall

+ 42 - 0
tac/tests/sub.asm

@@ -0,0 +1,42 @@
1
+.globl __start
2
+__start:
3
+li $a0, 72
4
+li $v0, 9
5
+syscall
6
+or $fp, $0, $v0
7
+la $t0, main
8
+sw $t0, 0($fp)
9
+sw $0, 4($fp)
10
+jal main
11
+j done
12
+main:
13
+li $a0, 72
14
+li $v0, 9
15
+syscall
16
+sw $fp, 4($v0)
17
+or $fp, $0, $v0
18
+la $t0, main
19
+sw $t0, 0($fp)
20
+sw $ra, 64($fp)
21
+li $8, 10
22
+li $10, 5
23
+sub $9, $8, $10
24
+sw $16, 8($fp)
25
+sw $17, 12($fp)
26
+sw $18, 16($fp)
27
+sw $19, 20($fp)
28
+sw $20, 24($fp)
29
+sw $21, 28($fp)
30
+sw $22, 32($fp)
31
+sw $23, 36($fp)
32
+or $v1, $0, $9
33
+jr $31
34
+done:
35
+or $a0, $v1, $0
36
+ori $v0, $0, 1
37
+syscall
38
+ori $a0, $0, 0xA
39
+ori $v0, $0, 0xB
40
+syscall
41
+ori $v0, $0, 10
42
+syscall

+ 1 - 1
tac/tests/test.sh

@@ -22,6 +22,7 @@ passes=0
22 22
 num=`find * -name '*.c' | $wc -L`
23 23
 num=$((num-2))
24 24
 fmt=`echo "%-$num""s"`
25
+make clean > /dev/null
25 26
 make > /dev/null
26 27
 for i in $(find * -name '*.c' | sort); do
27 28
   asm=${i/.c/.asm}
@@ -40,5 +41,4 @@ done
40 41
 end=$($date +%s.%N)    
41 42
 runtime=$(echo "$end $start" | $awk '{printf "%.2f", $1 - $2}')
42 43
 echo -e "\n$passes/$tests passed in $runtime""s"
43
-make clean > /dev/null
44 44
 exit $((tests-passes))

+ 184 - 0
tac/tests/twice.asm

@@ -0,0 +1,184 @@
1
+.globl __start
2
+__start:
3
+li $a0, 72
4
+li $v0, 9
5
+syscall
6
+or $fp, $0, $v0
7
+la $t0, main
8
+sw $t0, 0($fp)
9
+sw $0, 4($fp)
10
+jal main
11
+j done
12
+twice:
13
+li $a0, 72
14
+li $v0, 9
15
+syscall
16
+sw $fp, 4($v0)
17
+sw $16, 8($fp)
18
+sw $17, 12($fp)
19
+sw $18, 16($fp)
20
+sw $19, 20($fp)
21
+sw $20, 24($fp)
22
+sw $21, 28($fp)
23
+sw $22, 32($fp)
24
+sw $23, 36($fp)
25
+or $fp, $0, $v0
26
+la $t0, twice
27
+sw $t0, 0($fp)
28
+sw $ra, 64($fp)
29
+or $16, $0, $5
30
+li $a0, 72
31
+li $v0, 9
32
+syscall
33
+or $17, $v0, $0
34
+la $v0, g
35
+sw $v0, 0($17)
36
+sw $fp, 68($17)
37
+sw $16, 8($fp)
38
+sw $17, 12($fp)
39
+sw $18, 16($fp)
40
+sw $19, 20($fp)
41
+sw $20, 24($fp)
42
+sw $21, 28($fp)
43
+sw $22, 32($fp)
44
+sw $23, 36($fp)
45
+or $v1, $0, $17
46
+jr $31
47
+g:
48
+li $a0, 72
49
+li $v0, 9
50
+syscall
51
+sw $k1, 68($v0)
52
+sw $fp, 4($v0)
53
+sw $16, 8($fp)
54
+sw $17, 12($fp)
55
+sw $18, 16($fp)
56
+sw $19, 20($fp)
57
+sw $20, 24($fp)
58
+sw $21, 28($fp)
59
+sw $22, 32($fp)
60
+sw $23, 36($fp)
61
+or $fp, $0, $v0
62
+la $t0, g
63
+sw $t0, 0($fp)
64
+sw $ra, 64($fp)
65
+or $16, $0, $5
66
+or $5, $0, $16
67
+or $k0, $fp, $0
68
+lw $fp, 68($fp)
69
+lw $fp, 68($fp)
70
+lw $9, 8($fp)
71
+or $fp, $k0, $0
72
+lw $gp, 0($9)
73
+or $k1, $0, $9
74
+jalr $gp
75
+lw $fp, 4($fp)
76
+lw $ra, 64($fp)
77
+lw $16, 8($fp)
78
+or $8, $0, $v1
79
+or $5, $0, $8
80
+or $k0, $fp, $0
81
+lw $fp, 68($fp)
82
+lw $fp, 68($fp)
83
+lw $11, 8($fp)
84
+or $fp, $k0, $0
85
+lw $gp, 0($11)
86
+or $k1, $0, $11
87
+jalr $gp
88
+lw $fp, 4($fp)
89
+lw $ra, 64($fp)
90
+lw $16, 8($fp)
91
+or $10, $0, $v1
92
+sw $16, 8($fp)
93
+sw $17, 12($fp)
94
+sw $18, 16($fp)
95
+sw $19, 20($fp)
96
+sw $20, 24($fp)
97
+sw $21, 28($fp)
98
+sw $22, 32($fp)
99
+sw $23, 36($fp)
100
+or $v1, $0, $10
101
+jr $31
102
+main:
103
+li $a0, 72
104
+li $v0, 9
105
+syscall
106
+sw $fp, 4($v0)
107
+or $fp, $0, $v0
108
+la $t0, main
109
+sw $t0, 0($fp)
110
+sw $ra, 64($fp)
111
+li $a0, 72
112
+li $v0, 9
113
+syscall
114
+or $16, $v0, $0
115
+la $v0, whammy
116
+sw $v0, 0($16)
117
+sw $fp, 68($16)
118
+or $5, $0, $16
119
+jal twice
120
+lw $fp, 4($fp)
121
+lw $ra, 64($fp)
122
+lw $16, 8($fp)
123
+or $12, $0, $v1
124
+or $17, $0, $12
125
+li $13, 2
126
+or $5, $0, $13
127
+lw $gp, 0($17)
128
+or $k1, $0, $17
129
+jalr $gp
130
+lw $fp, 4($fp)
131
+lw $ra, 64($fp)
132
+lw $16, 8($fp)
133
+lw $17, 12($fp)
134
+or $14, $0, $v1
135
+sw $16, 8($fp)
136
+sw $17, 12($fp)
137
+sw $18, 16($fp)
138
+sw $19, 20($fp)
139
+sw $20, 24($fp)
140
+sw $21, 28($fp)
141
+sw $22, 32($fp)
142
+sw $23, 36($fp)
143
+or $v1, $0, $14
144
+jr $31
145
+whammy:
146
+li $a0, 72
147
+li $v0, 9
148
+syscall
149
+sw $k1, 68($v0)
150
+sw $fp, 4($v0)
151
+sw $16, 8($fp)
152
+sw $17, 12($fp)
153
+sw $18, 16($fp)
154
+sw $19, 20($fp)
155
+sw $20, 24($fp)
156
+sw $21, 28($fp)
157
+sw $22, 32($fp)
158
+sw $23, 36($fp)
159
+or $fp, $0, $v0
160
+la $t0, whammy
161
+sw $t0, 0($fp)
162
+sw $ra, 64($fp)
163
+or $16, $0, $5
164
+li $24, 5
165
+add $15, $16, $24
166
+sw $16, 8($fp)
167
+sw $17, 12($fp)
168
+sw $18, 16($fp)
169
+sw $19, 20($fp)
170
+sw $20, 24($fp)
171
+sw $21, 28($fp)
172
+sw $22, 32($fp)
173
+sw $23, 36($fp)
174
+or $v1, $0, $15
175
+jr $31
176
+done:
177
+or $a0, $v1, $0
178
+ori $v0, $0, 1
179
+syscall
180
+ori $a0, $0, 0xA
181
+ori $v0, $0, 0xB
182
+syscall
183
+ori $v0, $0, 10
184
+syscall

+ 56 - 0
tac/tests/var_maths.asm

@@ -0,0 +1,56 @@
1
+.globl __start
2
+__start:
3
+li $a0, 72
4
+li $v0, 9
5
+syscall
6
+or $fp, $0, $v0
7
+la $t0, main
8
+sw $t0, 0($fp)
9
+sw $0, 4($fp)
10
+jal main
11
+j done
12
+main:
13
+li $a0, 72
14
+li $v0, 9
15
+syscall
16
+sw $fp, 4($v0)
17
+or $fp, $0, $v0
18
+la $t0, main
19
+sw $t0, 0($fp)
20
+sw $ra, 64($fp)
21
+li $8, 5
22
+or $16, $0, $8
23
+li $10, 4
24
+sub $9, $16, $10
25
+or $17, $0, $9
26
+li $11, 10
27
+sub $12, $11, $16
28
+or $18, $0, $12
29
+div $16, $18
30
+mfhi $13
31
+or $19, $0, $13
32
+mult $16, $16
33
+mflo $14
34
+add $15, $19, $17
35
+div $18, $15
36
+mflo $24
37
+add $25, $14, $24
38
+sw $16, 8($fp)
39
+sw $17, 12($fp)
40
+sw $18, 16($fp)
41
+sw $19, 20($fp)
42
+sw $20, 24($fp)
43
+sw $21, 28($fp)
44
+sw $22, 32($fp)
45
+sw $23, 36($fp)
46
+or $v1, $0, $25
47
+jr $31
48
+done:
49
+or $a0, $v1, $0
50
+ori $v0, $0, 1
51
+syscall
52
+ori $a0, $0, 0xA
53
+ori $v0, $0, 0xB
54
+syscall
55
+ori $v0, $0, 10
56
+syscall