@@ -8458,6 +8458,18 @@ expand_expr_real_1 (tree exp, rtx target
return decl_rtl;
case INTEGER_CST:
+ if (GET_MODE_BITSIZE (mode) > 2 * HOST_BITS_PER_WIDE_INT)
+ {
+ /* FIXME: We can't generally represent wide integer constants,
+ but GCC sometimes tries to initialise wide integer values (such
+ as used by the ARM NEON support) with zero. Handle that as a
+ special case here. */
+ if (initializer_zerop (exp))
+ return CONST0_RTX (mode);
+
+ gcc_unreachable ();
+ }
+
temp = immed_double_const (TREE_INT_CST_LOW (exp),
TREE_INT_CST_HIGH (exp), mode);