summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2003-02-03 22:42:20 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2003-02-03 22:42:20 +0000
commit7a02b4da1b51da1d31730f97ba5d4e18d833a195 (patch)
treeb06e600bb678be6305dbf07842e1ba19c1f9ff99
parent119a12ff1b0517c5684796cb4a7c41feea2ab287 (diff)
downloadgcc-7a02b4da1b51da1d31730f97ba5d4e18d833a195.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@62353 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/libgcc2.c36
-rw-r--r--gcc/libgcc2.h34
-rw-r--r--gcc/optabs.c2
4 files changed, 47 insertions, 33 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 439a3515f59..a91d014b561 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+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
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index 4260e25d66c..c2279ef92b7 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -341,7 +341,9 @@ __ashrdi3 (DWtype u, word_type b)
#endif
#ifdef L_ffsdi2
-Wtype
+#undef int
+extern int __ffsdi2 (DWtype u);
+int
__ffsdi2 (DWtype u)
{
DWunion uu;
@@ -520,7 +522,9 @@ const UQItype __clz_tab[] =
#endif
#ifdef L_clzsi2
-Wtype
+#undef int
+extern int __clzsi2 (USItype x);
+int
__clzsi2 (USItype x)
{
UWtype w = x;
@@ -534,7 +538,9 @@ __clzsi2 (USItype x)
#endif
#ifdef L_clzdi2
-Wtype
+#undef int
+extern int __clzdi2 (UDItype x);
+int
__clzdi2 (UDItype x)
{
UWtype word;
@@ -559,7 +565,9 @@ __clzdi2 (UDItype x)
#endif
#ifdef L_ctzsi2
-Wtype
+#undef int
+extern int __ctzsi2 (USItype x);
+int
__ctzsi2 (USItype x)
{
Wtype ret;
@@ -571,7 +579,9 @@ __ctzsi2 (USItype x)
#endif
#ifdef L_ctzdi2
-Wtype
+#undef int
+extern int __ctzdi2 (UDItype x);
+int
__ctzdi2 (UDItype x)
{
UWtype word;
@@ -615,7 +625,9 @@ const UQItype __popcount_tab[] =
#endif
#ifdef L_popcountsi2
-Wtype
+#undef int
+extern int __popcountsi2 (USItype x);
+int
__popcountsi2 (USItype x)
{
return __popcount_tab[(x >> 0) & 0xff]
@@ -626,7 +638,9 @@ __popcountsi2 (USItype x)
#endif
#ifdef L_popcountdi2
-Wtype
+#undef int
+extern int __popcountdi2 (UDItype x);
+int
__popcountdi2 (UDItype x)
{
return __popcount_tab[(x >> 0) & 0xff]
@@ -641,7 +655,9 @@ __popcountdi2 (UDItype x)
#endif
#ifdef L_paritysi2
-Wtype
+#undef int
+extern int __paritysi2 (USItype x);
+int
__paritysi2 (USItype x)
{
UWtype nx = x;
@@ -655,7 +671,9 @@ __paritysi2 (USItype x)
#endif
#ifdef L_paritydi2
-Wtype
+#undef int
+extern int __paritydi2 (UDItype x);
+int
__paritydi2 (UDItype x)
{
UWtype nx = x ^ (x >> 32);
diff --git a/gcc/libgcc2.h b/gcc/libgcc2.h
index c71fcce7824..f32f4a08d38 100644
--- a/gcc/libgcc2.h
+++ b/gcc/libgcc2.h
@@ -223,31 +223,19 @@ extern DWtype __negdi2 (DWtype);
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. */
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 2b08f8efa57..92bfc359111 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -2675,7 +2675,7 @@ expand_unop (mode, unoptab, op0, target, unsignedp)
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 ();