This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
> /* 64-bit constants. If "int" is 32 bits, we'll never hit this abort. */ > else if (TARGET_64BIT && (delta < -2147483647 - 1 || delta > 2147483647)) > abort (); > /* Large constants that can be done by one addis instruction. */ > else if ((delta & 0xffff) == 0) > asm_fprintf (file, "\t{cau|addis} %s,%s,%d\n", this_reg, this_reg, > (int) (delta >> 16)); What this looks like to me is that on a 64-bit machine, if delta is outside the range of a 32-bit int then abort.
Ah. Well, that problem was just as there before -- it was just that we silently generated bad code when the HOST_WIDE_INT was smushed into an int. So, the new behavior is actually better. We'll have to ask the RS6000 maintainers to figure out what they want to do to fix this. 4-gigabyte objects -- especially with virtual functions in subobjects beyond the 4-gigabyte boundary -- are probably pretty rare, but still... -- Mark Mitchell mark@codesourcery.com CodeSourcery, LLC http://www.codesourcery.com
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |