### compiled by Neal Wagner on
#     Fri Dec 12 10:08:53 2014
main:   move    $s7, $ra
        la      $s1, M # data addr
# Print your name
        li      $v0, 4
        la      $a0, Name
        syscall
### Compiled code starts here
# M[15] = M[1]
        l.d     $f2, 8($s1)
        s.d     $f2, 120($s1)
# M[16] = M[2]
        l.d     $f2, 16($s1)
        s.d     $f2, 128($s1)
# M[23] = M[3]
        l.d     $f2, 24($s1)
        s.d     $f2, 184($s1)
# Read M[22]
        li      $v0, 7
        syscall
        s.d     $f0, 176($s1)
WhileStart0:
# M[36] = M[22] - M[23]
        l.d     $f2, 176($s1)
        l.d     $f4, 184($s1)
        sub.d   $f6, $f2, $f4
        s.d     $f6, 288($s1)
        l.d     $f2, 288($s1)
        l.d     $f4, 0($s1)
        c.eq.d  $f2, $f4
        bc1t    WhileEnd0
# WhileBody0
# Output M[23]
        li      $v0, 3
        l.d     $f12, 184($s1)
        syscall
# Output Tab
        li      $v0, 4
        la      $a0, Tab
        syscall
# Output M[16]
        li      $v0, 3
        l.d     $f12, 128($s1)
        syscall
# Output Tab
        li      $v0, 4
        la      $a0, Tab
        syscall
# M[19] = M[16]
        l.d     $f2, 128($s1)
        s.d     $f2, 152($s1)
# M[13] = M[2]
        l.d     $f2, 16($s1)
        s.d     $f2, 104($s1)
# M[29] = M[1]
        l.d     $f2, 8($s1)
        s.d     $f2, 232($s1)
WhileStart1:
        l.d     $f2, 232($s1)
        l.d     $f4, 0($s1)
        c.eq.d  $f2, $f4
        bc1t    WhileEnd1
# WhileBody1
### IfThenElseStart0:
# M[37] = M[19] % M[13]
        l.d     $f2, 152($s1)
        l.d     $f4, 104($s1)
        div.d      $f6, $f2, $f4 # divide, no trunc
        trunc.w.d  $f6, $f6      # truncate answer
        cvt.d.w    $f6, $f6      # convert to double
        mul.d      $f6, $f6, $f4 #  multipy by s
        sub.d      $f6, $f2, $f6 #  subtract from r
        s.d     $f6, 296($s1)
        l.d     $f2, 296($s1)
        l.d     $f4, 0($s1)
        c.eq.d  $f2, $f4
        bc1t    ThenEnd0
# ThenPart0
# M[14] = M[0]
        l.d     $f2, 0($s1)
        s.d     $f2, 112($s1)
        j       EndIf0
ThenEnd0:
# M[14] = M[1]
        l.d     $f2, 8($s1)
        s.d     $f2, 112($s1)
EndIf0:
WhileStart2:
        l.d     $f2, 112($s1)
        l.d     $f4, 0($s1)
        c.eq.d  $f2, $f4
        bc1t    WhileEnd2
# WhileBody2
# M[38] = M[19] / M[13]
        l.d     $f2, 152($s1)
        l.d     $f4, 104($s1)
        div.d   $f6, $f2, $f4
        s.d     $f6, 304($s1)
# M[19] = M[38]
        l.d     $f2, 304($s1)
        s.d     $f2, 152($s1)
# Output M[13]
        li      $v0, 3
        l.d     $f12, 104($s1)
        syscall
# Output Blank
        li      $v0, 4
        la      $a0, Blank
        syscall
### IfThenElseStart1:
# M[39] = M[19] % M[13]
        l.d     $f2, 152($s1)
        l.d     $f4, 104($s1)
        div.d      $f6, $f2, $f4 # divide, no trunc
        trunc.w.d  $f6, $f6      # truncate answer
        cvt.d.w    $f6, $f6      # convert to double
        mul.d      $f6, $f6, $f4 #  multipy by s
        sub.d      $f6, $f2, $f6 #  subtract from r
        s.d     $f6, 312($s1)
        l.d     $f2, 312($s1)
        l.d     $f4, 0($s1)
        c.eq.d  $f2, $f4
        bc1t    ThenEnd1
# ThenPart1
# M[14] = M[0]
        l.d     $f2, 0($s1)
        s.d     $f2, 112($s1)
        j       EndIf1
ThenEnd1:
# M[14] = M[1]
        l.d     $f2, 8($s1)
        s.d     $f2, 112($s1)
EndIf1:
        j       WhileStart2
WhileEnd2:
### IfThenElseStart2:
# M[40] = M[19] - M[1]
        l.d     $f2, 152($s1)
        l.d     $f4, 8($s1)
        sub.d   $f6, $f2, $f4
        s.d     $f6, 320($s1)
        l.d     $f2, 320($s1)
        l.d     $f4, 0($s1)
        c.eq.d  $f2, $f4
        bc1t    ThenEnd2
# ThenPart2
# M[29] = M[1]
        l.d     $f2, 8($s1)
        s.d     $f2, 232($s1)
        j       EndIf2
ThenEnd2:
# M[29] = M[0]
        l.d     $f2, 0($s1)
        s.d     $f2, 232($s1)
EndIf2:
### IfThenElseStart3:
# M[41] = M[13] - M[2]
        l.d     $f2, 104($s1)
        l.d     $f4, 16($s1)
        sub.d   $f6, $f2, $f4
        s.d     $f6, 328($s1)
        l.d     $f2, 328($s1)
        l.d     $f4, 0($s1)
        c.eq.d  $f2, $f4
        bc1t    ThenEnd3
# ThenPart3
# M[42] = M[13] + M[2]
        l.d     $f2, 104($s1)
        l.d     $f4, 16($s1)
        add.d   $f6, $f2, $f4
        s.d     $f6, 336($s1)
# M[13] = M[42]
        l.d     $f2, 336($s1)
        s.d     $f2, 104($s1)
        j       EndIf3
ThenEnd3:
# M[13] = M[3]
        l.d     $f2, 24($s1)
        s.d     $f2, 104($s1)
EndIf3:
        j       WhileStart1
WhileEnd1:
# Output NewL
        li      $v0, 4
        la      $a0, NewL
        syscall
# M[43] = M[23] + M[1]
        l.d     $f2, 184($s1)
        l.d     $f4, 8($s1)
        add.d   $f6, $f2, $f4
        s.d     $f6, 344($s1)
# M[23] = M[43]
        l.d     $f2, 344($s1)
        s.d     $f2, 184($s1)
# M[44] = M[15] + M[16]
        l.d     $f2, 120($s1)
        l.d     $f4, 128($s1)
        add.d   $f6, $f2, $f4
        s.d     $f6, 352($s1)
# M[17] = M[44]
        l.d     $f2, 352($s1)
        s.d     $f2, 136($s1)
# M[15] = M[16]
        l.d     $f2, 128($s1)
        s.d     $f2, 120($s1)
# M[16] = M[17]
        l.d     $f2, 136($s1)
        s.d     $f2, 128($s1)
        j       WhileStart0
WhileEnd0:
# Stuff at end
        move    $ra, $s7
        jr      $ra  # ret to sys
# data declarations
        .data
        .align  3
M:      .double 0.,1.,2.,3.,4.,5.
        .double 6.,7.,8.,9. # cons
        .space  208  # a to z
        .space  1000 # 125 temps
Blank:  .asciiz " "
NewL:   .asciiz "\n"
Tab:    .asciiz "\t"
Name:   .asciiz "Executed by Neal Wagner\n"
### tiny source program:
# # fib.t: Fibonacci numbers
# #  and prime factorizations
# f = 1; g = 2; n = 3;
# > m;
# { m - n ?
#    < n; < T; < g; < T;
#    j = g; d = 2; t = 1;
#    { t ?
#       [ j%d ? e = 0; : e = 1; ]
#       { e ?
#          j = j/d;
#          < d; < B;
#          [ j%d ? e = 0; : e = 1; ]
#       }
#       [ j - 1 ? t = 1; : t = 0; ]
#       [ d - 2 ? d = d + 2; : d = 3; ]
#    }
#    < N;
#    n = n + 1;
#    h = f + g;
#    f = g; g = h;
# }  $