pub enum LabelUse {
Show 13 variants
X86JmpRel32,
RVJal20,
RVPCRel32,
RVB12,
RVPCRelHi20,
RVPCRelLo12I,
RVCJump,
RVCB9,
A64Branch14,
A64Branch19,
A64Branch26,
A64Ldr19,
A64Adr21,
}Variants§
X86JmpRel32
RVJal20
20-bit branch offset (unconditional branches). PC-rel, offset is imm << 1. Immediate is 20 signed bits. Use in Jal instructions.
RVPCRel32
The unconditional jump instructions all use PC-relative addressing to help support position independent code. The JALR instruction was defined to enable a two-instruction sequence to jump anywhere in a 32-bit absolute address range. A LUI instruction can first load rs1 with the upper 20 bits of a target address, then JALR can add in the lower bits. Similarly, AUIPC then JALR can jump anywhere in a 32-bit pc-relative address range.
RVB12
All branch instructions use the B-type instruction format. The 12-bit B-immediate encodes signed offsets in multiples of 2, and is added to the current pc to give the target address. The conditional branch range is ±4 KiB.
RVPCRelHi20
Equivalent to the R_RISCV_PCREL_HI20 relocation, Allows setting
the immediate field of an auipc instruction.
RVPCRelLo12I
Similar to the R_RISCV_PCREL_LO12_I relocation but pointing to
the final address, instead of the PCREL_HI20 label. Allows setting
the immediate field of I Type instructions such as addi or lw.
Since we currently don’t support offsets in labels, this relocation has an implicit offset of 4.
RVCJump
11-bit PC-relative jump offset. Equivalent to the RVC_JUMP relocation
RVCB9
9-bit PC-relative branch offset.
A64Branch14
14-bit branch offset (conditional branches). PC-rel, offset is imm << 2. Immediate is 14 signed bits, in bits 18:5. Used by tbz and tbnz.
A64Branch19
19-bit branch offset (conditional branches). PC-rel, offset is imm << 2. Immediate is 19 signed bits, in bits 23:5. Used by cbz, cbnz, b.cond.
A64Branch26
26-bit branch offset (unconditional branches). PC-rel, offset is imm << 2. Immediate is 26 signed bits, in bits 25:0. Used by b, bl.
A64Ldr19
A64Adr21
Implementations§
Source§impl LabelUse
impl LabelUse
Sourcepub const fn max_pos_range(self) -> CodeOffset
pub const fn max_pos_range(self) -> CodeOffset
Maximum PC-relative range (positive), inclusive.