Does AMOMINU.D place the new memory result in rd?
No. AMOMINU.D places the old 64-bit memory value before the operation in rd; the result of unsigned min(oldDoubleword, rs2Doubleword) is written back to memory.
RV64 atomic unsigned-minimum 64-bit doubleword: rd returns the old memory value, while memory receives unsigned min(old, rs2)
The following semantics assume the target region supports this AMO width and operation and the access succeeds. AMOMINU.D performs an atomic read-modify-write on the 64-bit doubleword addressed by rs1: it first reads the old memory doubleword into rd, then computes unsigned min(oldDoubleword, rs2Doubleword) using unsigned minimum semantics and writes the 64-bit result back to the same address. The operation uses an unsigned 64-bit comparison; it is not a per-bit logical operation. aq/rl add ordering only in the accessed memory or I/O address domain and do not change the data result; ordering across both domains still needs FENCE. rs2 uses its pre-execution value; rd=x0 discards only the old-value register writeback, while the memory operation still occurs.
Shows A / Zaamo doubleword atomic field decode, aq/rl ordering bits, a memory read, and RMW state update.
A / Zaamo-extension doubleword atomic instructions use a 32-bit encoding; the animation starts by splitting the fields.
AMOMINU.D selects the memory writeback doubleword using an unsigned 64-bit comparison; this is not a per-bit logical operation.
Assumes the region supports this AMO and the access succeeds. Shows comparison, old-value return, memory update and aq/rl ordering in the accessed domain. Steps are a teaching sequence; access faults, CPU cache coherence, pipelines and timing are not modeled.
AMOMINU.D is an RV64 64-bit AMO.D read-modify-write instruction. On successful access with rd≠x0, rd returns the old doubleword before the operation; only the result of unsigned min(oldDoubleword, rs2Doubleword) is written back to memory, so keep old-value return separate from memory update.
Successful 64-bit access example: a2=0x1000, old memory=5, a1=3; amominu.d a0, a1, (a2) returns a0=5 and updates memory to 3. The address is naturally aligned and the region supports this AMO.
Successful 64-bit access example: a2=0x1000, old memory=5, a1=3; amominu.d a0, a1, (a2) returns a0=5 and updates memory to 3. The address is naturally aligned and the region supports this AMO.
Successful 64-bit access example: a2=0x1000, old memory=5, a1=3; amominu.d a0, a1, (a2) returns a0=5 and updates memory to 3. The address is naturally aligned and the region supports this AMO.
No. AMOMINU.D places the old 64-bit memory value before the operation in rd; the result of unsigned min(oldDoubleword, rs2Doubleword) is written back to memory.
No. aq/rl only affect memory-ordering constraints; they do not change this AMO.D instruction's 64-bit data result.