> Why do you need to change varasm.c at all?  The hunks seem to be
> completely separate of the attribute.

Because static constructors have fields in the original order, not the
reversed order.  Otherwise code like this is miscompiled:

struct foo a = { 1, 2, 3 };

because the 1, 2, 3 are in the C layout order, but the underlying data
needs to be stored in the reversed order.

> which will severely pessimize bitfield accesses to structs with the
> bitfield-order attribute.

The typical use-case for this feature is memory-mapped hardware, where
pessimum access is preferred anyway.

> so you are supporting this as #pragma.  Which ends up tacking
> bit_order to each type.  Rather than this, why not operate similar
> to the packed pragma, thus, adjust a global variable in
> stor-layout.c.

Because when I first proposed this feature, I was told to do it this
way.

> I don't see a value in attaching 'native' or 'msb'/'lsb' if it is
> equal to 'native'.  You un-necessarily pessimize code generation (is
> different code even desired for a "no-op" bit_order attribute?).

If the attribute corresponds to the native mode, it should be a no-op.
The pessimizing only happens when the fields are actually in reverse
order.

> So no, I don't like this post-process layouting thing.  It's a
> layouting mode so it should have effects at bitfield layout time.

The actual reversal happens in stor-layout.c.  Everything else is
there to compensate for a possible non-linear layout.

Reply via email to