⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 op.c

📁 qemu虚拟机代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    T0 = ((int32_t) T0) >> T1;}#endif/* Load and store */#define MEMSUFFIX _raw#include "op_mem.h"#if !defined(CONFIG_USER_ONLY)#define MEMSUFFIX _user#include "op_mem.h"#define MEMSUFFIX _kernel#include "op_mem.h"#endifvoid OPPROTO op_ldfsr(void){    PUT_FSR32(env, *((uint32_t *) &FT0));    helper_ldfsr();}void OPPROTO op_stfsr(void){    *((uint32_t *) &FT0) = GET_FSR32(env);}#ifndef TARGET_SPARC64void OPPROTO op_rdpsr(void){    do_rdpsr();}void OPPROTO op_wrpsr(void){    do_wrpsr();    FORCE_RET();}void OPPROTO op_rett(void){    helper_rett();    FORCE_RET();}/* XXX: use another pointer for %iN registers to avoid slow wrapping   handling ? */void OPPROTO op_save(void){    uint32_t cwp;    cwp = (env->cwp - 1) & (NWINDOWS - 1);     if (env->wim & (1 << cwp)) {        raise_exception(TT_WIN_OVF);    }    set_cwp(cwp);    FORCE_RET();}void OPPROTO op_restore(void){    uint32_t cwp;    cwp = (env->cwp + 1) & (NWINDOWS - 1);     if (env->wim & (1 << cwp)) {        raise_exception(TT_WIN_UNF);    }    set_cwp(cwp);    FORCE_RET();}#elsevoid OPPROTO op_rdccr(void){    T0 = GET_CCR(env);}void OPPROTO op_wrccr(void){    PUT_CCR(env, T0);}void OPPROTO op_rdtick(void){    T0 = 0; // XXX read cycle counter and bit 31}void OPPROTO op_wrtick(void){    // XXX write cycle counter and bit 31}void OPPROTO op_rdtpc(void){    T0 = env->tpc[env->tl];}void OPPROTO op_wrtpc(void){    env->tpc[env->tl] = T0;}void OPPROTO op_rdtnpc(void){    T0 = env->tnpc[env->tl];}void OPPROTO op_wrtnpc(void){    env->tnpc[env->tl] = T0;}void OPPROTO op_rdtstate(void){    T0 = env->tstate[env->tl];}void OPPROTO op_wrtstate(void){    env->tstate[env->tl] = T0;}void OPPROTO op_rdtt(void){    T0 = env->tt[env->tl];}void OPPROTO op_wrtt(void){    env->tt[env->tl] = T0;}void OPPROTO op_rdpstate(void){    T0 = env->pstate;}void OPPROTO op_wrpstate(void){    do_wrpstate();}// CWP handling is reversed in V9, but we still use the V8 register// order.void OPPROTO op_rdcwp(void){    T0 = NWINDOWS - 1 - env->cwp;}void OPPROTO op_wrcwp(void){    env->cwp = NWINDOWS - 1 - T0;}/* XXX: use another pointer for %iN registers to avoid slow wrapping   handling ? */void OPPROTO op_save(void){    uint32_t cwp;    cwp = (env->cwp - 1) & (NWINDOWS - 1);     if (env->cansave == 0) {        raise_exception(TT_SPILL | (env->otherwin != 0 ? 				    (TT_WOTHER | ((env->wstate & 0x38) >> 1)):				    ((env->wstate & 0x7) << 2)));    } else {	if (env->cleanwin - env->canrestore == 0) {	    // XXX Clean windows without trap	    raise_exception(TT_CLRWIN);	} else {	    env->cansave--;	    env->canrestore++;	    set_cwp(cwp);	}    }    FORCE_RET();}void OPPROTO op_restore(void){    uint32_t cwp;    cwp = (env->cwp + 1) & (NWINDOWS - 1);     if (env->canrestore == 0) {        raise_exception(TT_FILL | (env->otherwin != 0 ? 				   (TT_WOTHER | ((env->wstate & 0x38) >> 1)):				   ((env->wstate & 0x7) << 2)));    } else {	env->cansave++;	env->canrestore--;	set_cwp(cwp);    }    FORCE_RET();}#endifvoid OPPROTO op_exception(void){    env->exception_index = PARAM1;    cpu_loop_exit();}void OPPROTO op_trap_T0(void){    env->exception_index = TT_TRAP + (T0 & 0x7f);    cpu_loop_exit();}void OPPROTO op_trapcc_T0(void){    if (T2) {        env->exception_index = TT_TRAP + (T0 & 0x7f);        cpu_loop_exit();    }    FORCE_RET();}void OPPROTO op_trap_ifnofpu(void){    if (!env->psref) {        env->exception_index = TT_NFPU_INSN;        cpu_loop_exit();    }    FORCE_RET();}void OPPROTO op_fpexception_im(void){    env->exception_index = TT_FP_EXCP;    env->fsr &= ~FSR_FTT_MASK;    env->fsr |= PARAM1;    cpu_loop_exit();    FORCE_RET();}void OPPROTO op_debug(void){    helper_debug();}void OPPROTO op_exit_tb(void){    EXIT_TB();}void OPPROTO op_eval_ba(void){    T2 = 1;}void OPPROTO op_eval_be(void){    T2 = FLAG_SET(PSR_ZERO);}void OPPROTO op_eval_ble(void){    target_ulong Z = FLAG_SET(PSR_ZERO), N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);        T2 = Z | (N ^ V);}void OPPROTO op_eval_bl(void){    target_ulong N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);    T2 = N ^ V;}void OPPROTO op_eval_bleu(void){    target_ulong Z = FLAG_SET(PSR_ZERO), C = FLAG_SET(PSR_CARRY);    T2 = C | Z;}void OPPROTO op_eval_bcs(void){    T2 = FLAG_SET(PSR_CARRY);}void OPPROTO op_eval_bvs(void){    T2 = FLAG_SET(PSR_OVF);}void OPPROTO op_eval_bn(void){    T2 = 0;}void OPPROTO op_eval_bneg(void){    T2 = FLAG_SET(PSR_NEG);}void OPPROTO op_eval_bne(void){    T2 = !FLAG_SET(PSR_ZERO);}void OPPROTO op_eval_bg(void){    target_ulong Z = FLAG_SET(PSR_ZERO), N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);    T2 = !(Z | (N ^ V));}void OPPROTO op_eval_bge(void){    target_ulong N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);    T2 = !(N ^ V);}void OPPROTO op_eval_bgu(void){    target_ulong Z = FLAG_SET(PSR_ZERO), C = FLAG_SET(PSR_CARRY);    T2 = !(C | Z);}void OPPROTO op_eval_bcc(void){    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_fnegs(void){    FT0 = -FT1;}void OPPROTO op_fabss(void){    do_fabss();}#ifdef TARGET_SPARC64void OPPROTO op_fnegd(void){    DT0 = -DT1;}void OPPROTO op_fabsd(void){    do_fabsd();}#endifvoid OPPROTO op_fsqrts(void){    do_fsqrts();}void OPPROTO op_fsqrtd(void){    do_fsqrtd();}void OPPROTO op_fmuls(void){    FT0 *= FT1;}void OPPROTO op_fmuld(void){    DT0 *= DT1;}void OPPROTO op_fsmuld(void){    DT0 = FT0 * FT1;}void OPPROTO op_fadds(void){    FT0 += FT1;}void OPPROTO op_faddd(void){    DT0 += DT1;}void OPPROTO op_fsubs(void){    FT0 -= FT1;}void OPPROTO op_fsubd(void){    DT0 -= DT1;}void OPPROTO op_fdivs(void){    FT0 /= FT1;}void OPPROTO op_fdivd(void){    DT0 /= DT1;}void OPPROTO op_fcmps(void){    do_fcmps();}void OPPROTO op_fcmpd(void){    do_fcmpd();}#ifdef TARGET_SPARC64void 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();}#endif#ifdef USE_INT_TO_FLOAT_HELPERSvoid OPPROTO op_fitos(void){    do_fitos();}void OPPROTO op_fitod(void){    do_fitod();}#elsevoid OPPROTO op_fitos(void){    FT0 = (float) *((int32_t *)&FT1);}void OPPROTO op_fitod(void){    DT0 = (double) *((int32_t *)&FT1);}#ifdef TARGET_SPARC64void OPPROTO op_fxtos(void){    FT0 = (float) *((int64_t *)&DT1);}void OPPROTO op_fxtod(void){    DT0 = (double) *((int64_t *)&DT1);}#endif#endifvoid OPPROTO op_fdtos(void){    FT0 = (float) DT1;}void OPPROTO op_fstod(void){    DT0 = (double) FT1;}void OPPROTO op_fstoi(void){    *((int32_t *)&FT0) = (int32_t) FT1;}void OPPROTO op_fdtoi(void){    *((int32_t *)&FT0) = (int32_t) DT1;}#ifdef TARGET_SPARC64void OPPROTO op_fstox(void){    *((int64_t *)&DT0) = (int64_t) FT1;}void OPPROTO op_fdtox(void){    *((int64_t *)&DT0) = (int64_t) DT1;}void OPPROTO op_fmovs_cc(void){    if (T2)	FT0 = FT1;}void OPPROTO op_fmovd_cc(void){    if (T2)	DT0 = DT1;}void 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--;}void OPPROTO op_restored(void){    env->canrestore++;    if (env->cleanwin < NWINDOWS - 1)	env->cleanwin++;    if (env->otherwin == 0)	env->cansave--;    else	env->otherwin--;}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){    // 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, PARAM3);}#endifvoid OPPROTO op_ld_asi(){    helper_ld_asi(PARAM1, PARAM2, PARAM3);}void OPPROTO op_st_asi(){    helper_st_asi(PARAM1, PARAM2, PARAM3);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -