sd.rl

Store Doubleword Release

This instruction is defined by:

Encoding

svg

Synopsis

Store the lowest 64 bits of register xs2 to the address in xs1.

This instruction has release semantics, which means that no previous memory operations (in program order) from this hart can be observed to occur after this store completes. Release semantics provide ordering guarantees useful for synchronization, such as writing a lock variable to release it.

The address must be naturally aligned (8-byte aligned); if not, an address-misaligned or access-fault exception will be raised.

Access

M HS U VS VU

Always

Always

Always

Always

Always

Decode Variables

Bits<5> xs2 = $encoding[24:20];
Bits<5> xs1 = $encoding[19:15];

Execution

  • Pruned, XLEN == 64

  • Original

XReg virtual_address = X[xs1];
if (!is_naturally_aligned(64, virtual_address)) {
  raise(ExceptionCode::StoreAmoAddressMisaligned, mode(), virtual_address);
}
write_memory_aligned(64, virtual_address, X[xs2], $encoding, 1'b0, 1'b1);
XReg virtual_address = X[xs1];
if (!is_naturally_aligned(64, virtual_address)) {
  raise(ExceptionCode::StoreAmoAddressMisaligned, mode(), virtual_address);
}
write_memory_aligned(64, virtual_address, X[xs2], $encoding, 1'b0, 1'b1);

Exceptions

This instruction may result in the following synchronous exceptions:

  • LoadAccessFault

  • StoreAmoAccessFault

  • StoreAmoAddressMisaligned

  • StoreAmoPageFault