lh.aqrl
Load Halfword Acquire Release
This instruction is defined by:
Synopsis
Load 16 bits of data from the address in xs1 into register xd, sign-extending
the result to XLEN bits.
This instruction has both acquire and release semantics. No subsequent memory operations (in program order) from this hart can be observed to occur before this load completes, and no previous memory operations can be observed to occur after this load completes.
The address must be naturally aligned (2-byte aligned); if not, an address-misaligned or access-fault exception will be raised.
Execution
-
Pruned, XLEN == 64
-
Original
XReg virtual_address = X[xs1];
if (!is_naturally_aligned(16, virtual_address)) {
raise(ExceptionCode::LoadAddressMisaligned, mode(), virtual_address);
}
X[xd] = sext(read_memory_aligned(16, virtual_address, $encoding, 1'b1, 1'b1), 16);
XReg virtual_address = X[xs1];
if (!is_naturally_aligned(16, virtual_address)) {
raise(ExceptionCode::LoadAddressMisaligned, mode(), virtual_address);
}
X[xd] = sext(read_memory_aligned(16, virtual_address, $encoding, 1'b1, 1'b1), 16);