On Tue, Jun 2, 2015 at 2:27 PM, Michael Meissner <meiss...@linux.vnet.ibm.com> wrote: > 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.
The first patch is okay. This clearly is going to require a lot of interations with libgcc and GLIBC. Thanks, David