#### RUNTIME MIPS ####
_new_object:
  ## "void *malloc(int size)"
  ## IN  $a0 = number of bytes
  ## OUT $v0 = allocated address
    li   $v0, 9
    syscall # sbrk
  # initialize with zeros
    move $t0, $a0
    move $t1, $v0
__LoopIn:  # do until $t0=0
    beq  $t0, $zero, __LoopOut
    sb   $zero, 0($t1)
    addi $t1, $t1,  1 
    addi $t0, $t0, -1 
    j    __LoopIn 
__LoopOut:  # done
    jr   $ra

equals:  ## boolean Object.equals(Object)
    seq $v0, $a0, $a1
    jr   $ra 

_system_out_println:
  ## void System.out.println(int x)
  ## IN  $a0 = integer to print
    li   $v0,  1
    syscall # print int
    li   $a0, 10 # char LineFeed
    li   $v0, 11
    syscall # print char
    jr   $ra

_system_exit:
  ## void System.exit(int status)
  ## IN  $a0 = exit status
    move $a1, $a0
    la   $a0, MsgExit
    li   $v0,  4
    syscall # print string
    move $a0, $a1
    li   $v0,  1
    syscall # print int
    li   $v0,  17
    syscall # exit with status
.data
MsgExit: .asciiz "Exit status "