in js/src/jit/loong64/Simulator-loong64.cpp [263:641]
SimInstruction::Type SimInstruction::instructionType() const {
SimInstruction::Type kType = kUnsupported;
// Check for kOp6Type
switch (bits(31, 26) << 26) {
case op_beqz:
case op_bnez:
case op_bcz:
case op_jirl:
case op_b:
case op_bl:
case op_beq:
case op_bne:
case op_blt:
case op_bge:
case op_bltu:
case op_bgeu:
case op_addu16i_d:
kType = kOp6Type;
break;
default:
kType = kUnsupported;
}
if (kType == kUnsupported) {
// Check for kOp7Type
switch (bits(31, 25) << 25) {
case op_lu12i_w:
case op_lu32i_d:
case op_pcaddi:
case op_pcalau12i:
case op_pcaddu12i:
case op_pcaddu18i:
kType = kOp7Type;
break;
default:
kType = kUnsupported;
}
}
if (kType == kUnsupported) {
// Check for kOp8Type
switch (bits(31, 24) << 24) {
case op_ll_w:
case op_sc_w:
case op_ll_d:
case op_sc_d:
case op_ldptr_w:
case op_stptr_w:
case op_ldptr_d:
case op_stptr_d:
kType = kOp8Type;
break;
default:
kType = kUnsupported;
}
}
if (kType == kUnsupported) {
// Check for kOp10Type
switch (bits(31, 22) << 22) {
case op_bstrins_d:
case op_bstrpick_d:
case op_slti:
case op_sltui:
case op_addi_w:
case op_addi_d:
case op_lu52i_d:
case op_andi:
case op_ori:
case op_xori:
case op_ld_b:
case op_ld_h:
case op_ld_w:
case op_ld_d:
case op_st_b:
case op_st_h:
case op_st_w:
case op_st_d:
case op_ld_bu:
case op_ld_hu:
case op_ld_wu:
case op_preld:
case op_fld_s:
case op_fst_s:
case op_fld_d:
case op_fst_d:
case op_bstr_w: // BSTRINS_W & BSTRPICK_W
kType = kOp10Type;
break;
default:
kType = kUnsupported;
}
}
if (kType == kUnsupported) {
// Check for kOp11Type
switch (bits(31, 21) << 21) {
case op_bstr_w:
kType = kOp11Type;
break;
default:
kType = kUnsupported;
}
}
if (kType == kUnsupported) {
// Check for kOp12Type
switch (bits(31, 20) << 20) {
case op_fmadd_s:
case op_fmadd_d:
case op_fmsub_s:
case op_fmsub_d:
case op_fnmadd_s:
case op_fnmadd_d:
case op_fnmsub_s:
case op_fnmsub_d:
case op_fcmp_cond_s:
case op_fcmp_cond_d:
kType = kOp12Type;
break;
default:
kType = kUnsupported;
}
}
if (kType == kUnsupported) {
// Check for kOp14Type
switch (bits(31, 18) << 18) {
case op_bytepick_d:
case op_fsel:
kType = kOp14Type;
break;
default:
kType = kUnsupported;
}
}
if (kType == kUnsupported) {
// Check for kOp15Type
switch (bits(31, 17) << 17) {
case op_bytepick_w:
case op_alsl_w:
case op_alsl_wu:
case op_alsl_d:
kType = kOp15Type;
break;
default:
kType = kUnsupported;
}
}
if (kType == kUnsupported) {
// Check for kOp16Type
switch (bits(31, 16) << 16) {
case op_slli_d:
case op_srli_d:
case op_srai_d:
case op_rotri_d:
kType = kOp16Type;
break;
default:
kType = kUnsupported;
}
}
if (kType == kUnsupported) {
// Check for kOp17Type
switch (bits(31, 15) << 15) {
case op_slli_w:
case op_srli_w:
case op_srai_w:
case op_rotri_w:
case op_add_w:
case op_add_d:
case op_sub_w:
case op_sub_d:
case op_slt:
case op_sltu:
case op_maskeqz:
case op_masknez:
case op_nor:
case op_and:
case op_or:
case op_xor:
case op_orn:
case op_andn:
case op_sll_w:
case op_srl_w:
case op_sra_w:
case op_sll_d:
case op_srl_d:
case op_sra_d:
case op_rotr_w:
case op_rotr_d:
case op_mul_w:
case op_mul_d:
case op_mulh_d:
case op_mulh_du:
case op_mulh_w:
case op_mulh_wu:
case op_mulw_d_w:
case op_mulw_d_wu:
case op_div_w:
case op_mod_w:
case op_div_wu:
case op_mod_wu:
case op_div_d:
case op_mod_d:
case op_div_du:
case op_mod_du:
case op_break:
case op_fadd_s:
case op_fadd_d:
case op_fsub_s:
case op_fsub_d:
case op_fmul_s:
case op_fmul_d:
case op_fdiv_s:
case op_fdiv_d:
case op_fmax_s:
case op_fmax_d:
case op_fmin_s:
case op_fmin_d:
case op_fmaxa_s:
case op_fmaxa_d:
case op_fmina_s:
case op_fmina_d:
case op_fcopysign_s:
case op_fcopysign_d:
case op_ldx_b:
case op_ldx_h:
case op_ldx_w:
case op_ldx_d:
case op_stx_b:
case op_stx_h:
case op_stx_w:
case op_stx_d:
case op_ldx_bu:
case op_ldx_hu:
case op_ldx_wu:
case op_fldx_s:
case op_fldx_d:
case op_fstx_s:
case op_fstx_d:
case op_amswap_w:
case op_amswap_d:
case op_amadd_w:
case op_amadd_d:
case op_amand_w:
case op_amand_d:
case op_amor_w:
case op_amor_d:
case op_amxor_w:
case op_amxor_d:
case op_ammax_w:
case op_ammax_d:
case op_ammin_w:
case op_ammin_d:
case op_ammax_wu:
case op_ammax_du:
case op_ammin_wu:
case op_ammin_du:
case op_amswap_db_w:
case op_amswap_db_d:
case op_amadd_db_w:
case op_amadd_db_d:
case op_amand_db_w:
case op_amand_db_d:
case op_amor_db_w:
case op_amor_db_d:
case op_amxor_db_w:
case op_amxor_db_d:
case op_ammax_db_w:
case op_ammax_db_d:
case op_ammin_db_w:
case op_ammin_db_d:
case op_ammax_db_wu:
case op_ammax_db_du:
case op_ammin_db_wu:
case op_ammin_db_du:
case op_dbar:
case op_ibar:
kType = kOp17Type;
break;
default:
kType = kUnsupported;
}
}
if (kType == kUnsupported) {
// Check for kOp22Type
switch (bits(31, 10) << 10) {
case op_clo_w:
case op_clz_w:
case op_cto_w:
case op_ctz_w:
case op_clo_d:
case op_clz_d:
case op_cto_d:
case op_ctz_d:
case op_revb_2h:
case op_revb_4h:
case op_revb_2w:
case op_revb_d:
case op_revh_2w:
case op_revh_d:
case op_bitrev_4b:
case op_bitrev_8b:
case op_bitrev_w:
case op_bitrev_d:
case op_ext_w_h:
case op_ext_w_b:
case op_fabs_s:
case op_fabs_d:
case op_fneg_s:
case op_fneg_d:
case op_fsqrt_s:
case op_fsqrt_d:
case op_fmov_s:
case op_fmov_d:
case op_movgr2fr_w:
case op_movgr2fr_d:
case op_movgr2frh_w:
case op_movfr2gr_s:
case op_movfr2gr_d:
case op_movfrh2gr_s:
case op_movfcsr2gr:
case op_movfr2cf:
case op_movgr2cf:
case op_fcvt_s_d:
case op_fcvt_d_s:
case op_ftintrm_w_s:
case op_ftintrm_w_d:
case op_ftintrm_l_s:
case op_ftintrm_l_d:
case op_ftintrp_w_s:
case op_ftintrp_w_d:
case op_ftintrp_l_s:
case op_ftintrp_l_d:
case op_ftintrz_w_s:
case op_ftintrz_w_d:
case op_ftintrz_l_s:
case op_ftintrz_l_d:
case op_ftintrne_w_s:
case op_ftintrne_w_d:
case op_ftintrne_l_s:
case op_ftintrne_l_d:
case op_ftint_w_s:
case op_ftint_w_d:
case op_ftint_l_s:
case op_ftint_l_d:
case op_ffint_s_w:
case op_ffint_s_l:
case op_ffint_d_w:
case op_ffint_d_l:
case op_frint_s:
case op_frint_d:
kType = kOp22Type;
break;
default:
kType = kUnsupported;
}
}
if (kType == kUnsupported) {
// Check for kOp24Type
switch (bits(31, 8) << 8) {
case op_movcf2fr:
case op_movcf2gr:
kType = kOp24Type;
break;
default:
kType = kUnsupported;
}
}
return kType;
}