50 lines
660 B
ArmAsm
50 lines
660 B
ArmAsm
|
|
#ifdef __Z8001__
|
|
segm
|
|
|
|
.global _setjmp
|
|
_setjmp:
|
|
ldl rr2,@rr14 ! fetch pc
|
|
ldl @rr6,rr2 ! save it
|
|
ldl rr6(4),rr10
|
|
ldl rr6(8),rr12 ! and the other special regs
|
|
ldl rr6(12),rr14
|
|
ldk r2,#0
|
|
ret t
|
|
|
|
.globl _longjmp
|
|
|
|
_longjmp:
|
|
ld r2,r5 ! get return value
|
|
ldl rr4,rr6(0)
|
|
ldl rr10,rr6(4)
|
|
ldl rr12,rr6(8)
|
|
ldl rr14,rr6(12)
|
|
jp @rr4
|
|
#else
|
|
unseg
|
|
|
|
.global _setjmp
|
|
_setjmp:
|
|
ld r2,@r15 ! fetch pc
|
|
ld @r7,r2 ! save it
|
|
ldl r7(4),rr10
|
|
ldl r7(8),rr12 ! and the other special regs
|
|
ldl r7(12),rr14
|
|
ldk r2,#0
|
|
ret t
|
|
|
|
.globl _longjmp
|
|
|
|
_longjmp:
|
|
ld r2,r6 ! get return value
|
|
ld r4,@r7
|
|
ldl rr10,rr7(4)
|
|
ldl rr12,rr7(8)
|
|
ldl rr14,rr7(12)
|
|
jp @rr4
|
|
|
|
#endif
|
|
|
|
|