Does AMOSWAP.H zero-extend rd?
No. Zabha AMO.H sign-extends the old value into rd; the U in AMOMINU.H/AMOMAXU.H only means unsigned comparison.
AMOSWAP.H atomically reads the old halfword, sign-extends it into rd, and writes the low 16 bits of rs2 to the target halfword.
AMOSWAP.H is a Zabha (and therefore Zaamo) halfword AMO. It atomically reads the old 16-bit value at rs1, sign-extends it into rd, then writes rs2[15:0] there; aq/rl annotate memory ordering.
Shows Zabha (requires Zaamo) halfword atomic field decode, aq/rl ordering bits, a memory read, and RMW state update.
Zabha depends on Zaamo; Zabha-extension halfword atomic instructions use a 32-bit encoding; the animation starts by splitting the fields.
This animation shows ISA-visible atomic read-modify-write, compare-and-swap, LR/SC reservation state, and ordering bits, not any specific CPU cache-coherence implementation, pipeline, or timing.
AMOSWAP.H is an L5 Zabha halfword AMO: it atomically reads the old 16-bit memory value, sign-extends that old value into rd, and writes the low 16 bits of rs2 to the target halfword.
Understand this scenario with real code like «amoswap.h a0, a2, (a1)».
No. Zabha AMO.H sign-extends the old value into rd; the U in AMOMINU.H/AMOMAXU.H only means unsigned comparison.
Architecturally it modifies only the target 16-bit halfword and computes the new memory value at halfword width; neighboring bytes are not part of that data result.