+2003-02-03 Richard Henderson <rth@redhat.com>
+
+ * libgcc2.c (__ffsdi2, __clzsi2, __clzdi2, __ctzsi2, __ctzdi2,
+ __popcountsi2, __popcountdi2, __paritysi2, __paritydi2): Change
+ return type to "int". Shuffle declarations and undef int trap.
+ * libgcc2.h: Remove their declarations.
+ * optabs.c (expand_unop): Force outmode to int for bitops.
+
2003-02-03 Bob Wilson <bob.wilson@acm.org>
* config/xtensa/xtensa.c (order_regs_for_local_alloc): Order the
#endif
\f
#ifdef L_ffsdi2
-Wtype
+#undef int
+extern int __ffsdi2 (DWtype u);
+int
__ffsdi2 (DWtype u)
{
DWunion uu;
#endif
\f
#ifdef L_clzsi2
-Wtype
+#undef int
+extern int __clzsi2 (USItype x);
+int
__clzsi2 (USItype x)
{
UWtype w = x;
#endif
\f
#ifdef L_clzdi2
-Wtype
+#undef int
+extern int __clzdi2 (UDItype x);
+int
__clzdi2 (UDItype x)
{
UWtype word;
#endif
\f
#ifdef L_ctzsi2
-Wtype
+#undef int
+extern int __ctzsi2 (USItype x);
+int
__ctzsi2 (USItype x)
{
Wtype ret;
#endif
\f
#ifdef L_ctzdi2
-Wtype
+#undef int
+extern int __ctzdi2 (UDItype x);
+int
__ctzdi2 (UDItype x)
{
UWtype word;
#endif
\f
#ifdef L_popcountsi2
-Wtype
+#undef int
+extern int __popcountsi2 (USItype x);
+int
__popcountsi2 (USItype x)
{
return __popcount_tab[(x >> 0) & 0xff]
#endif
\f
#ifdef L_popcountdi2
-Wtype
+#undef int
+extern int __popcountdi2 (UDItype x);
+int
__popcountdi2 (UDItype x)
{
return __popcount_tab[(x >> 0) & 0xff]
#endif
\f
#ifdef L_paritysi2
-Wtype
+#undef int
+extern int __paritysi2 (USItype x);
+int
__paritysi2 (USItype x)
{
UWtype nx = x;
#endif
\f
#ifdef L_paritydi2
-Wtype
+#undef int
+extern int __paritydi2 (UDItype x);
+int
__paritydi2 (UDItype x)
{
UWtype nx = x ^ (x >> 32);
extern DWtype __lshrdi3 (DWtype, word_type);
extern DWtype __ashldi3 (DWtype, word_type);
extern DWtype __ashrdi3 (DWtype, word_type);
-extern Wtype __ffsdi2 (DWtype);
/* ??? Ought to get these named properly for DSPs. */
-#if BITS_PER_UNIT == 8 && MIN_UNITS_PER_WORD >= 4
-extern Wtype __clzsi2 (USItype);
-extern Wtype __ctzsi2 (USItype);
-extern Wtype __popcountsi2 (USItype x);
-extern Wtype __paritysi2 (USItype x);
-#else
-#undef L_clzsi2
-#undef L_ctzsi2
-#undef L_popcountsi2
-#undef L_paritysi2
-#endif
-
-#if BITS_PER_UNIT == 8 && MIN_UNITS_PER_WORD >= 4 && LONG_LONG_TYPE_SIZE > 32
-extern Wtype __clzdi2 (UDItype);
-extern Wtype __ctzdi2 (UDItype);
-extern Wtype __popcountdi2 (UDItype x);
-extern Wtype __paritydi2 (UDItype x);
-#else
-#undef L_clzdi2
-#undef L_ctzdi2
-#undef L_popcountdi2
-#undef L_paritydi2
+#if BITS_PER_UNIT != 8 || MIN_UNITS_PER_WORD < 4
+# undef L_clzsi2
+# undef L_ctzsi2
+# undef L_popcountsi2
+# undef L_paritysi2
+# if LONG_LONG_TYPE_SIZE <= 32
+# undef L_clzdi2
+# undef L_ctzdi2
+# undef L_popcountdi2
+# undef L_paritydi2
+# endif
#endif
/* __udiv_w_sdiv is static inline when building other libgcc2 portions. */
have them return something that isn't a double-word. */
if (unoptab == ffs_optab || unoptab == clz_optab || unoptab == ctz_optab
|| unoptab == popcount_optab || unoptab == parity_optab)
- outmode = word_mode;
+ outmode = TYPE_MODE (integer_type_node);
start_sequence ();