12 DCHECK(rd != zero_reg && imm6 != 0);
16#ifdef V8_TARGET_ARCH_RISCV64
17void AssemblerRISCVC::c_addiw(
Register rd, int8_t imm6) {
24 DCHECK(is_int10(imm10) && (imm10 & 0xf) == 0);
25 uint8_t uimm6 = ((imm10 & 0x200) >> 4) | (imm10 & 0x10) |
26 ((imm10 & 0x40) >> 3) | ((imm10 & 0x180) >> 6) |
27 ((imm10 & 0x20) >> 5);
32 DCHECK(is_uint10(uimm10) && (uimm10 != 0));
33 uint8_t uimm8 = ((uimm10 & 0x4) >> 1) | ((uimm10 & 0x8) >> 3) |
34 ((uimm10 & 0x30) << 2) | ((uimm10 & 0x3c0) >> 4);
44 DCHECK(rd != zero_reg && rd != sp && imm6 != 0);
49 DCHECK(rd != zero_reg && shamt6 != 0);
54 DCHECK(is_uint9(uimm9) && (uimm9 & 0x7) == 0);
55 uint8_t uimm6 = (uimm9 & 0x38) | ((uimm9 & 0x1c0) >> 6);
59#ifdef V8_TARGET_ARCH_RISCV64
60void AssemblerRISCVC::c_ldsp(
Register rd, uint16_t uimm9) {
61 DCHECK(rd != zero_reg && is_uint9(uimm9) && (uimm9 & 0x7) == 0);
62 uint8_t uimm6 = (uimm9 & 0x38) | ((uimm9 & 0x1c0) >> 6);
68 DCHECK(rd != zero_reg && is_uint8(uimm8) && (uimm8 & 0x3) == 0);
69 uint8_t uimm6 = (uimm8 & 0x3c) | ((uimm8 & 0xc0) >> 6);
80 DCHECK(rd != zero_reg && rs2 != zero_reg);
93 DCHECK(rd != zero_reg && rs2 != zero_reg);
100 ((rs2.
code() & 0b11000) == 0b01000));
106 ((rs2.
code() & 0b11000) == 0b01000));
112 ((rs2.
code() & 0b11000) == 0b01000));
118 ((rs2.
code() & 0b11000) == 0b01000));
122#ifdef V8_TARGET_ARCH_RISCV64
125 ((rs2.
code() & 0b11000) == 0b01000));
129void AssemblerRISCVC::c_addw(Register rd, Register rs2) {
130 DCHECK(((rd.code() & 0b11000) == 0b01000) &&
131 ((rs2.code() & 0b11000) == 0b01000));
137 DCHECK(is_uint8(uimm8) && (uimm8 & 0x3) == 0);
138 uint8_t uimm6 = (uimm8 & 0x3c) | ((uimm8 & 0xc0) >> 6);
142#ifdef V8_TARGET_ARCH_RISCV64
143void AssemblerRISCVC::c_sdsp(
Register rs2, uint16_t uimm9) {
144 DCHECK(is_uint9(uimm9) && (uimm9 & 0x7) == 0);
145 uint8_t uimm6 = (uimm9 & 0x38) | ((uimm9 & 0x1c0) >> 6);
151 DCHECK(is_uint9(uimm9) && (uimm9 & 0x7) == 0);
152 uint8_t uimm6 = (uimm9 & 0x38) | ((uimm9 & 0x1c0) >> 6);
160 ((rs1.
code() & 0b11000) == 0b01000) && is_uint7(uimm7) &&
161 ((uimm7 & 0x3) == 0));
163 ((uimm7 & 0x4) >> 1) | ((uimm7 & 0x40) >> 6) | ((uimm7 & 0x38) >> 1);
167#ifdef V8_TARGET_ARCH_RISCV64
170 ((rs1.
code() & 0b11000) == 0b01000) && is_uint8(uimm8) &&
171 ((uimm8 & 0x7) == 0));
172 uint8_t uimm5 = ((uimm8 & 0x38) >> 1) | ((uimm8 & 0xc0) >> 6);
179 ((rs1.
code() & 0b11000) == 0b01000) && is_uint8(uimm8) &&
180 ((uimm8 & 0x7) == 0));
181 uint8_t uimm5 = ((uimm8 & 0x38) >> 1) | ((uimm8 & 0xc0) >> 6);
189 ((rs1.
code() & 0b11000) == 0b01000) && is_uint7(uimm7) &&
190 ((uimm7 & 0x3) == 0));
192 ((uimm7 & 0x4) >> 1) | ((uimm7 & 0x40) >> 6) | ((uimm7 & 0x38) >> 1);
196#ifdef V8_TARGET_ARCH_RISCV64
199 ((rs1.
code() & 0b11000) == 0b01000) && is_uint8(uimm8) &&
200 ((uimm8 & 0x7) == 0));
201 uint8_t uimm5 = ((uimm8 & 0x38) >> 1) | ((uimm8 & 0xc0) >> 6);
208 ((rs1.
code() & 0b11000) == 0b01000) && is_uint8(uimm8) &&
209 ((uimm8 & 0x7) == 0));
210 uint8_t uimm5 = ((uimm8 & 0x38) >> 1) | ((uimm8 & 0xc0) >> 6);
218 int16_t uimm11 = ((imm12 & 0x800) >> 1) | ((imm12 & 0x400) >> 4) |
219 ((imm12 & 0x300) >> 1) | ((imm12 & 0x80) >> 3) |
220 ((imm12 & 0x40) >> 1) | ((imm12 & 0x20) >> 5) |
221 ((imm12 & 0x10) << 5) | (imm12 & 0xe);
229 DCHECK(((rs1.
code() & 0b11000) == 0b01000) && is_int9(imm9));
230 uint8_t uimm8 = ((imm9 & 0x20) >> 5) | ((imm9 & 0x6)) | ((imm9 & 0xc0) >> 3) |
231 ((imm9 & 0x18) << 2) | ((imm9 & 0x100) >> 1);
236 DCHECK(((rs1.
code() & 0b11000) == 0b01000) && is_int9(imm9));
237 uint8_t uimm8 = ((imm9 & 0x20) >> 5) | ((imm9 & 0x6)) | ((imm9 & 0xc0) >> 3) |
238 ((imm9 & 0x18) << 2) | ((imm9 & 0x100) >> 1);
243 DCHECK(((rs1.
code() & 0b11000) == 0b01000) && is_int6(shamt6));
248 DCHECK(((rs1.
code() & 0b11000) == 0b01000) && is_int6(shamt6));
253 DCHECK(((rs1.
code() & 0b11000) == 0b01000) && is_int6(imm6));
267 int32_t imm12 = ((
instr & 0x4) << 3) | ((
instr & 0x38) >> 2) |
268 ((
instr & 0x40) << 1) | ((
instr & 0x80) >> 1) |
269 ((
instr & 0x100) << 2) | ((
instr & 0x600) >> 1) |
270 ((
instr & 0x800) >> 7) | ((
instr & 0x1000) >> 1);
271 imm12 = imm12 << 20 >> 20;
void c_fsdsp(FPURegister rs2, uint16_t uimm9)
void c_li(Register rd, int8_t imm6)
void c_srli(Register rs1, int8_t shamt6)
static bool IsCBranch(Instr instr)
void c_addi4spn(Register rd, int16_t uimm10)
void c_add(Register rd, Register rs2)
void c_sub(Register rd, Register rs2)
void c_xor(Register rd, Register rs2)
void c_mv(Register rd, Register rs2)
void c_fld(FPURegister rd, Register rs1, uint16_t uimm8)
void c_or(Register rd, Register rs2)
void c_fsd(FPURegister rs2, Register rs1, uint16_t uimm8)
void c_lw(Register rd, Register rs1, uint16_t uimm7)
void c_jalr(Register rs1)
void c_and(Register rd, Register rs2)
void c_swsp(Register rs2, uint16_t uimm8)
void c_slli(Register rd, uint8_t shamt6)
void c_andi(Register rs1, int8_t imm6)
void c_bnez(Register rs1, int16_t imm9)
int CJumpOffset(Instr instr)
void c_lwsp(Register rd, uint16_t uimm8)
void c_beqz(Register rs1, int16_t imm9)
static bool IsCJal(Instr instr)
void c_srai(Register rs1, int8_t shamt6)
void c_lui(Register rd, int8_t imm6)
void c_addi16sp(int16_t imm10)
void c_fldsp(FPURegister rd, uint16_t uimm9)
void c_sw(Register rs2, Register rs1, uint16_t uimm7)
void c_addi(Register rd, int8_t imm6)
void GenInstrCI(uint8_t funct3, BaseOpcode opcode, Register rd, int8_t imm6)
void GenInstrCR(uint8_t funct4, BaseOpcode opcode, Register rd, Register rs2)
void GenInstrCB(uint8_t funct3, BaseOpcode opcode, Register rs1, uint8_t uimm8)
void GenInstrCIU(uint8_t funct3, BaseOpcode opcode, Register rd, uint8_t uimm6)
void GenInstrCJ(uint8_t funct3, BaseOpcode opcode, uint16_t uint11)
void GenInstrCL(uint8_t funct3, BaseOpcode opcode, Register rd, Register rs1, uint8_t uimm5)
void GenInstrCBA(uint8_t funct3, uint8_t funct2, BaseOpcode opcode, Register rs1, int8_t imm6)
virtual void BlockTrampolinePoolFor(int instructions)=0
void GenInstrCA(uint8_t funct6, BaseOpcode opcode, Register rd, uint8_t funct, Register rs2)
void GenInstrCS(uint8_t funct3, BaseOpcode opcode, Register rs2, Register rs1, uint8_t uimm5)
void GenInstrCIW(uint8_t funct3, BaseOpcode opcode, Register rd, uint8_t uimm8)
void GenInstrCSS(uint8_t funct3, BaseOpcode opcode, FPURegister rs2, uint8_t uimm6)
constexpr int8_t code() const
constexpr Opcode RO_C_BEQZ
const uint32_t kRvcOpcodeMask
constexpr Opcode RO_C_BNEZ
#define DCHECK(condition)