c.addiw
Add a sign-extended non-zero immediate
This instruction is defined by:
Synopsis
C.ADDIW is an RV64C/RV128C-only instruction that performs the same computation as C.ADDI but produces a 32-bit result, then sign-extends result to 64 bits.
C.ADDIW expands into addiw rd, rd, imm
.
The immediate can be zero for C.ADDIW, where this corresponds to sext.w rd
.
C.ADDIW is only valid when rd ≠ x0; the code points with rd=x0 are reserved.
Execution
-
Pruned, XLEN == 64
-
Original
if ((%%LINK%csr_field;misa.C;CSR[misa].C%% == 1'b0)) {
%%LINK%func;raise;raise%%(ExceptionCode::IllegalInstruction, %%LINK%func;mode;mode%%(), $encoding);
}
X[rd] = %%LINK%func;sext;sext%%((X[rd] + imm), 32);
if (%%LINK%func;implemented?;implemented?%%(ExtensionName::C) && (%%LINK%csr_field;misa.C;CSR[misa].C%% == 1'b0)) {
%%LINK%func;raise;raise%%(ExceptionCode::IllegalInstruction, %%LINK%func;mode;mode%%(), $encoding);
}
X[rd] = %%LINK%func;sext;sext%%((X[rd] + imm), 32);