On Tue, Jun 02, 2015 at 01:43:08PM -0400, David Edelsohn wrote: > Mike, > > What is the purpose of the TARGET_LONG_DOUBLE_128 change in > rs6000_hard_regno_mode_ok()? > > + /* If we don't allow 128-bit binary floating point, disallow the 128-bit > + types from going in any registers. Similarly if __float128 is not > + supported, don't allow __float128/__ibm128 types. */ > + if (!TARGET_LONG_DOUBLE_128 > + && (mode == TFmode || mode == KFmode || mode == IFmode)) > + return false; > > Why is this necessary now?
I was trying to avoid problems if there was no move/convert patterns for KFmode/IFmode. I made it when I transitioned from SPECIAL_FLOAT_MODE to FRACTIONAL_FLOAT_MODE. Given there are 2 fractional float modes now, if the compiler was automatically trying to find a larger type than DFmode, it would first try IFmode, then KFmode, and finally TFmode (under the old SPECIAL_FLOAT_MODE, it wouldn't look at those types in the normal course of things). With the current set of patches, there is no move or convert options for IFmode/KFmode, but also the emulator functions are not properly defined. I can remove the lines and do the build again, if you would prefer. I don't think it is strictly necessary. -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA email: meiss...@linux.vnet.ibm.com, phone: +1 (978) 899-4797