uint64_t RISCVMCCodeEmitter::getBinaryCodeForInstr(const MCInst &MI,
SmallVectorImpl<MCFixup> &Fixups,
const MCSubtargetInfo &STI) const { … }
#ifdef GET_OPERAND_BIT_OFFSET
#undef GET_OPERAND_BIT_OFFSET
uint32_t RISCVMCCodeEmitter::getOperandBitOffset(const MCInst &MI,
unsigned OpNum,
const MCSubtargetInfo &STI) const {
switch (MI.getOpcode()) {
case RISCV::C_EBREAK:
case RISCV::C_MOP1:
case RISCV::C_MOP3:
case RISCV::C_MOP5:
case RISCV::C_MOP7:
case RISCV::C_MOP9:
case RISCV::C_MOP11:
case RISCV::C_MOP13:
case RISCV::C_MOP15:
case RISCV::C_NOP:
case RISCV::C_SSPOPCHK:
case RISCV::C_SSPUSH:
case RISCV::C_UNIMP:
case RISCV::DRET:
case RISCV::EBREAK:
case RISCV::ECALL:
case RISCV::FENCE_I:
case RISCV::FENCE_TSO:
case RISCV::MRET:
case RISCV::SCTRCLR:
case RISCV::SFENCE_INVAL_IR:
case RISCV::SFENCE_W_INVAL:
case RISCV::SF_CEASE:
case RISCV::SRET:
case RISCV::TH_DCACHE_CALL:
case RISCV::TH_DCACHE_CIALL:
case RISCV::TH_DCACHE_IALL:
case RISCV::TH_ICACHE_IALL:
case RISCV::TH_ICACHE_IALLS:
case RISCV::TH_L2CACHE_CALL:
case RISCV::TH_L2CACHE_CIALL:
case RISCV::TH_L2CACHE_IALL:
case RISCV::TH_SYNC:
case RISCV::TH_SYNC_I:
case RISCV::TH_SYNC_IS:
case RISCV::TH_SYNC_S:
case RISCV::UNIMP:
case RISCV::WFI:
case RISCV::WRS_NTO:
case RISCV::WRS_STO: {
break;
}
case RISCV::C_NOP_HINT: {
switch (OpNum) {
case 0:
return 2;
}
break;
}
case RISCV::CM_JALT:
case RISCV::CM_JT: {
switch (OpNum) {
case 0:
return 2;
}
break;
}
case RISCV::C_J:
case RISCV::C_JAL: {
switch (OpNum) {
case 0:
return 2;
}
break;
}
case RISCV::InsnS: {
switch (OpNum) {
case 0:
return 0;
case 1:
return 12;
case 4:
return 7;
case 2:
return 20;
case 3:
return 15;
}
break;
}
case RISCV::InsnB: {
switch (OpNum) {
case 0:
return 0;
case 1:
return 12;
case 4:
return 7;
case 3:
return 20;
case 2:
return 15;
}
break;
}
case RISCV::InsnCJ: {
switch (OpNum) {
case 0:
return 0;
case 1:
return 13;
case 2:
return 2;
}
break;
}
case RISCV::InsnCSS: {
switch (OpNum) {
case 0:
return 0;
case 1:
return 13;
case 3:
return 7;
case 2:
return 2;
}
break;
}
case RISCV::InsnCB: {
switch (OpNum) {
case 0:
return 0;
case 1:
return 13;
case 3:
return 2;
case 2:
return 7;
}
break;
}
case RISCV::InsnCS: {
switch (OpNum) {
case 0:
return 0;
case 1:
return 13;
case 4:
return 5;
case 2:
return 2;
case 3:
return 7;
}
break;
}
case RISCV::FENCE: {
switch (OpNum) {
case 0:
return 24;
case 1:
return 20;
}
break;
}
case RISCV::C_FLD:
case RISCV::C_FLW:
case RISCV::C_LBU:
case RISCV::C_LD:
case RISCV::C_LH:
case RISCV::C_LHU:
case RISCV::C_LH_INX:
case RISCV::C_LW:
case RISCV::C_LW_INX:
case RISCV::QK_C_LBU:
case RISCV::QK_C_LHU: {
switch (OpNum) {
case 0:
return 2;
case 1:
return 7;
case 2:
return 5;
}
break;
}
case RISCV::CV_LBU_rr:
case RISCV::CV_LB_rr:
case RISCV::CV_LHU_rr:
case RISCV::CV_LH_rr:
case RISCV::CV_LW_rr: {
switch (OpNum) {
case 0:
return 7;
case 1:
return 15;
}
break;
}
case RISCV::FLI_D:
case RISCV::FLI_H:
case RISCV::FLI_S: {
switch (OpNum) {
case 0:
return 7;
case 1:
return 15;
}
break;
}
case RISCV::SSRDP: {
switch (OpNum) {
case 0:
return 7;
}
break;
}
case RISCV::QK_C_LBUSP:
case RISCV::QK_C_LHUSP:
case RISCV::QK_C_SBSP:
case RISCV::QK_C_SHSP: {
switch (OpNum) {
case 0:
return 2;
case 2:
return 7;
}
break;
}
case RISCV::CM_POP:
case RISCV::CM_POPRET:
case RISCV::CM_POPRETZ:
case RISCV::CM_PUSH: {
switch (OpNum) {
case 0:
return 4;
case 1:
return 2;
}
break;
}
case RISCV::CBO_CLEAN:
case RISCV::CBO_FLUSH:
case RISCV::CBO_INVAL:
case RISCV::CBO_ZERO:
case RISCV::SF_CDISCARD_D_L1:
case RISCV::SF_CFLUSH_D_L1:
case RISCV::SSPOPCHK:
case RISCV::TH_DCACHE_CIPA:
case RISCV::TH_DCACHE_CISW:
case RISCV::TH_DCACHE_CIVA:
case RISCV::TH_DCACHE_CPA:
case RISCV::TH_DCACHE_CPAL1:
case RISCV::TH_DCACHE_CSW:
case RISCV::TH_DCACHE_CVA:
case RISCV::TH_DCACHE_CVAL1:
case RISCV::TH_DCACHE_IPA:
case RISCV::TH_DCACHE_ISW:
case RISCV::TH_DCACHE_IVA:
case RISCV::TH_ICACHE_IPA:
case RISCV::TH_ICACHE_IVA: {
switch (OpNum) {
case 0:
return 15;
}
break;
}
case RISCV::C_MV: {
switch (OpNum) {
case 0:
return 7;
case 1:
return 2;
}
break;
}
case RISCV::C_JALR:
case RISCV::C_JR: {
switch (OpNum) {
case 0:
return 7;
}
break;
}
case RISCV::CV_SB_rr:
case RISCV::CV_SH_rr:
case RISCV::CV_SW_rr: {
switch (OpNum) {
case 0:
return 20;
case 1:
return 7;
}
break;
}
case RISCV::HSV_B:
case RISCV::HSV_D:
case RISCV::HSV_H:
case RISCV::HSV_W: {
switch (OpNum) {
case 0:
return 20;
case 1:
return 15;
}
break;
}
case RISCV::SSPUSH: {
switch (OpNum) {
case 0:
return 20;
}
break;
}
case RISCV::C_FSD:
case RISCV::C_FSW:
case RISCV::C_SB:
case RISCV::C_SD:
case RISCV::C_SH:
case RISCV::C_SH_INX:
case RISCV::C_SW:
case RISCV::C_SW_INX:
case RISCV::QK_C_SB:
case RISCV::QK_C_SH: {
switch (OpNum) {
case 0:
return 2;
case 1:
return 7;
case 2:
return 5;
}
break;
}
case RISCV::Insn16:
case RISCV::Insn32:
case RISCV::Insn48:
case RISCV::Insn64: {
switch (OpNum) {
case 0:
return 0;
}
break;
}
case RISCV::VID_V: {
switch (OpNum) {
case 0:
return 7;
case 1:
return 25;
}
break;
}
case RISCV::VMV_V_I: {
switch (OpNum) {
case 1:
return 15;
case 0:
return 7;
}
break;
}
case RISCV::C_LI:
case RISCV::C_LUI: {
switch (OpNum) {
case 1:
return 2;
case 0:
return 7;
}
break;
}
case RISCV::C_BEQZ:
case RISCV::C_BNEZ: {
switch (OpNum) {
case 1:
return 2;
case 0:
return 7;
}
break;
}
case RISCV::C_LI_HINT:
case RISCV::C_LUI_HINT: {
switch (OpNum) {
case 1:
return 2;
}
break;
}
case RISCV::PREFETCH_I:
case RISCV::PREFETCH_R:
case RISCV::PREFETCH_W: {
switch (OpNum) {
case 1:
return 25;
case 0:
return 15;
}
break;
}
case RISCV::AUIPC:
case RISCV::JAL:
case RISCV::LUI: {
switch (OpNum) {
case 1:
return 12;
case 0:
return 7;
}
break;
}
case RISCV::InsnI:
case RISCV::InsnI_Mem: {
switch (OpNum) {
case 1:
return 0;
case 2:
return 12;
case 4:
return 20;
case 3:
return 15;
case 0:
return 7;
}
break;
}
case RISCV::InsnCI: {
switch (OpNum) {
case 1:
return 0;
case 2:
return 13;
case 3:
return 2;
case 0:
return 7;
}
break;
}
case RISCV::InsnCIW: {
switch (OpNum) {
case 1:
return 0;
case 2:
return 13;
case 3:
return 5;
case 0:
return 2;
}
break;
}
case RISCV::InsnCL: {
switch (OpNum) {
case 1:
return 0;
case 2:
return 13;
case 4:
return 5;
case 0:
return 2;
case 3:
return 7;
}
break;
}
case RISCV::InsnCR: {
switch (OpNum) {
case 1:
return 0;
case 2:
return 12;
case 3:
return 2;
case 0:
return 7;
}
break;
}
case RISCV::InsnCA: {
switch (OpNum) {
case 1:
return 0;
case 2:
return 10;
case 3:
return 5;
case 0:
return 7;
case 4:
return 2;
}
break;
}
case RISCV::InsnJ:
case RISCV::InsnU: {
switch (OpNum) {
case 1:
return 0;
case 2:
return 12;
case 0:
return 7;
}
break;
}
case RISCV::InsnR4: {
switch (OpNum) {
case 1:
return 0;
case 3:
return 25;
case 2:
return 12;
case 6:
return 27;
case 5:
return 20;
case 4:
return 15;
case 0:
return 7;
}
break;
}
case RISCV::InsnR: {
switch (OpNum) {
case 1:
return 0;
case 3:
return 25;
case 2:
return 12;
case 5:
return 20;
case 4:
return 15;
case 0:
return 7;
}
break;
}
case RISCV::C_ADDI_HINT_IMM_ZERO:
case RISCV::C_NOT:
case RISCV::C_SEXT_B:
case RISCV::C_SEXT_H:
case RISCV::C_SLLI64_HINT:
case RISCV::C_SRAI64_HINT:
case RISCV::C_SRLI64_HINT:
case RISCV::C_ZEXT_B:
case RISCV::C_ZEXT_H:
case RISCV::C_ZEXT_W: {
switch (OpNum) {
case 1:
return 7;
}
break;
}
case RISCV::ADDI:
case RISCV::ADDIW:
case RISCV::ANDI:
case RISCV::CV_ELW:
case RISCV::FLD:
case RISCV::FLH:
case RISCV::FLW:
case RISCV::JALR:
case RISCV::LB:
case RISCV::LBU:
case RISCV::LD:
case RISCV::LH:
case RISCV::LHU:
case RISCV::LH_INX:
case RISCV::LW:
case RISCV::LWU:
case RISCV::LW_INX:
case RISCV::ORI:
case RISCV::SLTI:
case RISCV::SLTIU:
case RISCV::XORI: {
switch (OpNum) {
case 1:
return 15;
case 0:
return 7;
case 2:
return 20;
}
break;
}
case RISCV::CV_CLIP:
case RISCV::CV_CLIPU: {
switch (OpNum) {
case 1:
return 15;
case 0:
return 7;
case 2:
return 20;
}
break;
}
case RISCV::CV_ADD_SCI_B:
case RISCV::CV_ADD_SCI_H:
case RISCV::CV_AND_SCI_B:
case RISCV::CV_AND_SCI_H:
case RISCV::CV_AVGU_SCI_B:
case RISCV::CV_AVGU_SCI_H:
case RISCV::CV_AVG_SCI_B:
case RISCV::CV_AVG_SCI_H:
case RISCV::CV_CMPEQ_SCI_B:
case RISCV::CV_CMPEQ_SCI_H:
case RISCV::CV_CMPGEU_SCI_B:
case RISCV::CV_CMPGEU_SCI_H:
case RISCV::CV_CMPGE_SCI_B:
case RISCV::CV_CMPGE_SCI_H:
case RISCV::CV_CMPGTU_SCI_B:
case RISCV::CV_CMPGTU_SCI_H:
case RISCV::CV_CMPGT_SCI_B:
case RISCV::CV_CMPGT_SCI_H:
case RISCV::CV_CMPLEU_SCI_B:
case RISCV::CV_CMPLEU_SCI_H:
case RISCV::CV_CMPLE_SCI_B:
case RISCV::CV_CMPLE_SCI_H:
case RISCV::CV_CMPLTU_SCI_B:
case RISCV::CV_CMPLTU_SCI_H:
case RISCV::CV_CMPLT_SCI_B:
case RISCV::CV_CMPLT_SCI_H:
case RISCV::CV_CMPNE_SCI_B:
case RISCV::CV_CMPNE_SCI_H:
case RISCV::CV_DOTSP_SCI_B:
case RISCV::CV_DOTSP_SCI_H:
case RISCV::CV_DOTUP_SCI_B:
case RISCV::CV_DOTUP_SCI_H:
case RISCV::CV_DOTUSP_SCI_B:
case RISCV::CV_DOTUSP_SCI_H:
case RISCV::CV_EXTRACTU_B:
case RISCV::CV_EXTRACTU_H:
case RISCV::CV_EXTRACT_B:
case RISCV::CV_EXTRACT_H:
case RISCV::CV_MAXU_SCI_B:
case RISCV::CV_MAXU_SCI_H:
case RISCV::CV_MAX_SCI_B:
case RISCV::CV_MAX_SCI_H:
case RISCV::CV_MINU_SCI_B:
case RISCV::CV_MINU_SCI_H:
case RISCV::CV_MIN_SCI_B:
case RISCV::CV_MIN_SCI_H:
case RISCV::CV_OR_SCI_B:
case RISCV::CV_OR_SCI_H:
case RISCV::CV_SHUFFLEI0_SCI_B:
case RISCV::CV_SHUFFLEI1_SCI_B:
case RISCV::CV_SHUFFLEI2_SCI_B:
case RISCV::CV_SHUFFLEI3_SCI_B:
case RISCV::CV_SHUFFLE_SCI_H:
case RISCV::CV_SLL_SCI_B:
case RISCV::CV_SLL_SCI_H:
case RISCV::CV_SRA_SCI_B:
case RISCV::CV_SRA_SCI_H:
case RISCV::CV_SRL_SCI_B:
case RISCV::CV_SRL_SCI_H:
case RISCV::CV_SUB_SCI_B:
case RISCV::CV_SUB_SCI_H:
case RISCV::CV_XOR_SCI_B:
case RISCV::CV_XOR_SCI_H: {
switch (OpNum) {
case 1:
return 15;
case 0:
return 7;
case 2:
return 20;
}
break;
}
case RISCV::CV_BCLR:
case RISCV::CV_BITREV:
case RISCV::CV_BSET:
case RISCV::CV_EXTRACT:
case RISCV::CV_EXTRACTU: {
switch (OpNum) {
case 1:
return 15;
case 0:
return 7;
case 2:
return 25;
case 3:
return 20;
}
break;
}
case RISCV::TH_EXT:
case RISCV::TH_EXTU: {
switch (OpNum) {
case 1:
return 15;
case 0:
return 7;
case 2:
return 26;
case 3:
return 20;
}
break;
}
case RISCV::AES64KS1I: {
switch (OpNum) {
case 1:
return 15;
case 0:
return 7;
case 2:
return 20;
}
break;
}
case RISCV::BCLRI:
case RISCV::BEXTI:
case RISCV::BINVI:
case RISCV::BSETI:
case RISCV::RORI:
case RISCV::RORIW:
case RISCV::SLLI:
case RISCV::SLLIW:
case RISCV::SLLI_UW:
case RISCV::SRAI:
case RISCV::SRAIW:
case RISCV::SRLI:
case RISCV::SRLIW:
case RISCV::TH_SRRI:
case RISCV::TH_SRRIW:
case RISCV::TH_TST: {
switch (OpNum) {
case 1:
return 15;
case 0:
return 7;
case 2:
return 20;
}
break;
}
case RISCV::VSETVLI: {
switch (OpNum) {
case 1:
return 15;
case 0:
return 7;
case 2:
return 20;
}
break;
}
case RISCV::AES64IM:
case RISCV::BREV8:
case RISCV::CLZ:
case RISCV::CLZW:
case RISCV::CPOP:
case RISCV::CPOPW:
case RISCV::CTZ:
case RISCV::CTZW:
case RISCV::CV_ABS:
case RISCV::CV_ABS_B:
case RISCV::CV_ABS_H:
case RISCV::CV_CLB:
case RISCV::CV_CNT:
case RISCV::CV_CPLXCONJ:
case RISCV::CV_EXTBS:
case RISCV::CV_EXTBZ:
case RISCV::CV_EXTHS:
case RISCV::CV_EXTHZ:
case RISCV::CV_FF1:
case RISCV::CV_FL1:
case RISCV::FCLASS_D:
case RISCV::FCLASS_D_IN32X:
case RISCV::FCLASS_D_INX:
case RISCV::FCLASS_H:
case RISCV::FCLASS_H_INX:
case RISCV::FCLASS_S:
case RISCV::FCLASS_S_INX:
case RISCV::FMVH_X_D:
case RISCV::FMV_D_X:
case RISCV::FMV_H_X:
case RISCV::FMV_W_X:
case RISCV::FMV_X_D:
case RISCV::FMV_X_H:
case RISCV::FMV_X_W:
case RISCV::FMV_X_W_FPR64:
case RISCV::HLVX_HU:
case RISCV::HLVX_WU:
case RISCV::HLV_B:
case RISCV::HLV_BU:
case RISCV::HLV_D:
case RISCV::HLV_H:
case RISCV::HLV_HU:
case RISCV::HLV_W:
case RISCV::HLV_WU:
case RISCV::LB_AQ:
case RISCV::LB_AQ_RL:
case RISCV::LD_AQ:
case RISCV::LD_AQ_RL:
case RISCV::LH_AQ:
case RISCV::LH_AQ_RL:
case RISCV::LR_D:
case RISCV::LR_D_AQ:
case RISCV::LR_D_AQ_RL:
case RISCV::LR_D_RL:
case RISCV::LR_W:
case RISCV::LR_W_AQ:
case RISCV::LR_W_AQ_RL:
case RISCV::LR_W_RL:
case RISCV::LW_AQ:
case RISCV::LW_AQ_RL:
case RISCV::MOPR0:
case RISCV::MOPR1:
case RISCV::MOPR2:
case RISCV::MOPR3:
case RISCV::MOPR4:
case RISCV::MOPR5:
case RISCV::MOPR6:
case RISCV::MOPR7:
case RISCV::MOPR8:
case RISCV::MOPR9:
case RISCV::MOPR10:
case RISCV::MOPR11:
case RISCV::MOPR12:
case RISCV::MOPR13:
case RISCV::MOPR14:
case RISCV::MOPR15:
case RISCV::MOPR16:
case RISCV::MOPR17:
case RISCV::MOPR18:
case RISCV::MOPR19:
case RISCV::MOPR20:
case RISCV::MOPR21:
case RISCV::MOPR22:
case RISCV::MOPR23:
case RISCV::MOPR24:
case RISCV::MOPR25:
case RISCV::MOPR26:
case RISCV::MOPR27:
case RISCV::MOPR28:
case#endif