rev

Reverse Bytes (32-bit)

REV <Wd>, <Wn>

Reverses the byte order in a 32-bit register (Endianness swap).

Pseudocode Operation

Wd ← ReverseBytes(Wn)
Xd[63:32] ← 0

Example

REV w0, w1

Encoding

Binary Layout
0
31
1
30
0
29
11010110
28:21
00000
20:16
0000
15:12
10
11:10
Rn
9:5
Rd
4:0
 
Format Data Processing
Opcode 0x5AC00800
Extension Base

Operands

  • Wd
    Destination 32-bit integer register
  • Wn
    First source / base 32-bit integer register

Related

Other forms of rev

  • rev SVE Reverse Vector, SVE
  • rev Reverse Bytes (Thumb), T32 (Thumb)
  • rev Reverse Bytes (64-bit), Base
  • rev Reverse Bytes (Thumb), A32 (Base)
  • rev Reverse Bytes (A32), A32 (Base)

Across architectures

Byte Swap (Endianness Reversal) : how x86, ARM, RISC-V, and PowerISA each do this.

More in Base

Reference

Instruction Forms

Encoding Instruction ISA Bit pattern
0x5AC00800 REV <Wd>, <Wn> A64 0 | 1 | 0 | 11010110 | 00000 | 0000 | 10 | Rn | Rd
0xDAC00C00 REV <Xd>, <Xn> A64 1 | 1 | 0 | 11010110 | 00000 | 0000 | 11 | Rn | Rd
0x05344000 REV <Pd>.<T>, <Pn>.<T> A64 00000101 | size | 110100010000 | 0 | Pn | 0 | Pd
0x05383800 REV <Zd>.<T>, <Zn>.<T> A64 00000101 | size | 111000001110 | Zn | Zd

Description

Reverse Bytes reverses the byte order in a register.

Operation

bits(datasize) operand = X[n, datasize];
bits(datasize) result;

constant integer containers = datasize DIV container_size;
for c = 0 to containers-1
    bits(container_size) container = Elem[operand, c, container_size];
    Elem[result, c, container_size] = Reverse(container, 8);

X[d, datasize] = result;