.globl add64 .text # > When primitive arguments twice the size of a pointer-word are passed on the # > stack, they are naturally aligned. When they are passed in the integer # > registers, they reside in an aligned even-odd register pair, with the even # > register holding the least-significant bits. # 64-bit integer addition # arguments: # a0: x lower 32 bits # a1: x upper 32 bits # a2: y lower 32 bits # a3: y upper 32 bits # return: # a0: x+y lower 32 bits # a1: x+y upper 32 bits # add64: add a0, a0, a2 # add lower 32 bits add t0, a1, a3 # add upper 32 bits sltu t1, a0, a2 # if lower 32-bit sum < a2 then set t1=1 (carry bit) add a1, t0, t1 # upper 32 bits of answer (upper sum + carry bit) ret