https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78020
ktkachov at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |INVALID --- Comment #3 from ktkachov at gcc dot gnu.org --- (In reply to Yvan Roux from comment #2) > Christophe, Kyrill > > My understanding of the ARMv8-A Architecture Reference Manual is not the > same. For me when the vectors have two elements ZIP, UZIP and TRN > instruction give the same result. > > for instance if we have: > > + -----+------+ > Vn | A1 | A0 | > + -----+------+ > Vm | B1 | B0 | > + -----+------+ > > UZIP1 reads the even-numbered elemenents of Vn (i.e A0), places it in the > lower half of Vd and then do the same with Vm, thus we have: > > + -----+------+ > Vd | B0 | A0 | > + -----+------+ > > ZIP1 reads the first pair from Vn (which is only A0 is this case) and places > it into the lowest element of Vd and then do same with Vm to get them > interleaved, thus we also have: > > + -----+------+ > Vd | B0 | A0 | > + -----+------+ > > Maybe the confusion comes from the revision of the manual you looked at, > which doesn't include detailled explanation of these instructions, > DDI0487A_k includes figures. > > Kyrill, in the UZP1 figures (C7.2.346) it show that the first unzipped > vector is from Vn ... but maybe I'm the one who misundertand the description > ! ;) Yes, you're right Yvan. James just went through it with me on a board and they are indeed equivalent. Sorry for the confusion.