This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, OR1K] Support for optional delay slot


Please re-submit the newlib part in an attached patch.

Changes to config.sub and config.guess need to be submitted
to config-patches@gnu.org.

-- Jeff J. 

----- Original Message -----
From: "Stefan Wallentowitz" <stefan.wallentowitz@tum.de>
To: newlib@sourceware.org
Sent: Thursday, December 11, 2014 10:31:05 AM
Subject: [PATCH, OR1K] Support for optional delay slot

Dear all,

this patch adds support for the different variants of delay slots (its 
optional).
or1knd is the machine name without delay slot, or1k is the (standard) 
one with delay slot, and for compatibility we simply put a nop into the 
delay slot.

Bye,
Stefan

commit 0790c6718f2e51b45b03a8c77600bf8db22ef07b
Author: Stefan Wallentowitz <stefan.wallentowitz@tum.de>
Date:   Thu Dec 11 15:21:06 2014 +0100

     OR1K: Optional delay slot support

     The machine or1knd are OpenRISC implementations without delay slot

     newlib/Changelog:
         * configure.host: or1knd support, OpenRISC without delay slot
         * libc/include/machine/setjmp.h: Add or1knd
         * libc/machine/or1k/setjmp.S: Optional delay slot

diff --git a/config.guess b/config.guess
index 2055429..5e86705 100755
--- a/config.guess
+++ b/config.guess
@@ -967,6 +967,9 @@ EOF
      or32:Linux:*:*)
      echo ${UNAME_MACHINE}-unknown-linux-gnu
      exit ;;
+    or1knd:Linux:*:*)
+    echo or1knd-unknown-linux-gnu
+    exit ;;
      padre:Linux:*:*)
      echo sparc-unknown-linux-gnu
      exit ;;
diff --git a/config.sub b/config.sub
index 8b612ab..86e5a86 100755
--- a/config.sub
+++ b/config.sub
@@ -296,7 +296,7 @@ case $basic_machine in
      | nios | nios2 | nios2eb | nios2el \
      | ns16k | ns32k \
      | open8 \
-    | or1k | or32 \
+    | or1k | or1knd | or32 \
      | pdp10 | pdp11 | pj | pjl \
      | powerpc | powerpc64 | powerpc64le | powerpcle \
      | pyramid \
@@ -1589,7 +1589,7 @@ case $basic_machine in
      mips*-*)
          os=-elf
          ;;
-    or1k-*)
+    or1k-* | or1knd-*)
          os=-elf
          ;;
      or32-*)
diff --git a/newlib/configure.host b/newlib/configure.host
index c7a0401..d405d22 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 596e64b..a9e0d71 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 13ccf8a..5c02327 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



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]