summaryrefslogtreecommitdiffstats
path: root/newlib/libc
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc')
-rw-r--r--newlib/libc/include/machine/setjmp.h2
-rw-r--r--newlib/libc/machine/or1k/setjmp.S21
2 files changed, 21 insertions, 2 deletions
diff --git a/newlib/libc/include/machine/setjmp.h b/newlib/libc/include/machine/setjmp.h
index 596e64bdb..a9e0d7141 100644
--- a/newlib/libc/include/machine/setjmp.h
+++ b/newlib/libc/include/machine/setjmp.h
@@ -1,7 +1,7 @@
_BEGIN_STD_C
-#ifdef __or1k__
+#if defined(__or1k__) || defined(__or1knd__)
#define _JBLEN 31 /* 32 GPRs - r0 */
#define _JBTYPE unsigned long
#endif
diff --git a/newlib/libc/machine/or1k/setjmp.S b/newlib/libc/machine/or1k/setjmp.S
index 13ccf8a07..5c023278d 100644
--- a/newlib/libc/machine/or1k/setjmp.S
+++ b/newlib/libc/machine/or1k/setjmp.S
@@ -49,8 +49,18 @@ setjmp:
l.mfspr r13, r0, 17
l.sw 124(r3), r13
/* Set result register to 0 and jump */
+// Different cases for optional delay slot
+#if defined(__OR1K_NODELAY__)
+ l.addi r11, r0, 0
+ l.jr r9
+#elif defined(__OR1K_DELAY__)
l.jr r9
l.addi r11, r0, 0
+#else
+ l.addi r11, r0, 0
+ l.jr r9
+ l.nop
+#endif
.align 4
.global longjmp
@@ -83,7 +93,16 @@ longjmp:
l.lwz r24, 92(r3)
l.lwz r26, 100(r3)
l.lwz r28, 108(r3)
- l.lwz r30, 116(r3)
+// Different cases for optional delay slot
+#if defined(__OR1K_NODELAY__)
+ l.lwz r30, 116(r3)
+ l.jr r9
+#elif defined(__OR1K_DELAY__)
+ l.jr r9
+ l.lwz r30, 116(r3)
+#else
+ l.lwz r30, 116(r3)
l.jr r9
l.nop
+#endif