--C COMPILER int biggerIsOdd(int x, int y){ if(x>y){ return isOdd(x); } else { return isOdd(y); } } int isOdd(int x){ if(x == 1){ return 1; } else { if(isOdd(x-1) == 1){ return 0; } else { return 1; } } } int main() { int x = 5; int y = 7; if(biggerIsOdd(x,y) == 1){ return 400; } return 66; } parse finished ~ ~ D d int F biggerIsOdd , ~ int x ~ int y if > x y else return apply isOdd x return apply isOdd y D d int F isOdd ~ int x if == x 1 else return 1 if == apply isOdd - x 1 1 else return 0 return 1 D d int F main ; ; ~ int = x 5 ~ int = y 7 ; if == apply biggerIsOdd , x y 1 return 400 return 66 func biggerIsOdd param x param y if x <= y then L0 arg x call isOdd, $t0 ret $t0 goto L1 L0 arg y call isOdd, $t1 ret $t1 L1 end biggerIsOdd func isOdd param x if x != 1 then L2 ret 1 goto L3 L2 $t3 := x - 1 arg $t3 call isOdd, $t2 if $t2 != 1 then L4 ret 0 goto L5 L4 ret 1 L5 L3 end isOdd func main x := 5 y := 7 arg x arg y call biggerIsOdd, $t4 if $t4 != 1 then L6 ret 400 L6 ret 66 end main ===== li $a0, 68 li $v0, 9 syscall or $fp, $0, $v0 la $t0, main sw $t0, 0($fp) sw $0, 4($fp) jal main j done #func biggerIsOdd biggerIsOdd: li $a0, 68 li $v0, 9 syscall sw $fp, 4($v0) or $fp, $0, $v0 la $t0, biggerIsOdd sw $t0, 0($fp) sw $ra, 64($fp) #param x or $16, $0, $5 #param y or $17, $0, $6 #if x <= y then L0 ble $16, $17, L0 #arg x or $5, $0, $16 #call isOdd, $t0 jal isOdd lw $fp, 4($fp) lw $ra, 64($fp) lw $16, 8($fp) lw $17, 12($fp) or $8, $0, $v1 #ret $t0 or $v1, $0, $8 jr $31 #goto L1 j L1 #L0 L0: #arg y or $5, $0, $17 #call isOdd, $t1 jal isOdd lw $fp, 4($fp) lw $ra, 64($fp) lw $16, 8($fp) lw $17, 12($fp) or $9, $0, $v1 #ret $t1 or $v1, $0, $9 jr $31 #L1 L1: #end biggerIsOdd #func isOdd isOdd: li $a0, 68 li $v0, 9 syscall sw $fp, 4($v0) or $fp, $0, $v0 la $t0, isOdd sw $t0, 0($fp) sw $ra, 64($fp) #param x or $16, $0, $5 #if x != 1 then L2 li $10, 1 bne $16, $10, L2 #ret 1 li $11, 1 or $v1, $0, $11 jr $31 #goto L3 j L3 #L2 L2: #$t3 := x - 1 li $13, 1 sub $12, $16, $13 #arg $t3 or $5, $0, $12 #call isOdd, $t2 jal isOdd lw $fp, 4($fp) lw $ra, 64($fp) lw $16, 8($fp) or $14, $0, $v1 #if $t2 != 1 then L4 li $15, 1 bne $14, $15, L4 #ret 0 or $v1, $0, $0 jr $31 #goto L5 j L5 #L4 L4: #ret 1 li $24, 1 or $v1, $0, $24 jr $31 #L5 L5: #L3 L3: #end isOdd #func main main: li $a0, 68 li $v0, 9 syscall sw $fp, 4($v0) or $fp, $0, $v0 la $t0, main sw $t0, 0($fp) sw $ra, 64($fp) #x := 5 li $25, 5 or $16, $0, $25 #y := 7 li $8, 7 or $17, $0, $8 #arg x or $5, $0, $16 #arg y or $6, $0, $17 #call biggerIsOdd, $t4 jal biggerIsOdd lw $fp, 4($fp) lw $ra, 64($fp) lw $16, 8($fp) lw $17, 12($fp) or $9, $0, $v1 #if $t4 != 1 then L6 li $10, 1 bne $9, $10, L6 #ret 400 li $11, 400 or $v1, $0, $11 jr $31 #L6 L6: #ret 66 li $12, 66 or $v1, $0, $12 jr $31 #end main done: ori $v0, $0, 10 syscall