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 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,