summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/alpha/__longjmp.S
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1/dietlibc/alpha/__longjmp.S')
-rw-r--r--mdk-stage1/dietlibc/alpha/__longjmp.S38
1 files changed, 38 insertions, 0 deletions
diff --git a/mdk-stage1/dietlibc/alpha/__longjmp.S b/mdk-stage1/dietlibc/alpha/__longjmp.S
new file mode 100644
index 000000000..d86d76717
--- /dev/null
+++ b/mdk-stage1/dietlibc/alpha/__longjmp.S
@@ -0,0 +1,38 @@
+#ifdef __alpha__
+
+#include <setjmp.h>
+
+.text
+.align 2
+
+.global __longjmp
+__longjmp:
+ mov $17, $0 /* a1 -> v0 */
+
+ ldq $9, (JB_S0*8) ($16) /* s0 */
+ ldq $10, (JB_S1*8) ($16) /* s1 */
+ ldq $11, (JB_S2*8) ($16) /* s2 */
+ ldq $12, (JB_S3*8) ($16) /* s3 */
+ ldq $13, (JB_S4*8) ($16) /* s4 */
+ ldq $14, (JB_S5*8) ($16) /* s5 */
+
+ ldq $26, (JB_PC*8) ($16) /* ra */
+ ldq $fp, (JB_FP*8) ($16) /* fp */
+ ldq $1, (JB_SP*8) ($16) /* sp */
+
+ ldt $f2, (JB_F2*8) ($16) /* f2 */
+ ldt $f3, (JB_F3*8) ($16) /* f3 */
+ ldt $f4, (JB_F4*8) ($16) /* f4 */
+ ldt $f5, (JB_F5*8) ($16) /* f5 */
+ ldt $f6, (JB_F6*8) ($16) /* f6 */
+ ldt $f7, (JB_F7*8) ($16) /* f7 */
+ ldt $f8, (JB_F8*8) ($16) /* f8 */
+ ldt $f9, (JB_F9*8) ($16) /* f9 */
+
+ cmoveq $0, 0x1, $0
+ mov $1, $sp
+
+ ret $31, ($26), 1
+
+
+#endif