This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[COMMITTED] longlong.h: Disable alpha umul_ppmm for old g++
- From: Richard Henderson <rth at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: jason at redhat dot com
- Date: Tue, 28 Oct 2014 13:26:24 -0700
- Subject: [COMMITTED] longlong.h: Disable alpha umul_ppmm for old g++
- Authentication-results: sourceware.org; auth=none
I can't tell if this is fixed on mainline, because __builtin expansion
happens at a different time, or if it's still broken but hidden somehow.
But using gcc 4.8 as a bootstrap compiler for alphaev67-linux, we get a
"sorry: unexpected AST of kind MULT_HIGHPART". It seems easiest to simply
disable this for pre-g++-5 to allow bootstrap to succeed.
r~
* longlong.h [__alpha] (umul_ppmm): Disable for c++.
---
include/ChangeLog | 4 ++++
include/longlong.h | 4 ++++
2 files changed, 8 insertions(+)
diff --git a/include/ChangeLog b/include/ChangeLog
index d2d1472..e482682 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,7 @@
+2014-10-28 Richard Henderson <rth@redhat.com>
+
+ * longlong.h [__alpha] (umul_ppmm): Disable for c++.
+
2014-10-28 Yury Gribov <y.gribov@samsung.com>
* libiberty.h (strtol, strtoul, strtoll, strtoull): New prototypes.
diff --git a/include/longlong.h b/include/longlong.h
index 42c68dd..8cd2c79 100644
--- a/include/longlong.h
+++ b/include/longlong.h
@@ -139,6 +139,9 @@ extern const UQItype __clz_tab[256] attribute_hidden;
#endif /* __aarch64__ */
#if defined (__alpha) && W_TYPE_SIZE == 64
+/* There is a bug in g++ before version 5 that
+ errors on __builtin_alpha_umulh. */
+#if !defined(__cplusplus) || __GNUC__ >= 5
#define umul_ppmm(ph, pl, m0, m1) \
do { \
UDItype __m0 = (m0), __m1 = (m1); \
@@ -146,6 +149,7 @@ extern const UQItype __clz_tab[256] attribute_hidden;
(pl) = __m0 * __m1; \
} while (0)
#define UMUL_TIME 46
+#endif /* !c++ */
#ifndef LONGLONG_STANDALONE
#define udiv_qrnnd(q, r, n1, n0, d) \
do { UDItype __r; \
--
1.9.3