https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106069

--- Comment #29 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> 
---
(In reply to Segher Boessenkool from comment #28)
> (In reply to rsand...@gcc.gnu.org from comment #25)
> > - On big-endian targets, vector loads and stores are assumed to put the
> >   first memory element at the most significant end of the vector register.
> 
> I agree with everything here, except calling this "most significant".  That
> just makes no sense for vectors.  It is element 0, but that is not more
> significant than any other element :-)  Vectors aren't integers.
Ah, yeah, I should have said “most significant end of the vector register
if the vector register is viewed as a single integer” (which is an important
difference).  The point here was that:

(a) by default, TI subregs of V4SI registers are assumed to be nops
    (and vice versa)

(b) consequently, TImode loads are assumed to perform the same operation
    as V4SI loads

So endianness assumptions for single integers carry over to like-sized
vector modes.  On big-endian, the first element of the V4SI is assumed
to line up with the top 32 bits of a 128-bit integer.

Although it's possible to force subregs not to be nops (via
targetm.can_change_mode_class), that only really affects changes
to specific hard register classes.  The generic rules still apply
to the layout of pseudos.

Reply via email to