diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2004-12-17 23:17:13 +0300 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2004-12-17 23:17:13 +0300 |
commit | d8ae996c41cf0148f5bffa393bc35ed9b0e5d5d5 (patch) | |
tree | b3086194f8dc3f1cedd595cde4be79a65d640685 /newlib/libc/machine/z8k/setjmp.S | |
parent | 8232f2e050785e61113a926aa922e4004dd9c118 (diff) |
2004-12-17 Christian Groessler <chris@groessler.org>
* libc/machine/z8k/memcmp.S: New file.
* libc/machine/z8k/memcpy.S: Ditto.
* libc/machine/z8k/memmove.S: Ditto.
* libc/machine/z8k/memset.S: Ditto.
* libc/machine/z8k/Makefile.am: Add new files.
* libc/machine/z8k/Makefile.in: Regenerated.
* libc/machine/z8k/setjmp.S: Fix indirect register usage in Z8002
part. Implement Z8002 stdcall version.
Diffstat (limited to 'newlib/libc/machine/z8k/setjmp.S')
-rw-r--r-- | newlib/libc/machine/z8k/setjmp.S | 44 |
1 files changed, 32 insertions, 12 deletions
diff --git a/newlib/libc/machine/z8k/setjmp.S b/newlib/libc/machine/z8k/setjmp.S index e58d0d1f4..30240e1e8 100644 --- a/newlib/libc/machine/z8k/setjmp.S +++ b/newlib/libc/machine/z8k/setjmp.S @@ -1,10 +1,9 @@ + .global _setjmp + .global _longjmp #ifdef __Z8001__ segm - .global _setjmp - .globl _longjmp - #ifdef __STD_CALL__ _setjmp: @@ -56,10 +55,31 @@ _longjmp: unseg #ifdef __STD_CALL__ -#warning Z8002 std call not implemented! -#endif - .global _setjmp +_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 @@ -69,14 +89,14 @@ _setjmp: 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 + ldl rr10,r7(4) + ldl rr12,r7(8) + ldl rr14,r7(12) + inc r15,#2 + jp @r4 +#endif /* not __STD_CALL__ */ #endif /* Z8002 version */ |