pub enum Rv64ZcaInstruction<Reg> {
Show 34 variants
CAddi4spn {
rd: Reg,
nzuimm: u16,
},
CLw {
rd: Reg,
rs1: Reg,
uimm: u8,
},
CLd {
rd: Reg,
rs1: Reg,
uimm: u8,
},
CSw {
rs1: Reg,
rs2: Reg,
uimm: u8,
},
CSd {
rs1: Reg,
rs2: Reg,
uimm: u8,
},
CNop,
CAddi {
rd: Reg,
nzimm: i8,
},
CAddiw {
rd: Reg,
imm: i8,
},
CLi {
rd: Reg,
imm: i8,
},
CAddi16sp {
nzimm: i16,
},
CLui {
rd: Reg,
nzimm: i32,
},
CSrli {
rd: Reg,
shamt: u8,
},
CSrai {
rd: Reg,
shamt: u8,
},
CAndi {
rd: Reg,
imm: i8,
},
CSub {
rd: Reg,
rs2: Reg,
},
CXor {
rd: Reg,
rs2: Reg,
},
COr {
rd: Reg,
rs2: Reg,
},
CAnd {
rd: Reg,
rs2: Reg,
},
CSubw {
rd: Reg,
rs2: Reg,
},
CAddw {
rd: Reg,
rs2: Reg,
},
CJ {
imm: i16,
},
CBeqz {
rs1: Reg,
imm: i16,
},
CBnez {
rs1: Reg,
imm: i16,
},
CSlli {
rd: Reg,
shamt: u8,
},
CLwsp {
rd: Reg,
uimm: u8,
},
CLdsp {
rd: Reg,
uimm: u16,
},
CJr {
rs1: Reg,
},
CMv {
rd: Reg,
rs2: Reg,
},
CEbreak,
CJalr {
rs1: Reg,
},
CAdd {
rd: Reg,
rs2: Reg,
},
CSwsp {
rs2: Reg,
uimm: u8,
},
CSdsp {
rs2: Reg,
uimm: u16,
},
CUnimp,
}Expand description
RISC-V RV64 Zca compressed instruction set
Variants§
CAddi4spn
C.ADDI4SPN rd’ = sp + nzuimm (nzuimm ∈ 4..1020 step 4)
CLw
C.LW rd’ = sext(mem32[rs1’ + uimm])
CLd
C.LD rd’ = mem64[rs1’ + uimm]
CSw
C.SW mem32[rs1’ + uimm] = rs2’
CSd
C.SD mem64[rs1’ + uimm] = rs2’
CNop
C.NOP (ADDI x0, x0, 0 with rd==x0 and nzimm==0)
CAddi
C.ADDI rd += nzimm (rd != x0)
CAddiw
C.ADDIW rd = sext((rd[31:0] + imm)[31:0]) (rd != x0)
CLi
C.LI rd = sext(imm) (rd=x0 is a HINT)
CAddi16sp
C.ADDI16SP sp += nzimm*16 (nzimm != 0)
CLui
C.LUI rd = sext(nzimm << 12) (rd != x0, rd != x2, nzimm != 0)
CSrli
C.SRLI rd’ >>= shamt (logical right shift; shamt=0 with rd’=x0 is a HINT)
CSrai
C.SRAI rd’ >>= shamt (arithmetic right shift; shamt=0 with rd’=x0 is a HINT)
CAndi
C.ANDI rd’ &= sext(imm)
CSub
C.SUB rd’ -= rs2’
CXor
C.XOR rd’ ^= rs2’
COr
C.OR rd’ |= rs2’
CAnd
C.AND rd’ &= rs2’
CSubw
C.SUBW rd’ = sext((rd’[31:0] - rs2’[31:0])[31:0])
CAddw
C.ADDW rd’ = sext((rd’[31:0] + rs2’[31:0])[31:0])
CJ
C.J pc += sext(imm)
CBeqz
C.BEQZ if rs1’ == 0: pc += sext(imm)
CBnez
C.BNEZ if rs1’ != 0: pc += sext(imm)
CSlli
C.SLLI rd <<= shamt (rd=x0 or shamt=0 is a HINT)
CLwsp
C.LWSP rd = sext(mem32[sp + uimm]) (rd != x0)
CLdsp
C.LDSP rd = mem64[sp + uimm] (rd != x0)
CJr
C.JR pc = rs1 (rs1 != x0)
Fields
rs1: RegCMv
C.MV rd = rs2 (rs2 != x0; rd=x0 is a HINT)
CEbreak
C.EBREAK
CJalr
C.JALR ra = pc+2; pc = rs1 (rs1 != x0)
Fields
rs1: RegCAdd
C.ADD rd += rs2 (rs2 != x0; rd=x0 is a HINT)
CSwsp
C.SWSP mem32[sp + uimm] = rs2
CSdsp
C.SDSP mem64[sp + uimm] = rs2
CUnimp
Trait Implementations§
Source§impl<Reg: Clone> Clone for Rv64ZcaInstruction<Reg>
impl<Reg: Clone> Clone for Rv64ZcaInstruction<Reg>
Source§fn clone(&self) -> Rv64ZcaInstruction<Reg>
fn clone(&self) -> Rv64ZcaInstruction<Reg>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more