What happens with a shift amount of zero?
Keep rs1[31:0], then sign-extend bit 31 to 64 bits. For rs1=0x1234567880000000 and rd!=x0, the result is 0xffffffff80000000.
Shift lower 32 bits of rs1 right arithmetically by rs2[4:0], sign-extend 32-bit result to 64 bits
SRAW (R-type, opcode=0111011, funct7=0100000, funct3=101) performs an arithmetic right shift on the lower 32 bits of rs1 (original sign bit copied into vacated upper bits) by the shift amount in rs2[4:0]. The 32-bit result is sign-extended to 64 bits.
RV64I; XLEN=64; 32-bit result → sign extension
sraw rd, rs1, rs2Assume successful instruction fetch, no asynchronous interrupt or extra extension checks; one initial value per register.
This example fixes IALIGN=32 and a 32-bit instruction; PC must be 4-byte aligned.
0x40C5D53BDecode the current instruction fields and read sources before writeback; no result has been committed.
These are teaching steps for architectural effects, not processor pipeline stages or cycles.
SRAW is RV64I-only: ignore the upper 32 bits of rs1, apply a 32-bit arithmetic right shift by rs2[4:0], then sign-extend to 64 bits.
Understand this scenario with real code like «sraw x10, x11, x12 # RV64I: x11=0x1234567880000000, x12=33 -> x10=0xffffffffc0000000».
Keep rs1[31:0], then sign-extend bit 31 to 64 bits. For rs1=0x1234567880000000 and rd!=x0, the result is 0xffffffff80000000.
SRAW uses only rs2[4:0]; for example, rs2=33 shifts by 1.