?? op.c
字號:
{ T2 = !FLAG_SET(PSR_CARRY);}void OPPROTO op_eval_bpos(void){ T2 = !FLAG_SET(PSR_NEG);}void OPPROTO op_eval_bvc(void){ T2 = !FLAG_SET(PSR_OVF);}#ifdef TARGET_SPARC64void OPPROTO op_eval_xbe(void){ T2 = XFLAG_SET(PSR_ZERO);}void OPPROTO op_eval_xble(void){ target_ulong Z = XFLAG_SET(PSR_ZERO), N = XFLAG_SET(PSR_NEG), V = XFLAG_SET(PSR_OVF); T2 = Z | (N ^ V);}void OPPROTO op_eval_xbl(void){ target_ulong N = XFLAG_SET(PSR_NEG), V = XFLAG_SET(PSR_OVF); T2 = N ^ V;}void OPPROTO op_eval_xbleu(void){ target_ulong Z = XFLAG_SET(PSR_ZERO), C = XFLAG_SET(PSR_CARRY); T2 = C | Z;}void OPPROTO op_eval_xbcs(void){ T2 = XFLAG_SET(PSR_CARRY);}void OPPROTO op_eval_xbvs(void){ T2 = XFLAG_SET(PSR_OVF);}void OPPROTO op_eval_xbneg(void){ T2 = XFLAG_SET(PSR_NEG);}void OPPROTO op_eval_xbne(void){ T2 = !XFLAG_SET(PSR_ZERO);}void OPPROTO op_eval_xbg(void){ target_ulong Z = XFLAG_SET(PSR_ZERO), N = XFLAG_SET(PSR_NEG), V = XFLAG_SET(PSR_OVF); T2 = !(Z | (N ^ V));}void OPPROTO op_eval_xbge(void){ target_ulong N = XFLAG_SET(PSR_NEG), V = XFLAG_SET(PSR_OVF); T2 = !(N ^ V);}void OPPROTO op_eval_xbgu(void){ target_ulong Z = XFLAG_SET(PSR_ZERO), C = XFLAG_SET(PSR_CARRY); T2 = !(C | Z);}void OPPROTO op_eval_xbcc(void){ T2 = !XFLAG_SET(PSR_CARRY);}void OPPROTO op_eval_xbpos(void){ T2 = !XFLAG_SET(PSR_NEG);}void OPPROTO op_eval_xbvc(void){ T2 = !XFLAG_SET(PSR_OVF);}#endif#define FCC#define FFLAG_SET(x) (env->fsr & x? 1: 0)#include "fbranch_template.h"#ifdef TARGET_SPARC64#define FCC _fcc1#define FFLAG_SET(x) ((env->fsr & ((uint64_t)x >> 32))? 1: 0)#include "fbranch_template.h"#define FCC _fcc2#define FFLAG_SET(x) ((env->fsr & ((uint64_t)x >> 34))? 1: 0)#include "fbranch_template.h"#define FCC _fcc3#define FFLAG_SET(x) ((env->fsr & ((uint64_t)x >> 36))? 1: 0)#include "fbranch_template.h"#endif#ifdef TARGET_SPARC64void OPPROTO op_eval_brz(void){ T2 = (T0 == 0);}void OPPROTO op_eval_brnz(void){ T2 = (T0 != 0);}void OPPROTO op_eval_brlz(void){ T2 = ((int64_t)T0 < 0);}void OPPROTO op_eval_brlez(void){ T2 = ((int64_t)T0 <= 0);}void OPPROTO op_eval_brgz(void){ T2 = ((int64_t)T0 > 0);}void OPPROTO op_eval_brgez(void){ T2 = ((int64_t)T0 >= 0);}void OPPROTO op_jmp_im64(void){ env->pc = PARAMQ1;}void OPPROTO op_movq_npc_im64(void){ env->npc = PARAMQ1;}#endifvoid OPPROTO op_jmp_im(void){ env->pc = (uint32_t)PARAM1;}void OPPROTO op_movl_npc_im(void){ env->npc = (uint32_t)PARAM1;}void OPPROTO op_movl_npc_T0(void){ env->npc = T0;}void OPPROTO op_mov_pc_npc(void){ env->pc = env->npc;}void OPPROTO op_next_insn(void){ env->pc = env->npc; env->npc = env->npc + 4;}void OPPROTO op_goto_tb0(void){ GOTO_TB(op_goto_tb0, PARAM1, 0);}void OPPROTO op_goto_tb1(void){ GOTO_TB(op_goto_tb1, PARAM1, 1);}void OPPROTO op_jmp_label(void){ GOTO_LABEL_PARAM(1);}void OPPROTO op_jnz_T2_label(void){ if (T2) GOTO_LABEL_PARAM(1); FORCE_RET();}void OPPROTO op_jz_T2_label(void){ if (!T2) GOTO_LABEL_PARAM(1); FORCE_RET();}void OPPROTO op_flush_T0(void){ helper_flush(T0);}void OPPROTO op_clear_ieee_excp_and_FTT(void){ env->fsr &= ~(FSR_FTT_MASK | FSR_CEXC_MASK);;}#define F_OP(name, p) void OPPROTO op_f##name##p(void)#if defined(CONFIG_USER_ONLY)#define F_BINOP(name) \ F_OP(name, s) \ { \ set_float_exception_flags(0, &env->fp_status); \ FT0 = float32_ ## name (FT0, FT1, &env->fp_status); \ check_ieee_exceptions(); \ } \ F_OP(name, d) \ { \ set_float_exception_flags(0, &env->fp_status); \ DT0 = float64_ ## name (DT0, DT1, &env->fp_status); \ check_ieee_exceptions(); \ } \ F_OP(name, q) \ { \ set_float_exception_flags(0, &env->fp_status); \ QT0 = float128_ ## name (QT0, QT1, &env->fp_status); \ check_ieee_exceptions(); \ }#else#define F_BINOP(name) \ F_OP(name, s) \ { \ set_float_exception_flags(0, &env->fp_status); \ FT0 = float32_ ## name (FT0, FT1, &env->fp_status); \ check_ieee_exceptions(); \ } \ F_OP(name, d) \ { \ set_float_exception_flags(0, &env->fp_status); \ DT0 = float64_ ## name (DT0, DT1, &env->fp_status); \ check_ieee_exceptions(); \ }#endifF_BINOP(add);F_BINOP(sub);F_BINOP(mul);F_BINOP(div);#undef F_BINOPvoid OPPROTO op_fsmuld(void){ set_float_exception_flags(0, &env->fp_status); DT0 = float64_mul(float32_to_float64(FT0, &env->fp_status), float32_to_float64(FT1, &env->fp_status), &env->fp_status); check_ieee_exceptions();}#if defined(CONFIG_USER_ONLY)void OPPROTO op_fdmulq(void){ set_float_exception_flags(0, &env->fp_status); QT0 = float128_mul(float64_to_float128(DT0, &env->fp_status), float64_to_float128(DT1, &env->fp_status), &env->fp_status); check_ieee_exceptions();}#endif#if defined(CONFIG_USER_ONLY)#define F_HELPER(name) \ F_OP(name, s) \ { \ do_f##name##s(); \ } \ F_OP(name, d) \ { \ do_f##name##d(); \ } \ F_OP(name, q) \ { \ do_f##name##q(); \ }#else#define F_HELPER(name) \ F_OP(name, s) \ { \ do_f##name##s(); \ } \ F_OP(name, d) \ { \ do_f##name##d(); \ }#endifF_HELPER(sqrt);F_OP(neg, s){ FT0 = float32_chs(FT1);}F_OP(abs, s){ do_fabss();}F_HELPER(cmp);F_HELPER(cmpe);#ifdef TARGET_SPARC64F_OP(neg, d){ DT0 = float64_chs(DT1);}F_OP(abs, d){ do_fabsd();}#if defined(CONFIG_USER_ONLY)F_OP(neg, q){ QT0 = float128_chs(QT1);}F_OP(abs, q){ do_fabsd();}#endifvoid OPPROTO op_fcmps_fcc1(void){ do_fcmps_fcc1();}void OPPROTO op_fcmpd_fcc1(void){ do_fcmpd_fcc1();}void OPPROTO op_fcmps_fcc2(void){ do_fcmps_fcc2();}void OPPROTO op_fcmpd_fcc2(void){ do_fcmpd_fcc2();}void OPPROTO op_fcmps_fcc3(void){ do_fcmps_fcc3();}void OPPROTO op_fcmpd_fcc3(void){ do_fcmpd_fcc3();}void OPPROTO op_fcmpes_fcc1(void){ do_fcmpes_fcc1();}void OPPROTO op_fcmped_fcc1(void){ do_fcmped_fcc1();}void OPPROTO op_fcmpes_fcc2(void){ do_fcmpes_fcc2();}void OPPROTO op_fcmped_fcc2(void){ do_fcmped_fcc2();}void OPPROTO op_fcmpes_fcc3(void){ do_fcmpes_fcc3();}void OPPROTO op_fcmped_fcc3(void){ do_fcmped_fcc3();}#if defined(CONFIG_USER_ONLY)void OPPROTO op_fcmpq_fcc1(void){ do_fcmpq_fcc1();}void OPPROTO op_fcmpq_fcc2(void){ do_fcmpq_fcc2();}void OPPROTO op_fcmpq_fcc3(void){ do_fcmpq_fcc3();}void OPPROTO op_fcmpeq_fcc1(void){ do_fcmpeq_fcc1();}void OPPROTO op_fcmpeq_fcc2(void){ do_fcmpeq_fcc2();}void OPPROTO op_fcmpeq_fcc3(void){ do_fcmpeq_fcc3();}#endif#endif/* Integer to float conversion. */#ifdef USE_INT_TO_FLOAT_HELPERSF_HELPER(ito);#ifdef TARGET_SPARC64F_HELPER(xto);#endif#elseF_OP(ito, s){ set_float_exception_flags(0, &env->fp_status); FT0 = int32_to_float32(*((int32_t *)&FT1), &env->fp_status); check_ieee_exceptions();}F_OP(ito, d){ set_float_exception_flags(0, &env->fp_status); DT0 = int32_to_float64(*((int32_t *)&FT1), &env->fp_status); check_ieee_exceptions();}#if defined(CONFIG_USER_ONLY)F_OP(ito, q){ set_float_exception_flags(0, &env->fp_status); QT0 = int32_to_float128(*((int32_t *)&FT1), &env->fp_status); check_ieee_exceptions();}#endif#ifdef TARGET_SPARC64F_OP(xto, s){ set_float_exception_flags(0, &env->fp_status); FT0 = int64_to_float32(*((int64_t *)&DT1), &env->fp_status); check_ieee_exceptions();}F_OP(xto, d){ set_float_exception_flags(0, &env->fp_status); DT0 = int64_to_float64(*((int64_t *)&DT1), &env->fp_status); check_ieee_exceptions();}#if defined(CONFIG_USER_ONLY)F_OP(xto, q){ set_float_exception_flags(0, &env->fp_status); QT0 = int64_to_float128(*((int64_t *)&DT1), &env->fp_status); check_ieee_exceptions();}#endif#endif#endif#undef F_HELPER/* floating point conversion */void OPPROTO op_fdtos(void){ set_float_exception_flags(0, &env->fp_status); FT0 = float64_to_float32(DT1, &env->fp_status); check_ieee_exceptions();}void OPPROTO op_fstod(void){ set_float_exception_flags(0, &env->fp_status); DT0 = float32_to_float64(FT1, &env->fp_status); check_ieee_exceptions();}#if defined(CONFIG_USER_ONLY)void OPPROTO op_fqtos(void){ set_float_exception_flags(0, &env->fp_status); FT0 = float128_to_float32(QT1, &env->fp_status); check_ieee_exceptions();}void OPPROTO op_fstoq(void){ set_float_exception_flags(0, &env->fp_status); QT0 = float32_to_float128(FT1, &env->fp_status); check_ieee_exceptions();}void OPPROTO op_fqtod(void){ set_float_exception_flags(0, &env->fp_status); DT0 = float128_to_float64(QT1, &env->fp_status); check_ieee_exceptions();}void OPPROTO op_fdtoq(void){ set_float_exception_flags(0, &env->fp_status); QT0 = float64_to_float128(DT1, &env->fp_status); check_ieee_exceptions();}#endif/* Float to integer conversion. */void OPPROTO op_fstoi(void){ set_float_exception_flags(0, &env->fp_status); *((int32_t *)&FT0) = float32_to_int32_round_to_zero(FT1, &env->fp_status); check_ieee_exceptions();}void OPPROTO op_fdtoi(void){ set_float_exception_flags(0, &env->fp_status); *((int32_t *)&FT0) = float64_to_int32_round_to_zero(DT1, &env->fp_status); check_ieee_exceptions();}#if defined(CONFIG_USER_ONLY)void OPPROTO op_fqtoi(void){ set_float_exception_flags(0, &env->fp_status); *((int32_t *)&FT0) = float128_to_int32_round_to_zero(QT1, &env->fp_status); check_ieee_exceptions();}#endif#ifdef TARGET_SPARC64void OPPROTO op_fstox(void){ set_float_exception_flags(0, &env->fp_status); *((int64_t *)&DT0) = float32_to_int64_round_to_zero(FT1, &env->fp_status); check_ieee_exceptions();}void OPPROTO op_fdtox(void){ set_float_exception_flags(0, &env->fp_status); *((int64_t *)&DT0) = float64_to_int64_round_to_zero(DT1, &env->fp_status); check_ieee_exceptions();}#if defined(CONFIG_USER_ONLY)void OPPROTO op_fqtox(void){ set_float_exception_flags(0, &env->fp_status); *((int64_t *)&DT0) = float128_to_int64_round_to_zero(QT1, &env->fp_status); check_ieee_exceptions();}#endifvoid OPPROTO op_fmovs_cc(void){ if (T2) FT0 = FT1;}void OPPROTO op_fmovd_cc(void){ if (T2) DT0 = DT1;}#if defined(CONFIG_USER_ONLY)void OPPROTO op_fmovq_cc(void){ if (T2) QT0 = QT1;}#endifvoid OPPROTO op_mov_cc(void){ if (T2) T0 = T1;}void OPPROTO op_flushw(void){ if (env->cansave != NWINDOWS - 2) { raise_exception(TT_SPILL | (env->otherwin != 0 ? (TT_WOTHER | ((env->wstate & 0x38) >> 1)): ((env->wstate & 0x7) << 2))); }}void OPPROTO op_saved(void){ env->cansave++; if (env->otherwin == 0) env->canrestore--; else env->otherwin--; FORCE_RET();}void OPPROTO op_restored(void){ env->canrestore++; if (env->cleanwin < NWINDOWS - 1) env->cleanwin++; if (env->otherwin == 0) env->cansave--; else env->otherwin--; FORCE_RET();}void OPPROTO op_popc(void){ do_popc();}void OPPROTO op_done(void){ do_done();}void OPPROTO op_retry(void){ do_retry();}void OPPROTO op_sir(void){ T0 = 0; // XXX}void OPPROTO op_ld_asi_reg(){ T0 += PARAM1; helper_ld_asi(env->asi, PARAM2, PARAM3);}void OPPROTO op_st_asi_reg(){ T0 += PARAM1; helper_st_asi(env->asi, PARAM2);}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -