https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78020
Yvan Roux <yroux at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |yroux at gcc dot gnu.org --- Comment #2 from Yvan Roux <yroux at gcc dot gnu.org> --- 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 ! ;)