summaryrefslogtreecommitdiff
path: root/newlib/libc/machine/h8300/setjmp.S
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/machine/h8300/setjmp.S')
-rw-r--r--newlib/libc/machine/h8300/setjmp.S72
1 files changed, 72 insertions, 0 deletions
diff --git a/newlib/libc/machine/h8300/setjmp.S b/newlib/libc/machine/h8300/setjmp.S
new file mode 100644
index 00000000000..9e716409507
--- /dev/null
+++ b/newlib/libc/machine/h8300/setjmp.S
@@ -0,0 +1,72 @@
+ .file "setjmp.S"
+
+#ifdef __H8300H__
+ .h8300h
+#endif
+
+#ifdef __H8300S__
+ .h8300s
+#endif
+
+ .section .text
+ .align 2
+ .global _setjmp
+_setjmp:
+#ifdef __H8300H__
+ mov.l er7,@er0
+ mov.l er6,@(4,er0)
+ mov.l er5,@(8,er0)
+ mov.l er4,@(12,er0)
+ mov.l @sp,er1
+ mov.l er1,@(16,er0)
+#else
+#ifdef __H8300S__
+ mov.l er7,@er0
+ mov.l er6,@(4,er0)
+ mov.l er5,@(8,er0)
+ mov.l er4,@(12,er0)
+ mov.l @sp,er1
+ mov.l er1,@(16,er0)
+#else
+ mov.w r7,@r0
+ mov.w r6,@(2,r0)
+ mov.w r5,@(4,r0)
+ mov.w r4,@(6,r0)
+ mov.w @sp,r1
+ mov.w r1,@(8,r0)
+#endif
+#endif
+ sub.w r0,r0
+ rts
+
+ .global _longjmp
+_longjmp:
+#ifdef __H8300H__
+ mov.l @er0+,er7
+ mov.l @er0+,er6
+ mov.l @er0+,er5
+ mov.l @er0+,er4
+ mov.l @er0,er2
+ mov.l er2,@sp
+#else
+#ifdef __H8300S__
+ mov.l @er0+,er7
+ mov.l @er0+,er6
+ mov.l @er0+,er5
+ mov.l @er0+,er4
+ mov.l @er0,er2
+ mov.l er2,@sp
+#else
+ mov.w @r0+,r7
+ mov.w @r0+,r6
+ mov.w @r0+,r5
+ mov.w @r0+,r4
+ mov.w @r0,r2
+ mov.w r2,@sp
+#endif
+#endif
+ mov.w r1,r0
+ bne .L1
+ mov.w #1,r0
+.L1:
+ rts