17 lines
470 B
ArmAsm
17 lines
470 B
ArmAsm
.globl _setjmp
|
|
.globl _longjmp
|
|
|
|
_setjmp: move.l 4(sp),a0 // address of jmp_buf[]
|
|
move.l (sp),(a0) // save return address
|
|
movem.l d2-d7/a2-a7,4(a0) // save registers to jmp_buf
|
|
clr.l d0
|
|
rts
|
|
|
|
_longjmp: move.l 4(sp),a0 // address of jmp_buf[]
|
|
move.l 8(sp),d0 // value to return
|
|
jne not_0 // value may not be 0
|
|
moveq.l #1,d0
|
|
not_0: movem.l 4(a0),d2-d7/a2-a7 // restore registers
|
|
move.l (a0),(sp) // restore saved return address
|
|
rts
|