On 9/28/19 8:14 PM, Oleg Endo wrote: > Hi, > > I've been dragging this patch along with me for a while. > At the moment, I don't have the resources to fully test it as requested > by Ian in the PR discussion. > > So I would like to ask for general comments on this one and hope that > folks with bigger automated test setups can run the patch through their > machinery for little endian targets. > > > Summary of the story: > > I've noticed this issue on the RX on GCC 6, but it seems it's been > there forever. > > On RX, fp-bit is used for software floating point emulation. The RX > target also uses "MS bit-field" layout by default. This means that > code like > > struct > { > fractype fraction:FRACBITS __attribute__ ((packed)); > unsigned int exp:EXPBITS __attribute__ ((packed)); > unsigned int sign:1 __attribute__ ((packed)); > } bits; > > will result in sizeof (bits) != 8 > > For some reason, this bit-field style declaration is used only for > FLOAT_BIT_ORDER_MISMATCH, which generally seems to be set for little > endian targets. In other cases (i.e. big endian) open coded bit field > extraction and packing is used on the base integer type, like > > fraction = src->value_raw & ((((fractype)1) << FRACBITS) - 1); > exp = ((int)(src->value_raw >> FRACBITS)) & ((1 << EXPBITS) - 1); > sign = ((int)(src->value_raw >> (FRACBITS + EXPBITS))) & 1; > > This works of course regardless of the bit-field packing layout of the > target. > > Joseph suggested to pack the struct bit, which would fix the issue. > https://gcc.gnu.org/ml/gcc-bugs/2017-08/msg01651.html > > However, I would like to propose to remove the special case of > FLOAT_BIT_ORDER_MISMATCH altogether as in the attached patch. > > Any comments? So probably the most interesting target for this test is v850-elf as it's got a reasonably well functioning simulator, hard and soft FP targets, little endian, and I'm familiar with its current set of failures.
I can confirm that your patch makes no difference in the test results (which includes execution results). In fact, there haven't been any problems on any target in my tester that I can tie back to this change. At this point I'd say let's go for it. jeff > > Cheers, > Oleg > > > > libgcc/ChangeLog > > PR libgcc/77804 > * fp-bit.h: Remove FLOAT_BIT_ORDER_MISMATCH. > * fp-bit.c (pack_d, unpack_d): Remove special cases for > FLOAT_BIT_ORDER_MISMATCH. > * config/arc/t-arc: Remove FLOAT_BIT_ORDER_MISMATCH. >