How is add.uw different from addw?
add.uw zero-extends rs1[31:0] and performs an XLEN add with rs2; addw performs a 32-bit add and sign-extends bit 31 to XLEN.
Add unsigned word: zero-extend lower word of rs1 and add to rs2 (RV64)
rd and rs1 select x0–x31; sources are read before writeback, and x0 writes are discarded.
Zero-extend rs1[31:0]; rs2 supplies all 64 bits.
Requires RV64 Zba; keep the low 64 sum bits, without word-result sign extension.
RV64 Zba: zero-extend rs1[31:0], add rs2 at 64-bit width, and write rd.
Starts with machine-code field decoding, then shows operand reads, instruction-specific execution, and ISA-visible state update.
This example uses fixed initial register values and PC=0x2000; instruction fetch succeeds, with no asynchronous interrupt or extra extension checks. Exception branches stop ordinary commit; post-trap PC and handler state are EEI-dependent.
The machine code is split by the current instruction format; the animation starts from encoding/decode.
This animation shows ISA-visible decode and state changes, not any specific CPU pipeline, cache, prediction, or timing implementation.
add.uw is commonly used for RV64 address generation: zero-extend rs1[31:0], then add rs2.
RV64 Zba, x11=0xffffffff80000000 and x12=1: zero-extend the low word of x11, then add; x10=0x0000000080000001.
RV64 Zba, x11=0xffffffff80000000 and x12=1: zero-extend the low word of x11, then add; x10=0x0000000080000001.
add.uw zero-extends rs1[31:0] and performs an XLEN add with rs2; addw performs a 32-bit add and sign-extends bit 31 to XLEN.