Nick Clifton schrieb:
Hi Guys,

  I am checking in the patch below to add a __clrsbhi2 function to
  libgcc for the XStormy16 port.  This fixes several gcc testsuite
  failures that need this particular function.

Cheers
  Nick

Hi, just out of curiosity: Is there a special reason to add a
stormy16-specific implementation instead of using the code in
libgcc2.c? t-avr for example uses the C implementation in libgcc2.c
for HI. Are there disadvantages?

Johann

libgcc/ChangeLog
2012-07-31  Nick Clifton  <ni...@redhat.com>

        * config/stormy16/lib2funcs.c (__clrsbhi2): New function.
        Implements __clrsb for an HImode argument.
        * config/stormy16/clrsbhi2.c: New file:
        * config/stormy16/t-stormy16 (LIB2ADD): Add clrsbhi2.c.

Index: libgcc/config/stormy16/clrsbhi2.c
===================================================================
--- libgcc/config/stormy16/clrsbhi2.c   (revision 0)
+++ libgcc/config/stormy16/clrsbhi2.c   (working copy)
@@ -0,0 +1,2 @@
+#define XSTORMY16_CLRSBHI2
+#include "lib2funcs.c"
Index: libgcc/config/stormy16/t-stormy16
===================================================================
--- libgcc/config/stormy16/t-stormy16   (revision 189996)
+++ libgcc/config/stormy16/t-stormy16   (working copy)
@@ -33,6 +33,7 @@
        $(srcdir)/config/stormy16/clzhi2.c \
        $(srcdir)/config/stormy16/ctzhi2.c \
        $(srcdir)/config/stormy16/ffshi2.c \
+       $(srcdir)/config/stormy16/clrsbhi2.c \
        $(srcdir)/config/stormy16/cmpsi2.c \
        $(srcdir)/config/stormy16/ucmpsi2.c
Index: libgcc/config/stormy16/lib2funcs.c
===================================================================
--- libgcc/config/stormy16/lib2funcs.c  (revision 189996)
+++ libgcc/config/stormy16/lib2funcs.c  (working copy)
@@ -311,6 +311,22 @@
 }
 #endif
+#ifdef XSTORMY16_CLRSBHI2
+/* Returns the number of leading redundant sign bits in X.
+   I.e. the number of bits following the most significant bit which are
+   identical to it.  There are no special cases for 0 or other values.  */
+
+int
+__clrsbhi2 (HWtype x)
+{
+  if (x < 0)
+    x = ~x;
+  if (x == 0)
+    return 15;
+  return __builtin_clz (x) - 1;
+}
+#endif
+
 #ifdef XSTORMY16_UCMPSI2
 /* Performs an unsigned comparison of two 32-bit values: A and B.
    If A is less than B, then 0 is returned.  If A is greater than B,


Reply via email to