Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2004-12-17 23:17:13 +0300
committerJeff Johnston <jjohnstn@redhat.com>2004-12-17 23:17:13 +0300
commitd8ae996c41cf0148f5bffa393bc35ed9b0e5d5d5 (patch)
treeb3086194f8dc3f1cedd595cde4be79a65d640685 /newlib/libc/machine/z8k/setjmp.S
parent8232f2e050785e61113a926aa922e4004dd9c118 (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.S44
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 */