We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi,I have looked through all the intrinsics for the Helium and can not find what would swap the values in the vector. As I understand it, this can only be done by loading/storing into/from memory. Can you please tell me, am I right, or is there a special intrinsic for the swap?Regards,Yevhenii
Are you looking for VREV, VREV16, VREV32, VREV64 MVE instruction?
They reverse bytes in a vector, e.g.
uint8x16_t a;
vrev32q_u8(a);
Saw these also, but they act on elements, not vectors right?You cannot swap elements inside a vector with a single instruction, right? (Guess that's what the OP asks for.)
So a vector with:11223344 | 55667788 | 99aabbcc | ddeeff00
becomes after a (which?) REVx
44332211 | 88776655 | ccbbaa99 | 00ffeedd
and not
ddeeff00 | 99aabbcc | 55667788 | 11223344
VREVx instructions do reverse the byte order in one vector register, for example,
VREV64.8 Q0, Q1
Q1: 11223344 55667788 | 99aabbcc ddeeff00
Q0:
88776655 44332211 | 00ffeedd ccbbaa99
but there is no VREV128 or simply VREV MVE instruction (unlike NEON)