?? translate.c
字號:
gen_op_fdtoq(); gen_op_store_QT0_fpr(QFPREG(rd)); break;#else goto nfpu_insn;#endif case 0xd1: gen_op_load_fpr_FT1(rs2); gen_op_fstoi(); gen_op_store_FT0_fpr(rd); break; case 0xd2: gen_op_load_fpr_DT1(DFPREG(rs2)); gen_op_fdtoi(); gen_op_store_FT0_fpr(rd); break; case 0xd3: /* fqtoi */#if defined(CONFIG_USER_ONLY) gen_op_load_fpr_QT1(QFPREG(rs2)); gen_op_fqtoi(); gen_op_store_FT0_fpr(rd); break;#else goto nfpu_insn;#endif#ifdef TARGET_SPARC64 case 0x2: /* V9 fmovd */ gen_op_load_fpr_DT0(DFPREG(rs2)); gen_op_store_DT0_fpr(DFPREG(rd)); break; case 0x3: /* V9 fmovq */#if defined(CONFIG_USER_ONLY) gen_op_load_fpr_QT0(QFPREG(rs2)); gen_op_store_QT0_fpr(QFPREG(rd)); break;#else goto nfpu_insn;#endif case 0x6: /* V9 fnegd */ gen_op_load_fpr_DT1(DFPREG(rs2)); gen_op_fnegd(); gen_op_store_DT0_fpr(DFPREG(rd)); break; case 0x7: /* V9 fnegq */#if defined(CONFIG_USER_ONLY) gen_op_load_fpr_QT1(QFPREG(rs2)); gen_op_fnegq(); gen_op_store_QT0_fpr(QFPREG(rd)); break;#else goto nfpu_insn;#endif case 0xa: /* V9 fabsd */ gen_op_load_fpr_DT1(DFPREG(rs2)); gen_op_fabsd(); gen_op_store_DT0_fpr(DFPREG(rd)); break; case 0xb: /* V9 fabsq */#if defined(CONFIG_USER_ONLY) gen_op_load_fpr_QT1(QFPREG(rs2)); gen_op_fabsq(); gen_op_store_QT0_fpr(QFPREG(rd)); break;#else goto nfpu_insn;#endif case 0x81: /* V9 fstox */ gen_op_load_fpr_FT1(rs2); gen_op_fstox(); gen_op_store_DT0_fpr(DFPREG(rd)); break; case 0x82: /* V9 fdtox */ gen_op_load_fpr_DT1(DFPREG(rs2)); gen_op_fdtox(); gen_op_store_DT0_fpr(DFPREG(rd)); break; case 0x83: /* V9 fqtox */#if defined(CONFIG_USER_ONLY) gen_op_load_fpr_QT1(QFPREG(rs2)); gen_op_fqtox(); gen_op_store_DT0_fpr(DFPREG(rd)); break;#else goto nfpu_insn;#endif case 0x84: /* V9 fxtos */ gen_op_load_fpr_DT1(DFPREG(rs2)); gen_op_fxtos(); gen_op_store_FT0_fpr(rd); break; case 0x88: /* V9 fxtod */ gen_op_load_fpr_DT1(DFPREG(rs2)); gen_op_fxtod(); gen_op_store_DT0_fpr(DFPREG(rd)); break; case 0x8c: /* V9 fxtoq */#if defined(CONFIG_USER_ONLY) gen_op_load_fpr_DT1(DFPREG(rs2)); gen_op_fxtoq(); gen_op_store_QT0_fpr(QFPREG(rd)); break;#else goto nfpu_insn;#endif#endif default: goto illegal_insn; } } else if (xop == 0x35) { /* FPU Operations */#ifdef TARGET_SPARC64 int cond;#endif if (gen_trap_ifnofpu(dc)) goto jmp_insn; gen_op_clear_ieee_excp_and_FTT(); rs1 = GET_FIELD(insn, 13, 17); rs2 = GET_FIELD(insn, 27, 31); xop = GET_FIELD(insn, 18, 26);#ifdef TARGET_SPARC64 if ((xop & 0x11f) == 0x005) { // V9 fmovsr cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_FT0(rd); gen_op_load_fpr_FT1(rs2); rs1 = GET_FIELD(insn, 13, 17); gen_movl_reg_T0(rs1); flush_T2(dc); gen_cond_reg(cond); gen_op_fmovs_cc(); gen_op_store_FT0_fpr(rd); break; } else if ((xop & 0x11f) == 0x006) { // V9 fmovdr cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_DT0(DFPREG(rd)); gen_op_load_fpr_DT1(DFPREG(rs2)); flush_T2(dc); rs1 = GET_FIELD(insn, 13, 17); gen_movl_reg_T0(rs1); gen_cond_reg(cond); gen_op_fmovs_cc(); gen_op_store_DT0_fpr(DFPREG(rd)); break; } else if ((xop & 0x11f) == 0x007) { // V9 fmovqr#if defined(CONFIG_USER_ONLY) cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_QT0(QFPREG(rd)); gen_op_load_fpr_QT1(QFPREG(rs2)); flush_T2(dc); rs1 = GET_FIELD(insn, 13, 17); gen_movl_reg_T0(rs1); gen_cond_reg(cond); gen_op_fmovq_cc(); gen_op_store_QT0_fpr(QFPREG(rd)); break;#else goto nfpu_insn;#endif }#endif switch (xop) {#ifdef TARGET_SPARC64 case 0x001: /* V9 fmovscc %fcc0 */ cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_FT0(rd); gen_op_load_fpr_FT1(rs2); flush_T2(dc); gen_fcond[0][cond](); gen_op_fmovs_cc(); gen_op_store_FT0_fpr(rd); break; case 0x002: /* V9 fmovdcc %fcc0 */ cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_DT0(DFPREG(rd)); gen_op_load_fpr_DT1(DFPREG(rs2)); flush_T2(dc); gen_fcond[0][cond](); gen_op_fmovd_cc(); gen_op_store_DT0_fpr(DFPREG(rd)); break; case 0x003: /* V9 fmovqcc %fcc0 */#if defined(CONFIG_USER_ONLY) cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_QT0(QFPREG(rd)); gen_op_load_fpr_QT1(QFPREG(rs2)); flush_T2(dc); gen_fcond[0][cond](); gen_op_fmovq_cc(); gen_op_store_QT0_fpr(QFPREG(rd)); break;#else goto nfpu_insn;#endif case 0x041: /* V9 fmovscc %fcc1 */ cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_FT0(rd); gen_op_load_fpr_FT1(rs2); flush_T2(dc); gen_fcond[1][cond](); gen_op_fmovs_cc(); gen_op_store_FT0_fpr(rd); break; case 0x042: /* V9 fmovdcc %fcc1 */ cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_DT0(DFPREG(rd)); gen_op_load_fpr_DT1(DFPREG(rs2)); flush_T2(dc); gen_fcond[1][cond](); gen_op_fmovd_cc(); gen_op_store_DT0_fpr(DFPREG(rd)); break; case 0x043: /* V9 fmovqcc %fcc1 */#if defined(CONFIG_USER_ONLY) cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_QT0(QFPREG(rd)); gen_op_load_fpr_QT1(QFPREG(rs2)); flush_T2(dc); gen_fcond[1][cond](); gen_op_fmovq_cc(); gen_op_store_QT0_fpr(QFPREG(rd)); break;#else goto nfpu_insn;#endif case 0x081: /* V9 fmovscc %fcc2 */ cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_FT0(rd); gen_op_load_fpr_FT1(rs2); flush_T2(dc); gen_fcond[2][cond](); gen_op_fmovs_cc(); gen_op_store_FT0_fpr(rd); break; case 0x082: /* V9 fmovdcc %fcc2 */ cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_DT0(DFPREG(rd)); gen_op_load_fpr_DT1(DFPREG(rs2)); flush_T2(dc); gen_fcond[2][cond](); gen_op_fmovd_cc(); gen_op_store_DT0_fpr(DFPREG(rd)); break; case 0x083: /* V9 fmovqcc %fcc2 */#if defined(CONFIG_USER_ONLY) cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_QT0(rd); gen_op_load_fpr_QT1(rs2); flush_T2(dc); gen_fcond[2][cond](); gen_op_fmovq_cc(); gen_op_store_QT0_fpr(rd); break;#else goto nfpu_insn;#endif case 0x0c1: /* V9 fmovscc %fcc3 */ cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_FT0(rd); gen_op_load_fpr_FT1(rs2); flush_T2(dc); gen_fcond[3][cond](); gen_op_fmovs_cc(); gen_op_store_FT0_fpr(rd); break; case 0x0c2: /* V9 fmovdcc %fcc3 */ cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_DT0(DFPREG(rd)); gen_op_load_fpr_DT1(DFPREG(rs2)); flush_T2(dc); gen_fcond[3][cond](); gen_op_fmovd_cc(); gen_op_store_DT0_fpr(DFPREG(rd)); break; case 0x0c3: /* V9 fmovqcc %fcc3 */#if defined(CONFIG_USER_ONLY) cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_QT0(QFPREG(rd)); gen_op_load_fpr_QT1(QFPREG(rs2)); flush_T2(dc); gen_fcond[3][cond](); gen_op_fmovq_cc(); gen_op_store_QT0_fpr(QFPREG(rd)); break;#else goto nfpu_insn;#endif case 0x101: /* V9 fmovscc %icc */ cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_FT0(rd); gen_op_load_fpr_FT1(rs2); flush_T2(dc); gen_cond[0][cond](); gen_op_fmovs_cc(); gen_op_store_FT0_fpr(rd); break; case 0x102: /* V9 fmovdcc %icc */ cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_DT0(DFPREG(rd)); gen_op_load_fpr_DT1(DFPREG(rs2)); flush_T2(dc); gen_cond[0][cond](); gen_op_fmovd_cc(); gen_op_store_DT0_fpr(DFPREG(rd)); break; case 0x103: /* V9 fmovqcc %icc */#if defined(CONFIG_USER_ONLY) cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_QT0(rd); gen_op_load_fpr_QT1(rs2); flush_T2(dc); gen_cond[0][cond](); gen_op_fmovq_cc(); gen_op_store_QT0_fpr(rd); break;#else goto nfpu_insn;#endif case 0x181: /* V9 fmovscc %xcc */ cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_FT0(rd); gen_op_load_fpr_FT1(rs2); flush_T2(dc); gen_cond[1][cond](); gen_op_fmovs_cc(); gen_op_store_FT0_fpr(rd); break; case 0x182: /* V9 fmovdcc %xcc */ cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_DT0(DFPREG(rd)); gen_op_load_fpr_DT1(DFPREG(rs2)); flush_T2(dc); gen_cond[1][cond](); gen_op_fmovd_cc(); gen_op_store_DT0_fpr(DFPREG(rd)); break; case 0x183: /* V9 fmovqcc %xcc */#if defined(CONFIG_USER_ONLY) cond = GET_FIELD_SP(insn, 14, 17); gen_op_load_fpr_QT0(rd); gen_op_load_fpr_QT1(rs2); flush_T2(dc); gen_cond[1][cond](); gen_op_fmovq_cc(); gen_op_store_QT0_fpr(rd); break;#else goto nfpu_insn;#endif#endif case 0x51: /* fcmps, V9 %fcc */ gen_op_load_fpr_FT0(rs1); gen_op_load_fpr_FT1(rs2);#ifdef TARGET_SPARC64 gen_fcmps[rd & 3]();#else gen_op_fcmps();#endif break; case 0x52: /* fcmpd, V9 %fcc */ gen_op_load_fpr_DT0(DFPREG(rs1)); gen_op_load_fpr_DT1(DFPREG(rs2));#ifdef TARGET_SPARC64 gen_fcmpd[rd & 3]();#else gen_op_fcmpd();#endif break; case 0x53: /* fcmpq, V9 %fcc */#if defined(CONFIG_USER_ONLY) gen_op_load_fpr_QT0(QFPREG(rs1)); gen_op_load_fpr_QT1(QFPREG(rs2));#ifdef TARGET_SPARC64 gen_fcmpq[rd & 3]();#else gen_op_fcmpq();#endif break;#else /* !defined(CONFIG_USER_ONLY) */ goto nfpu_insn;#endif case 0x55: /* fcmpes, V9 %fcc */ gen_op_load_fpr_FT0(rs1); gen_op_load_fpr_FT1(rs2);#ifdef TARGET_SPARC64 gen_fcmpes[rd & 3]();#else gen_op_fcmpes();#endif break; case 0x56: /* fcmped, V9 %fcc */ gen_op_load_fpr_DT0(DFPREG(rs1)); gen_op_load_fpr_DT1(DFPREG(rs2));#ifdef TARGET_SPARC64 gen_fcmped[rd & 3]();#else gen_op_fcmped();#endif break; case 0x57: /* fcmpeq, V9 %fcc */#if defined(CONFIG_USER_ONLY) gen_op_load_fpr_QT0(QFPREG(rs1)); gen_op_load_fpr_QT1(QFPREG(rs2));#ifdef TARGET_SPARC64 gen_fcmpeq[rd & 3]();#else gen_op_fcmpeq();#endif break;#else/* !defined(CONFIG_USER_ONLY) */ goto nfpu_insn;#endif default: goto illegal_insn; }#if defined(OPTIM) } else if (xop == 0x2) { // clr/mov shortcut rs1 = GET_FIELD(insn, 13, 17); if (rs1 == 0) { // or %g0, x, y -> mov T1, x; mov y, T1 if (IS_IMM) {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -