| .global _setjmp |
| .global _longjmp |
| |
| #ifdef __Z8001__ |
| segm |
| |
| #ifdef __STD_CALL__ |
| |
| _setjmp: |
| ldl rr6,rr14(#4) ! get argument |
| ldl rr2,@rr14 ! fetch pc |
| ldl @rr6,rr2 ! save it |
| ldl rr6(#16),rr8 |
| ldl rr6(#4),rr10 |
| ldl rr6(#8),rr12 ! remember frame pointer |
| ldl rr6(#12),rr14 ! remember stack pointer |
| ldk r7,#0 |
| ret t |
| |
| _longjmp: |
| ldl rr4,rr14(#4) ! get first argument |
| ld r7,rr14(#8) ! get return value |
| ldl rr8,rr4(#16) |
| ldl rr10,rr4(#4) |
| ldl rr12,rr4(#8) ! restore old frame pointer |
| ldl rr14,rr4(#12) ! restore old stack pointer |
| ldl rr4,@rr4 ! return address |
| inc r15,#4 |
| jp @rr4 |
| |
| #else /* above __STD_CALL_, below not */ |
| |
| _setjmp: |
| ldl rr2,@rr14 ! fetch pc |
| ldl @rr6,rr2 ! save it |
| ldl rr6(16),rr8 |
| ldl rr6(4),rr10 |
| ldl rr6(8),rr12 ! and the other special regs |
| ldl rr6(12),rr14 |
| ldk r2,#0 |
| ret t |
| |
| _longjmp: |
| ld r2,r5 ! get return value |
| ldl rr4,rr6(0) |
| ldl rr8,rr6(16) |
| ldl rr10,rr6(4) |
| ldl rr12,rr6(8) |
| ldl rr14,rr6(12) |
| inc r15,#4 |
| jp @rr4 |
| |
| #endif /* not __STD_CALL__ */ |
| #else /* above Z8001, below Z8002 */ |
| unseg |
| |
| #ifdef __STD_CALL__ |
| |
| _setjmp: |
| ld r7,r15(#2) ! get argument |
| ld r2,@r15 ! fetch pc |
| ld @r7,r2 ! save it |
| ldl r7(#14),rr8 |
| ldl r7(#2),rr10 |
| ldl r7(#6),rr12 ! remember frame pointer |
| ldl r7(#10),rr14 ! remember stack pointer |
| ldk r7,#0 |
| ret t |
| |
| _longjmp: |
| ld r4,r15(#2) ! get first argument (jmp_buf) |
| ld r7,r15(#4) ! get return value |
| ldl rr8,r4(#14) |
| ldl rr10,r4(#2) |
| ldl rr12,r4(#6) ! restore old frame pointer |
| ldl rr14,r4(#10) ! restore old stack pointer |
| ld r4,@r4 ! return address |
| inc r15,#2 |
| jp @r4 |
| |
| #else /* above __STD_CALL_, below not */ |
| |
| _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 |
| |
| _longjmp: |
| ld r2,r6 ! get return value |
| ld r4,@r7 |
| ldl rr10,r7(4) |
| ldl rr12,r7(8) |
| ldl rr14,r7(12) |
| inc r15,#2 |
| jp @r4 |
| |
| #endif /* not __STD_CALL__ */ |
| #endif /* Z8002 version */ |