summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/h8300/__longjmp.S
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps/linux/h8300/__longjmp.S')
-rw-r--r--libc/sysdeps/linux/h8300/__longjmp.S26
1 files changed, 26 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/h8300/__longjmp.S b/libc/sysdeps/linux/h8300/__longjmp.S
new file mode 100644
index 000000000..2233644d0
--- /dev/null
+++ b/libc/sysdeps/linux/h8300/__longjmp.S
@@ -0,0 +1,26 @@
+#define _ASM
+#define _SETJMP_H
+#include <bits/setjmp.h>
+
+#ifdef __H8300S__
+ .h8300s
+#else
+ .h8300h
+#endif
+ .text
+
+.global ___longjmp
+
+___longjmp:
+ mov.l er1,er1
+ bne 1f
+ sub.l er1,er1
+ inc.l #1,er1
+1:
+ mov.l @er0+,er4
+ mov.l @er0+,er5
+ mov.l @er0+,er6
+ mov.l @er0+,sp
+ mov.l @er0+,er3 ; return PC
+ adds #4,sp ; adjust return stack
+ jmp @er3