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 ! ;)

Reply via email to