adr

Form PC-relative Address (A32)

ADR<c> <Rd>, <label>

Adds an immediate value to the PC register.

Pseudocode Operation

offset ← RotateImmediate(imm12)
Rd ← PC + offset

Example

ADR r0, label

Encoding

Binary Layout
cond
31:28
0010
27:24
100
23:21
0
20
1111
19:16
Rd
15:12
imm12
11:0
 
Format Data Proc
Opcode 0x028F0000
Extension A32 (Base)

Operands

  • Rd
    Destination general-purpose register
  • label
    Label

Related

Other forms of adr

  • adr Form PC-relative Address
  • adr Form PC-relative Address (Thumb)

More in A32 (Base)

Reference

Instruction Forms

Encoding Instruction ISA Bit pattern
0x028F0000 ADR{<c>}{<q>} <Rd>, <label> A32 cond | 0010 | 100 | 0 | 1111 | Rd | imm12
0x024F0000 ADR{<c>}{<q>} <Rd>, <label> A32 cond | 0010 | 010 | 0 | 1111 | Rd | imm12
0xA000 ADR{<c>}{<q>} <Rd>, <label> T32 1010 | 0 | Rd | imm8
0xF2AF0000 ADR{<c>}{<q>} <Rd>, <label> T32 11110 | i | 10 | 1 | 0 | 1 | 0 | 1111 | 0 | imm3 | Rd | imm8
0xF20F0000 ADR{<c>}.W <Rd>, <label> T32 11110 | i | 10 | 0 | 0 | 0 | 0 | 1111 | 0 | imm3 | Rd | imm8

Description

Form PC-relative address adds an immediate value to the PC value to form a PC-relative address, and writes the result to the destination register.

Operation

if ConditionPassed() then
    EncodingSpecificOperations();
    result = if add then (Align(PC,4) + imm32) else (Align(PC,4) - imm32);
    if d == 15 then          // Can only occur for A32 encodings
        ALUWritePC(result);
    else
        R[d] = result;