2 Commitit 87f65c41c6 ... 9285348596

Tekijä SHA1 Viesti Päivämäärä
  Matt Coles 9285348596 merge 8 vuotta sitten
  Matt Coles 54b00a83f5 update 8 vuotta sitten

+ 13 - 0
cw/tests/all_scopes.c

@@ -0,0 +1,13 @@
1
+/* ##answer: 220 */
2
+int y = 5;
3
+
4
+int fun1(){
5
+	int x = 11;
6
+	return x;
7
+}
8
+
9
+
10
+int main() { 
11
+	int x = 4;
12
+	return y * x * fun1();
13
+}

+ 14 - 0
cw/tests/deep_closure.c

@@ -0,0 +1,14 @@
1
+/* ##answer: 18 */
2
+function cplus(int a) {
3
+  int cplusa(int b) {
4
+    int cplusab(int c) {
5
+      return a + b + c;
6
+    }
7
+    return cplusab;
8
+  }
9
+  return cplusa;
10
+}
11
+
12
+int main() {
13
+  return cplus(5)(6)(7);
14
+}

+ 0 - 37
cw/tests/new_test.sh

@@ -1,37 +0,0 @@
1
-#!/bin/bash
2
-uname=`uname`
3
-if [ "$uname" = "Darwin" ]; then
4
-  date="gdate"
5
-  readlink="greadlink"
6
-else
7
-  date="date"
8
-  readlink="readlink"
9
-fi
10
-start=$($date +%s.%N)
11
-absdir=$($readlink -f $(dirname $0))
12
-
13
-pass="\033[32mPASSED\033[0m"
14
-fail="\033[31mFAILED\033[0m"
15
-
16
-tests=0
17
-passes=0
18
-
19
-for i in $(ls $absdir | grep .\*.c | sort); do
20
-  answer=`$absdir/../mycc < $absdir/$i | tail -n 1`
21
-  exp_ans=`grep --color=none "##answer" $absdir/$i | sed 's/[^0-9]\+\([0-9]\+\).\+/\1/g'`
22
-  echo -n "${i%.*} ... "
23
-  if [ "$answer" -eq "$exp_ans" ]; then
24
-    echo -e "$pass"
25
-    passes=$((passes+1))
26
-  else
27
-    echo -e "$fail expected $exp_ans got $answer"
28
-  fi
29
-  tests=$((tests+1))
30
-done
31
-
32
-end=$($date +%s.%N)    
33
-runtime=$(python -c "print(${end} - ${start})")
34
-
35
-echo -e "\n$passes/$tests passed in $runtime""s"
36
-
37
-exit $((tests-passes))

+ 31 - 0
cw/tests/odd_recursion.c

@@ -0,0 +1,31 @@
1
+/* ##answer: 400 */
2
+int biggerIsOdd(int x, int y){
3
+  if(x>y){
4
+    return isOdd(x);
5
+  } else {
6
+    return isOdd(y);
7
+  }
8
+}
9
+
10
+int isOdd(int x){
11
+  if(x == 1){
12
+    return 1;
13
+  } else {
14
+    if(isOdd(x-1) == 1){
15
+      return 0;
16
+    } else {
17
+      return 1;
18
+    }
19
+  }
20
+}
21
+
22
+
23
+int main() { 
24
+  int x = 5;
25
+  int y = 7;
26
+
27
+  if(biggerIsOdd(x,y) == 1){
28
+    return 400;
29
+  }
30
+  return 66;
31
+}

+ 20 - 0
cw/tests/really_deep_closure.c

@@ -0,0 +1,20 @@
1
+/* ##answer: 15 */
2
+function cplus(int a) {
3
+  int cplusa(int b) {
4
+    int cplusab(int c) {
5
+      int cplusabc(int d) {
6
+        int cplusabcd(int e) {
7
+          return a+b+c+d+e;
8
+        }
9
+        return cplusabcd;
10
+      }
11
+      return cplusabc;
12
+    }
13
+    return cplusab;
14
+  }
15
+  return cplusa;
16
+}
17
+
18
+int main() {
19
+  return cplus(1)(2)(3)(4)(5);
20
+}

+ 4 - 9
cw/tests/test.sh

@@ -5,28 +5,26 @@ if [ "$uname" = "Darwin" ]; then
5 5
   readlink="greadlink"
6 6
   wc="gwc"
7 7
   sed="gsed"
8
+  awk="gawk"
8 9
 else
9 10
   date="date"
10 11
   readlink="readlink"
11 12
   wc="wc"
12 13
   sed="sed"
14
+  awk="awk"
13 15
 fi
14 16
 start=$($date +%s.%N)
15 17
 absdir=$($readlink -f $(dirname $0))
16
-
17 18
 pass="\033[32mPASSED\033[0m"
18 19
 fail="\033[31mFAILED\033[0m"
19
-
20 20
 tests=0
21 21
 passes=0
22
-
23 22
 num=`ls $absdir | grep .\*.c | $wc -L`
24 23
 num=$((num-2))
25 24
 fmt=`echo "%-$num""s"`
26 25
 for i in $(ls $absdir | grep .\*.c | sort); do
27 26
   answer=`$absdir/../mycc < $absdir/$i | tail -n 1`
28
-  # exp_ans=`grep --color=none "##answer" $absdir/$i | $sed 's/[^0-9]\+\([0-9]\+\).\+/\1/g'`
29
-  exp_ans=`grep --color=none "##answer" $absdir/$i | $sed 's/\/\* ##answer:\s\+\([^\*]\+\)\b\s*\*\//\1/g'`
27
+  exp_ans=`grep "##answer" $absdir/$i | $sed 's/\/\* ##answer:\s\+\([^\*]\+\)\b\s*\*\//\1/g'`
30 28
   printf $fmt "${i%.*}"
31 29
   echo -n " ... "
32 30
   if [ "$answer" == "$exp_ans" ]; then
@@ -37,10 +35,7 @@ for i in $(ls $absdir | grep .\*.c | sort); do
37 35
   fi
38 36
   tests=$((tests+1))
39 37
 done
40
-
41 38
 end=$($date +%s.%N)    
42
-runtime=$(python -c "print(${end} - ${start})")
43
-
39
+runtime=$(echo "$end $start" | $awk '{printf "%.2f", $1 - $2}')
44 40
 echo -e "\n$passes/$tests passed in $runtime""s"
45
-
46 41
 exit $((tests-passes))

+ 205 - 0
tac/finaltest1.tac

@@ -0,0 +1,205 @@
1
+--C COMPILER
2
+int inner_fact(int n, int a) {
3
+  if (n==0) {
4
+    return a;
5
+  }
6
+  return inner_fact(n-1,a*n);
7
+}
8
+
9
+int fact(int n) {
10
+	return inner_fact(n,1);
11
+}
12
+
13
+int main(){
14
+	return fact(6);
15
+}
16
+parse finished
17
+~
18
+  ~
19
+    D
20
+      d
21
+        int
22
+        F
23
+          inner_fact
24
+          ,
25
+            ~
26
+              int
27
+              n
28
+            ~
29
+              int
30
+              a
31
+      ;
32
+        if
33
+          ==
34
+            n
35
+            0
36
+          return
37
+            a
38
+        return
39
+          apply
40
+            inner_fact
41
+            ,
42
+              -
43
+                n
44
+                1
45
+              *
46
+                a
47
+                n
48
+    D
49
+      d
50
+        int
51
+        F
52
+          fact
53
+          ~
54
+            int
55
+            n
56
+      return
57
+        apply
58
+          inner_fact
59
+          ,
60
+            n
61
+            1
62
+  D
63
+    d
64
+      int
65
+      F
66
+        main
67
+    return
68
+      apply
69
+        fact
70
+        6
71
+func inner_fact
72
+param n
73
+param a
74
+if n != 0 then L0
75
+ret a
76
+L0
77
+$t1 := n - 1
78
+$t2 := a * n
79
+arg $t1
80
+arg $t2
81
+call inner_fact, $t0
82
+ret $t0
83
+end inner_fact
84
+
85
+func fact
86
+param n
87
+arg n
88
+arg 1
89
+call inner_fact, $t3
90
+ret $t3
91
+end fact
92
+
93
+func main
94
+arg 6
95
+call fact, $t4
96
+ret $t4
97
+end main
98
+
99
+=====
100
+li $a0, 68
101
+li $v0, 9
102
+syscall
103
+or $fp, $0, $v0
104
+la $t0, main
105
+sw $t0, 0($fp)
106
+sw $0, 4($fp)
107
+jal main
108
+j done
109
+#func inner_fact
110
+inner_fact:
111
+li $a0, 68
112
+li $v0, 9
113
+syscall
114
+sw $fp, 4($v0)
115
+or $fp, $0, $v0
116
+la $t0, inner_fact
117
+sw $t0, 0($fp)
118
+sw $ra, 64($fp)
119
+#param n
120
+or $16, $0, $5
121
+#param a
122
+or $17, $0, $6
123
+#if n != 0 then L0
124
+bne $16, $0, L0
125
+#ret a
126
+or $v1, $0, $17
127
+jr $31
128
+#L0
129
+L0:
130
+#$t1 := n - 1
131
+li $9, 1
132
+sub $8, $16, $9
133
+#$t2 := a * n
134
+mult $17, $16
135
+mflo $10
136
+#arg $t1
137
+or $5, $0, $8
138
+#arg $t2
139
+or $6, $0, $10
140
+#call inner_fact, $t0
141
+jal inner_fact
142
+lw $fp, 4($fp)
143
+lw $ra, 64($fp)
144
+lw $16, 8($fp)
145
+lw $17, 12($fp)
146
+or $11, $0, $v1
147
+#ret $t0
148
+or $v1, $0, $11
149
+jr $31
150
+#end inner_fact
151
+
152
+#func fact
153
+fact:
154
+li $a0, 68
155
+li $v0, 9
156
+syscall
157
+sw $fp, 4($v0)
158
+or $fp, $0, $v0
159
+la $t0, fact
160
+sw $t0, 0($fp)
161
+sw $ra, 64($fp)
162
+#param n
163
+or $16, $0, $5
164
+#arg n
165
+or $5, $0, $16
166
+#arg 1
167
+li $12, 1
168
+or $6, $0, $12
169
+#call inner_fact, $t3
170
+jal inner_fact
171
+lw $fp, 4($fp)
172
+lw $ra, 64($fp)
173
+lw $16, 8($fp)
174
+or $13, $0, $v1
175
+#ret $t3
176
+or $v1, $0, $13
177
+jr $31
178
+#end fact
179
+
180
+#func main
181
+main:
182
+li $a0, 68
183
+li $v0, 9
184
+syscall
185
+sw $fp, 4($v0)
186
+or $fp, $0, $v0
187
+la $t0, main
188
+sw $t0, 0($fp)
189
+sw $ra, 64($fp)
190
+#arg 6
191
+li $14, 6
192
+or $5, $0, $14
193
+#call fact, $t4
194
+jal fact
195
+lw $fp, 4($fp)
196
+lw $ra, 64($fp)
197
+or $15, $0, $v1
198
+#ret $t4
199
+or $v1, $0, $15
200
+jr $31
201
+#end main
202
+
203
+done:
204
+ori $v0, $0, 10
205
+syscall

+ 14 - 0
tac/simple.c.orig

@@ -0,0 +1,14 @@
1
+int blah() {
2
+  int blah2() {
3
+    return 2;
4
+  }
5
+  return blah2();
6
+}
7
+
8
+int main() {
9
+<<<<<<< HEAD
10
+  return times(4+5);
11
+=======
12
+  return blah();
13
+>>>>>>> 87f65c41c69413a8cc3fe3da8b302ddb20630544
14
+}

+ 14 - 0
tac/simple_BACKUP_41992.c

@@ -0,0 +1,14 @@
1
+int blah() {
2
+  int blah2() {
3
+    return 2;
4
+  }
5
+  return blah2();
6
+}
7
+
8
+int main() {
9
+<<<<<<< HEAD
10
+  return times(4+5);
11
+=======
12
+  return blah();
13
+>>>>>>> 87f65c41c69413a8cc3fe3da8b302ddb20630544
14
+}

+ 6 - 0
tac/simple_BASE_41992.c

@@ -0,0 +1,6 @@
1
+int times(int x, int y) {
2
+  return x * y;
3
+}
4
+int main() {
5
+  return times(4+5, times(2, 4));
6
+}

+ 6 - 0
tac/simple_LOCAL_41992.c

@@ -0,0 +1,6 @@
1
+int times(int x, int y) {
2
+  return x * y;
3
+}
4
+int main() {
5
+  return times(4+5);
6
+}

+ 10 - 0
tac/simple_REMOTE_41992.c

@@ -0,0 +1,10 @@
1
+int blah() {
2
+  int blah2() {
3
+    return 2;
4
+  }
5
+  return blah2();
6
+}
7
+
8
+int main() {
9
+  return blah();
10
+}

+ 156 - 0
tac/test10.tac

@@ -0,0 +1,156 @@
1
+--C COMPILER
2
+int main() { 
3
+int x = 4;
4
+int y = 5;
5
+int z = 6;
6
+int a = x + y;
7
+int b = y + z;
8
+int c = z * a;
9
+int d = b * c;
10
+int e = x;
11
+
12
+return e * d;
13
+}
14
+parse finished
15
+D
16
+  d
17
+    int
18
+    F
19
+      main
20
+  ;
21
+    ;
22
+      ;
23
+        ;
24
+          ;
25
+            ;
26
+              ;
27
+                ;
28
+                  ~
29
+                    int
30
+                    =
31
+                      x
32
+                      4
33
+                  ~
34
+                    int
35
+                    =
36
+                      y
37
+                      5
38
+                ~
39
+                  int
40
+                  =
41
+                    z
42
+                    6
43
+              ~
44
+                int
45
+                =
46
+                  a
47
+                  +
48
+                    x
49
+                    y
50
+            ~
51
+              int
52
+              =
53
+                b
54
+                +
55
+                  y
56
+                  z
57
+          ~
58
+            int
59
+            =
60
+              c
61
+              *
62
+                z
63
+                a
64
+        ~
65
+          int
66
+          =
67
+            d
68
+            *
69
+              b
70
+              c
71
+      ~
72
+        int
73
+        =
74
+          e
75
+          x
76
+    return
77
+      *
78
+        e
79
+        d
80
+func main
81
+x := 4
82
+y := 5
83
+z := 6
84
+$t0 := x + y
85
+a := $t0
86
+$t1 := y + z
87
+b := $t1
88
+$t2 := z * a
89
+c := $t2
90
+$t3 := b * c
91
+d := $t3
92
+e := x
93
+$t4 := e * d
94
+ret $t4
95
+end main
96
+
97
+=====
98
+li $a0, 68
99
+li $v0, 9
100
+syscall
101
+or $fp, $0, $v0
102
+la $t0, main
103
+sw $t0, 0($fp)
104
+sw $0, 4($fp)
105
+jal main
106
+j done
107
+#func main
108
+main:
109
+li $a0, 68
110
+li $v0, 9
111
+syscall
112
+sw $fp, 4($v0)
113
+or $fp, $0, $v0
114
+la $t0, main
115
+sw $t0, 0($fp)
116
+sw $ra, 64($fp)
117
+#x := 4
118
+li $8, 4
119
+or $16, $0, $8
120
+#y := 5
121
+li $9, 5
122
+or $17, $0, $9
123
+#z := 6
124
+li $10, 6
125
+or $18, $0, $10
126
+#$t0 := x + y
127
+add $11, $16, $17
128
+#a := $t0
129
+or $19, $0, $11
130
+#$t1 := y + z
131
+add $12, $17, $18
132
+#b := $t1
133
+or $20, $0, $12
134
+#$t2 := z * a
135
+mult $18, $19
136
+mflo $13
137
+#c := $t2
138
+or $21, $0, $13
139
+#$t3 := b * c
140
+mult $20, $21
141
+mflo $14
142
+#d := $t3
143
+or $22, $0, $14
144
+#e := x
145
+or $23, $0, $16
146
+#$t4 := e * d
147
+mult $23, $22
148
+mflo $15
149
+#ret $t4
150
+or $v1, $0, $15
151
+jr $31
152
+#end main
153
+
154
+done:
155
+ori $v0, $0, 10
156
+syscall

+ 133 - 0
tac/test15.tac

@@ -0,0 +1,133 @@
1
+--C COMPILER
2
+int y = 5;
3
+
4
+int fun1(){
5
+	int x = 11;
6
+	return x;
7
+}
8
+
9
+
10
+int main() { 
11
+	int x = 4;
12
+	return y * x * fun1();
13
+}
14
+parse finished
15
+~
16
+  ~
17
+    ~
18
+      int
19
+      =
20
+        y
21
+        5
22
+    D
23
+      d
24
+        int
25
+        F
26
+          fun1
27
+      ;
28
+        ~
29
+          int
30
+          =
31
+            x
32
+            11
33
+        return
34
+          x
35
+  D
36
+    d
37
+      int
38
+      F
39
+        main
40
+    ;
41
+      ~
42
+        int
43
+        =
44
+          x
45
+          4
46
+      return
47
+        *
48
+          *
49
+            y
50
+            x
51
+          apply
52
+            fun1
53
+y := 5
54
+func fun1
55
+x := 11
56
+ret x
57
+end fun1
58
+
59
+func main
60
+x := 4
61
+$t1 := y * x
62
+call fun1, $t2
63
+$t0 := $t1 * $t2
64
+ret $t0
65
+end main
66
+
67
+=====
68
+li $a0, 68
69
+li $v0, 9
70
+syscall
71
+or $fp, $0, $v0
72
+la $t0, main
73
+sw $t0, 0($fp)
74
+sw $0, 4($fp)
75
+jal main
76
+j done
77
+#y := 5
78
+li $8, 5
79
+or $16, $0, $8
80
+#func fun1
81
+fun1:
82
+li $a0, 68
83
+li $v0, 9
84
+syscall
85
+sw $fp, 4($v0)
86
+sw $16, 8($fp)
87
+or $fp, $0, $v0
88
+la $t0, fun1
89
+sw $t0, 0($fp)
90
+sw $ra, 64($fp)
91
+#x := 11
92
+li $9, 11
93
+or $16, $0, $9
94
+#ret x
95
+or $v1, $0, $16
96
+jr $31
97
+#end fun1
98
+
99
+#func main
100
+main:
101
+li $a0, 68
102
+li $v0, 9
103
+syscall
104
+sw $fp, 4($v0)
105
+sw $16, 8($fp)
106
+or $fp, $0, $v0
107
+la $t0, main
108
+sw $t0, 0($fp)
109
+sw $ra, 64($fp)
110
+#x := 4
111
+li $10, 4
112
+or $16, $0, $10
113
+#$t1 := y * x
114
+mult $17, $16
115
+mflo $11
116
+#call fun1, $t2
117
+jal fun1
118
+lw $fp, 4($fp)
119
+lw $ra, 64($fp)
120
+lw $16, 8($fp)
121
+lw $17, 12($fp)
122
+or $12, $0, $v1
123
+#$t0 := $t1 * $t2
124
+mult $11, $12
125
+mflo $13
126
+#ret $t0
127
+or $v1, $0, $13
128
+jr $31
129
+#end main
130
+
131
+done:
132
+ori $v0, $0, 10
133
+syscall

+ 321 - 0
tac/test26.tac

@@ -0,0 +1,321 @@
1
+--C COMPILER
2
+int biggerIsOdd(int x, int y){
3
+	if(x>y){
4
+		return isOdd(x);
5
+	} else {
6
+		return isOdd(y);
7
+	}
8
+}
9
+
10
+int isOdd(int x){
11
+	if(x == 1){
12
+		return 1;
13
+	} else {
14
+		if(isOdd(x-1) == 1){
15
+			return 0;
16
+		} else {
17
+			return 1;
18
+		}
19
+	}
20
+}
21
+
22
+
23
+int main() { 
24
+	int x = 5;
25
+	int y = 7;
26
+
27
+	if(biggerIsOdd(x,y) == 1){
28
+		return 400;
29
+	}
30
+
31
+		return 66;
32
+	
33
+}
34
+parse finished
35
+~
36
+  ~
37
+    D
38
+      d
39
+        int
40
+        F
41
+          biggerIsOdd
42
+          ,
43
+            ~
44
+              int
45
+              x
46
+            ~
47
+              int
48
+              y
49
+      if
50
+        >
51
+          x
52
+          y
53
+        else
54
+          return
55
+            apply
56
+              isOdd
57
+              x
58
+          return
59
+            apply
60
+              isOdd
61
+              y
62
+    D
63
+      d
64
+        int
65
+        F
66
+          isOdd
67
+          ~
68
+            int
69
+            x
70
+      if
71
+        ==
72
+          x
73
+          1
74
+        else
75
+          return
76
+            1
77
+          if
78
+            ==
79
+              apply
80
+                isOdd
81
+                -
82
+                  x
83
+                  1
84
+              1
85
+            else
86
+              return
87
+                0
88
+              return
89
+                1
90
+  D
91
+    d
92
+      int
93
+      F
94
+        main
95
+    ;
96
+      ;
97
+        ~
98
+          int
99
+          =
100
+            x
101
+            5
102
+        ~
103
+          int
104
+          =
105
+            y
106
+            7
107
+      ;
108
+        if
109
+          ==
110
+            apply
111
+              biggerIsOdd
112
+              ,
113
+                x
114
+                y
115
+            1
116
+          return
117
+            400
118
+        return
119
+          66
120
+func biggerIsOdd
121
+param x
122
+param y
123
+if x <= y then L0
124
+arg x
125
+call isOdd, $t0
126
+ret $t0
127
+goto L1
128
+L0
129
+arg y
130
+call isOdd, $t1
131
+ret $t1
132
+L1
133
+end biggerIsOdd
134
+
135
+func isOdd
136
+param x
137
+if x != 1 then L2
138
+ret 1
139
+goto L3
140
+L2
141
+$t3 := x - 1
142
+arg $t3
143
+call isOdd, $t2
144
+if $t2 != 1 then L4
145
+ret 0
146
+goto L5
147
+L4
148
+ret 1
149
+L5
150
+L3
151
+end isOdd
152
+
153
+func main
154
+x := 5
155
+y := 7
156
+arg x
157
+arg y
158
+call biggerIsOdd, $t4
159
+if $t4 != 1 then L6
160
+ret 400
161
+L6
162
+ret 66
163
+end main
164
+
165
+=====
166
+li $a0, 68
167
+li $v0, 9
168
+syscall
169
+or $fp, $0, $v0
170
+la $t0, main
171
+sw $t0, 0($fp)
172
+sw $0, 4($fp)
173
+jal main
174
+j done
175
+#func biggerIsOdd
176
+biggerIsOdd:
177
+li $a0, 68
178
+li $v0, 9
179
+syscall
180
+sw $fp, 4($v0)
181
+or $fp, $0, $v0
182
+la $t0, biggerIsOdd
183
+sw $t0, 0($fp)
184
+sw $ra, 64($fp)
185
+#param x
186
+or $16, $0, $5
187
+#param y
188
+or $17, $0, $6
189
+#if x <= y then L0
190
+ble $16, $17, L0
191
+#arg x
192
+or $5, $0, $16
193
+#call isOdd, $t0
194
+jal isOdd
195
+lw $fp, 4($fp)
196
+lw $ra, 64($fp)
197
+lw $16, 8($fp)
198
+lw $17, 12($fp)
199
+or $8, $0, $v1
200
+#ret $t0
201
+or $v1, $0, $8
202
+jr $31
203
+#goto L1
204
+j L1
205
+#L0
206
+L0:
207
+#arg y
208
+or $5, $0, $17
209
+#call isOdd, $t1
210
+jal isOdd
211
+lw $fp, 4($fp)
212
+lw $ra, 64($fp)
213
+lw $16, 8($fp)
214
+lw $17, 12($fp)
215
+or $9, $0, $v1
216
+#ret $t1
217
+or $v1, $0, $9
218
+jr $31
219
+#L1
220
+L1:
221
+#end biggerIsOdd
222
+
223
+#func isOdd
224
+isOdd:
225
+li $a0, 68
226
+li $v0, 9
227
+syscall
228
+sw $fp, 4($v0)
229
+or $fp, $0, $v0
230
+la $t0, isOdd
231
+sw $t0, 0($fp)
232
+sw $ra, 64($fp)
233
+#param x
234
+or $16, $0, $5
235
+#if x != 1 then L2
236
+li $10, 1
237
+bne $16, $10, L2
238
+#ret 1
239
+li $11, 1
240
+or $v1, $0, $11
241
+jr $31
242
+#goto L3
243
+j L3
244
+#L2
245
+L2:
246
+#$t3 := x - 1
247
+li $13, 1
248
+sub $12, $16, $13
249
+#arg $t3
250
+or $5, $0, $12
251
+#call isOdd, $t2
252
+jal isOdd
253
+lw $fp, 4($fp)
254
+lw $ra, 64($fp)
255
+lw $16, 8($fp)
256
+or $14, $0, $v1
257
+#if $t2 != 1 then L4
258
+li $15, 1
259
+bne $14, $15, L4
260
+#ret 0
261
+or $v1, $0, $0
262
+jr $31
263
+#goto L5
264
+j L5
265
+#L4
266
+L4:
267
+#ret 1
268
+li $24, 1
269
+or $v1, $0, $24
270
+jr $31
271
+#L5
272
+L5:
273
+#L3
274
+L3:
275
+#end isOdd
276
+
277
+#func main
278
+main:
279
+li $a0, 68
280
+li $v0, 9
281
+syscall
282
+sw $fp, 4($v0)
283
+or $fp, $0, $v0
284
+la $t0, main
285
+sw $t0, 0($fp)
286
+sw $ra, 64($fp)
287
+#x := 5
288
+li $25, 5
289
+or $16, $0, $25
290
+#y := 7
291
+li $8, 7
292
+or $17, $0, $8
293
+#arg x
294
+or $5, $0, $16
295
+#arg y
296
+or $6, $0, $17
297
+#call biggerIsOdd, $t4
298
+jal biggerIsOdd
299
+lw $fp, 4($fp)
300
+lw $ra, 64($fp)
301
+lw $16, 8($fp)
302
+lw $17, 12($fp)
303
+or $9, $0, $v1
304
+#if $t4 != 1 then L6
305
+li $10, 1
306
+bne $9, $10, L6
307
+#ret 400
308
+li $11, 400
309
+or $v1, $0, $11
310
+jr $31
311
+#L6
312
+L6:
313
+#ret 66
314
+li $12, 66
315
+or $v1, $0, $12
316
+jr $31
317
+#end main
318
+
319
+done:
320
+ori $v0, $0, 10
321
+syscall