REV
Reverse bytes
This instruction reverses the byte order in a register.
If PSTATE.DIT is 1:
The execution time of this instruction is independent of:
The values of the data supplied in any of its registers.
The values of the NZCV flags.
The response of this instruction to asynchronous exceptions does not vary based on:
The values of the data supplied in any of its registers.
The values of the NZCV flags.
This instruction is used by the alias
REV64
Never
See
below for details of when the alias is preferred.
1
0
1
1
0
1
0
1
1
0
0
0
0
0
0
0
0
0
0
1
x
0
0
REV <Wd>, <Wn>
1
1
REV <Xd>, <Xn>
if opc == '11' && sf == '0' then UNDEFINED;
constant integer d = UInt(Rd);
constant integer n = UInt(Rn);
constant integer datasize = 32 << UInt(sf);
constant integer container_size = 8 << UInt(opc);
<Wd>
Is the 32-bit name of the general-purpose destination register, encoded in the "Rd" field.
<Wn>
Is the 32-bit name of the general-purpose source register, encoded in the "Rn" field.
<Xd>
Is the 64-bit name of the general-purpose destination register, encoded in the "Rd" field.
<Xn>
Is the 64-bit name of the general-purpose source register, encoded in the "Rn" field.
Alias Conditions
constant bits(datasize) operand = X[n, datasize];
bits(datasize) result;
constant integer containers = datasize DIV container_size;
for c = 0 to containers-1
constant bits(container_size) container = Elem[operand, c, container_size];
Elem[result, c, container_size] = Reverse(container, 8);
X[d, datasize] = result;