Does AMOXOR.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.
AMOXOR.H atomically reads the old halfword, sign-extends it into rd, and bitwise-XORs the old halfword with rs2[15:0] and writes the result.
Syntax is rd, rs2, (rs1). The three fields select x0–x31 or ABI names, with no offset immediate or rs3.
32-bit encoding: funct5=00100, funct3=001, opcode=0101111; aq is bit26 and rl is bit25.
RV32/RV64 Zabha (requires Zaamo): rd receives sign-extended old 16-bit memory; memory receives old memory XOR the low 16 rs2 bits.
The region must support this AMO width and operation. Use two-byte alignment, or a PMA with all accessed bytes in one misaligned atomicity granule; otherwise address-misaligned or access-fault is raised.
Sources use pre-execution values; rd=x0 discards only register writeback and memory still undergoes read-modify-write. aq/rl orders only the accessed memory/I/O domain; suffixes are .aq, .rl and .aqrl.
AMOXOR.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 old_halfword XOR rs2[15:0]; 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.
Assumes Zabha and Zaamo at the selected XLEN, successful fetch, a region supporting this width and operation, and a successful access. A misaligned halfword requires the stated PMA condition. Sources use pre-execution values; aq/rl orders only the accessed domain. Steps are a teaching sequence.
AMOXOR.H is a Zabha halfword AMO: it atomically reads the old 16-bit memory value, sign-extends that old value into rd, and bitwise-XORs the old halfword with rs2[15:0] and writes the result.
RV32/RV64 Zabha+Zaamo, a1=0x1000, old memory=5 and a2=3; assuming a supporting region and successful access, a0 receives old value 5 and the 16-bit memory operand becomes 6.
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.