diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 258154075..9ed561d1f 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,9 @@ +2014-12-12 Stefan Wallentowitz + + * configure.host: or1knd support, OpenRISC without delay slot + * libc/include/machine/setjmp.h: Add or1knd + * libc/machine/or1k/setjmp.S: Optional delay slot + 2014-12-12 Stefan Wallentowitz * libc/machine/or1k/setjmp.S: Remove save/restore of r3-r8 diff --git a/newlib/configure.host b/newlib/configure.host index c7a040192..d405d22dd 100644 --- a/newlib/configure.host +++ b/newlib/configure.host @@ -245,7 +245,7 @@ case "${host_cpu}" in nios2*) machine_dir=nios2 ;; - or1k*) + or1k*|or1knd*) machine_dir=or1k ;; powerpc*) 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