diff options
Diffstat (limited to 'newlib/libc')
-rw-r--r-- | newlib/libc/include/machine/setjmp.h | 2 | ||||
-rw-r--r-- | newlib/libc/machine/or1k/setjmp.S | 21 |
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 |