📄 sim-main.h
字号:
void cop_lw PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, int coproc_num, int coproc_reg, unsigned int memword));void cop_ld PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, int coproc_num, int coproc_reg, uword64 memword));unsigned int cop_sw PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, int coproc_num, int coproc_reg));uword64 cop_sd PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, int coproc_num, int coproc_reg));#define COP_LW(coproc_num,coproc_reg,memword) \cop_lw (SD, CPU, cia, coproc_num, coproc_reg, memword)#define COP_LD(coproc_num,coproc_reg,memword) \cop_ld (SD, CPU, cia, coproc_num, coproc_reg, memword)#define COP_SW(coproc_num,coproc_reg) \cop_sw (SD, CPU, cia, coproc_num, coproc_reg)#define COP_SD(coproc_num,coproc_reg) \cop_sd (SD, CPU, cia, coproc_num, coproc_reg)void decode_coproc PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, unsigned int instruction));#define DecodeCoproc(instruction) \decode_coproc (SD, CPU, cia, (instruction))int sim_monitor (SIM_DESC sd, sim_cpu *cpu, address_word cia, unsigned int arg); /* FPR access. */unsigned64 value_fpr (SIM_STATE, int fpr, FP_formats);#define ValueFPR(FPR,FMT) value_fpr (SIM_ARGS, (FPR), (FMT))void store_fpr (SIM_STATE, int fpr, FP_formats fmt, unsigned64 value);#define StoreFPR(FPR,FMT,VALUE) store_fpr (SIM_ARGS, (FPR), (FMT), (VALUE))unsigned64 ps_lower (SIM_STATE, unsigned64 op);#define PSLower(op) ps_lower (SIM_ARGS, op)unsigned64 ps_upper (SIM_STATE, unsigned64 op);#define PSUpper(op) ps_upper (SIM_ARGS, op)unsigned64 pack_ps (SIM_STATE, unsigned64 op1, unsigned64 op2, FP_formats from);#define PackPS(op1,op2) pack_ps (SIM_ARGS, op1, op2, fmt_single)/* FCR access. */unsigned_word value_fcr (SIM_STATE, int fcr);#define ValueFCR(FCR) value_fcr (SIM_ARGS, (FCR))void store_fcr (SIM_STATE, int fcr, unsigned_word value);#define StoreFCR(FCR,VALUE) store_fcr (SIM_ARGS, (FCR), (VALUE))void test_fcsr (SIM_STATE);#define TestFCSR() test_fcsr (SIM_ARGS)/* FPU operations. */void fp_cmp (SIM_STATE, unsigned64 op1, unsigned64 op2, FP_formats fmt, int abs, int cond, int cc);#define Compare(op1,op2,fmt,cond,cc) fp_cmp(SIM_ARGS, op1, op2, fmt, 0, cond, cc)unsigned64 fp_abs (SIM_STATE, unsigned64 op, FP_formats fmt);#define AbsoluteValue(op,fmt) fp_abs(SIM_ARGS, op, fmt)unsigned64 fp_neg (SIM_STATE, unsigned64 op, FP_formats fmt);#define Negate(op,fmt) fp_neg(SIM_ARGS, op, fmt)unsigned64 fp_add (SIM_STATE, unsigned64 op1, unsigned64 op2, FP_formats fmt);#define Add(op1,op2,fmt) fp_add(SIM_ARGS, op1, op2, fmt)unsigned64 fp_sub (SIM_STATE, unsigned64 op1, unsigned64 op2, FP_formats fmt);#define Sub(op1,op2,fmt) fp_sub(SIM_ARGS, op1, op2, fmt)unsigned64 fp_mul (SIM_STATE, unsigned64 op1, unsigned64 op2, FP_formats fmt);#define Multiply(op1,op2,fmt) fp_mul(SIM_ARGS, op1, op2, fmt)unsigned64 fp_div (SIM_STATE, unsigned64 op1, unsigned64 op2, FP_formats fmt);#define Divide(op1,op2,fmt) fp_div(SIM_ARGS, op1, op2, fmt)unsigned64 fp_recip (SIM_STATE, unsigned64 op, FP_formats fmt);#define Recip(op,fmt) fp_recip(SIM_ARGS, op, fmt)unsigned64 fp_sqrt (SIM_STATE, unsigned64 op, FP_formats fmt);#define SquareRoot(op,fmt) fp_sqrt(SIM_ARGS, op, fmt)unsigned64 fp_rsqrt (SIM_STATE, unsigned64 op, FP_formats fmt);#define RSquareRoot(op,fmt) fp_rsqrt(SIM_ARGS, op, fmt)unsigned64 fp_madd (SIM_STATE, unsigned64 op1, unsigned64 op2, unsigned64 op3, FP_formats fmt);#define MultiplyAdd(op1,op2,op3,fmt) fp_madd(SIM_ARGS, op1, op2, op3, fmt)unsigned64 fp_msub (SIM_STATE, unsigned64 op1, unsigned64 op2, unsigned64 op3, FP_formats fmt);#define MultiplySub(op1,op2,op3,fmt) fp_msub(SIM_ARGS, op1, op2, op3, fmt)unsigned64 fp_nmadd (SIM_STATE, unsigned64 op1, unsigned64 op2, unsigned64 op3, FP_formats fmt);#define NegMultiplyAdd(op1,op2,op3,fmt) fp_nmadd(SIM_ARGS, op1, op2, op3, fmt)unsigned64 fp_nmsub (SIM_STATE, unsigned64 op1, unsigned64 op2, unsigned64 op3, FP_formats fmt);#define NegMultiplySub(op1,op2,op3,fmt) fp_nmsub(SIM_ARGS, op1, op2, op3, fmt)unsigned64 convert (SIM_STATE, int rm, unsigned64 op, FP_formats from, FP_formats to);#define Convert(rm,op,from,to) convert (SIM_ARGS, rm, op, from, to)unsigned64 convert_ps (SIM_STATE, int rm, unsigned64 op, FP_formats from, FP_formats to);#define ConvertPS(rm,op,from,to) convert_ps (SIM_ARGS, rm, op, from, to)/* MIPS-3D ASE operations. */#define CompareAbs(op1,op2,fmt,cond,cc) \fp_cmp(SIM_ARGS, op1, op2, fmt, 1, cond, cc)unsigned64 fp_add_r (SIM_STATE, unsigned64 op1, unsigned64 op2, FP_formats fmt);#define AddR(op1,op2,fmt) fp_add_r(SIM_ARGS, op1, op2, fmt)unsigned64 fp_mul_r (SIM_STATE, unsigned64 op1, unsigned64 op2, FP_formats fmt);#define MultiplyR(op1,op2,fmt) fp_mul_r(SIM_ARGS, op1, op2, fmt)unsigned64 fp_recip1 (SIM_STATE, unsigned64 op, FP_formats fmt);#define Recip1(op,fmt) fp_recip1(SIM_ARGS, op, fmt)unsigned64 fp_recip2 (SIM_STATE, unsigned64 op1, unsigned64 op2, FP_formats fmt);#define Recip2(op1,op2,fmt) fp_recip2(SIM_ARGS, op1, op2, fmt)unsigned64 fp_rsqrt1 (SIM_STATE, unsigned64 op, FP_formats fmt);#define RSquareRoot1(op,fmt) fp_rsqrt1(SIM_ARGS, op, fmt)unsigned64 fp_rsqrt2 (SIM_STATE, unsigned64 op1, unsigned64 op2, FP_formats fmt);#define RSquareRoot2(op1,op2,fmt) fp_rsqrt2(SIM_ARGS, op1, op2, fmt)/* MDMX access. */typedef unsigned int MX_fmtsel; /* MDMX format select field (5 bits). */#define ob_fmtsel(sel) (((sel)<<1)|0x0)#define qh_fmtsel(sel) (((sel)<<2)|0x1)#define fmt_mdmx fmt_uninterpreted#define MX_VECT_AND (0)#define MX_VECT_NOR (1)#define MX_VECT_OR (2)#define MX_VECT_XOR (3)#define MX_VECT_SLL (4)#define MX_VECT_SRL (5)#define MX_VECT_ADD (6)#define MX_VECT_SUB (7)#define MX_VECT_MIN (8)#define MX_VECT_MAX (9)#define MX_VECT_MUL (10)#define MX_VECT_MSGN (11)#define MX_VECT_SRA (12)#define MX_VECT_ABSD (13) /* SB-1 only. */#define MX_VECT_AVG (14) /* SB-1 only. */unsigned64 mdmx_cpr_op (SIM_STATE, int op, unsigned64 op1, int vt, MX_fmtsel fmtsel);#define MX_Add(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_ADD, op1, vt, fmtsel)#define MX_And(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_AND, op1, vt, fmtsel)#define MX_Max(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_MAX, op1, vt, fmtsel)#define MX_Min(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_MIN, op1, vt, fmtsel)#define MX_Msgn(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_MSGN, op1, vt, fmtsel)#define MX_Mul(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_MUL, op1, vt, fmtsel)#define MX_Nor(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_NOR, op1, vt, fmtsel)#define MX_Or(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_OR, op1, vt, fmtsel)#define MX_ShiftLeftLogical(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_SLL, op1, vt, fmtsel)#define MX_ShiftRightArith(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_SRA, op1, vt, fmtsel)#define MX_ShiftRightLogical(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_SRL, op1, vt, fmtsel)#define MX_Sub(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_SUB, op1, vt, fmtsel)#define MX_Xor(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_XOR, op1, vt, fmtsel)#define MX_AbsDiff(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_ABSD, op1, vt, fmtsel)#define MX_Avg(op1,vt,fmtsel) mdmx_cpr_op(SIM_ARGS, MX_VECT_AVG, op1, vt, fmtsel)#define MX_C_EQ 0x1#define MX_C_LT 0x4void mdmx_cc_op (SIM_STATE, int cond, unsigned64 op1, int vt, MX_fmtsel fmtsel);#define MX_Comp(op1,cond,vt,fmtsel) mdmx_cc_op(SIM_ARGS, cond, op1, vt, fmtsel)unsigned64 mdmx_pick_op (SIM_STATE, int tf, unsigned64 op1, int vt, MX_fmtsel fmtsel);#define MX_Pick(tf,op1,vt,fmtsel) mdmx_pick_op(SIM_ARGS, tf, op1, vt, fmtsel)#define MX_VECT_ADDA (0)#define MX_VECT_ADDL (1)#define MX_VECT_MULA (2)#define MX_VECT_MULL (3)#define MX_VECT_MULS (4)#define MX_VECT_MULSL (5)#define MX_VECT_SUBA (6)#define MX_VECT_SUBL (7)#define MX_VECT_ABSDA (8) /* SB-1 only. */void mdmx_acc_op (SIM_STATE, int op, unsigned64 op1, int vt, MX_fmtsel fmtsel);#define MX_AddA(op1,vt,fmtsel) mdmx_acc_op(SIM_ARGS, MX_VECT_ADDA, op1, vt, fmtsel)#define MX_AddL(op1,vt,fmtsel) mdmx_acc_op(SIM_ARGS, MX_VECT_ADDL, op1, vt, fmtsel)#define MX_MulA(op1,vt,fmtsel) mdmx_acc_op(SIM_ARGS, MX_VECT_MULA, op1, vt, fmtsel)#define MX_MulL(op1,vt,fmtsel) mdmx_acc_op(SIM_ARGS, MX_VECT_MULL, op1, vt, fmtsel)#define MX_MulS(op1,vt,fmtsel) mdmx_acc_op(SIM_ARGS, MX_VECT_MULS, op1, vt, fmtsel)#define MX_MulSL(op1,vt,fmtsel) mdmx_acc_op(SIM_ARGS, MX_VECT_MULSL, op1, vt, fmtsel)#define MX_SubA(op1,vt,fmtsel) mdmx_acc_op(SIM_ARGS, MX_VECT_SUBA, op1, vt, fmtsel)#define MX_SubL(op1,vt,fmtsel) mdmx_acc_op(SIM_ARGS, MX_VECT_SUBL, op1, vt, fmtsel)#define MX_AbsDiffC(op1,vt,fmtsel) mdmx_acc_op(SIM_ARGS, MX_VECT_ABSDA, op1, vt, fmtsel)#define MX_FMT_OB (0)#define MX_FMT_QH (1)/* The following codes chosen to indicate the units of shift. */#define MX_RAC_L (0)#define MX_RAC_M (1)#define MX_RAC_H (2)unsigned64 mdmx_rac_op (SIM_STATE, int, int);#define MX_RAC(op,fmt) mdmx_rac_op(SIM_ARGS, op, fmt)void mdmx_wacl (SIM_STATE, int, unsigned64, unsigned64);#define MX_WACL(fmt,vs,vt) mdmx_wacl(SIM_ARGS, fmt, vs, vt)void mdmx_wach (SIM_STATE, int, unsigned64);#define MX_WACH(fmt,vs) mdmx_wach(SIM_ARGS, fmt, vs)#define MX_RND_AS (0)#define MX_RND_AU (1)#define MX_RND_ES (2)#define MX_RND_EU (3)#define MX_RND_ZS (4)#define MX_RND_ZU (5)unsigned64 mdmx_round_op (SIM_STATE, int, int, MX_fmtsel);#define MX_RNAS(vt,fmt) mdmx_round_op(SIM_ARGS, MX_RND_AS, vt, fmt)#define MX_RNAU(vt,fmt) mdmx_round_op(SIM_ARGS, MX_RND_AU, vt, fmt)#define MX_RNES(vt,fmt) mdmx_round_op(SIM_ARGS, MX_RND_ES, vt, fmt)#define MX_RNEU(vt,fmt) mdmx_round_op(SIM_ARGS, MX_RND_EU, vt, fmt)#define MX_RZS(vt,fmt) mdmx_round_op(SIM_ARGS, MX_RND_ZS, vt, fmt)#define MX_RZU(vt,fmt) mdmx_round_op(SIM_ARGS, MX_RND_ZU, vt, fmt)unsigned64 mdmx_shuffle (SIM_STATE, int, unsigned64, unsigned64);#define MX_SHFL(shop,op1,op2) mdmx_shuffle(SIM_ARGS, shop, op1, op2)/* Memory accesses *//* The following are generic to all versions of the MIPS architecture to date: *//* Memory Access Types (for CCA): */#define Uncached (0)#define CachedNoncoherent (1)#define CachedCoherent (2)#define Cached (3)#define isINSTRUCTION (1 == 0) /* FALSE */#define isDATA (1 == 1) /* TRUE */#define isLOAD (1 == 0) /* FALSE */#define isSTORE (1 == 1) /* TRUE */#define isREAL (1 == 0) /* FALSE */#define isRAW (1 == 1) /* TRUE *//* The parameter HOST (isTARGET / isHOST) is ignored */#define isTARGET (1 == 0) /* FALSE *//* #define isHOST (1 == 1) TRUE *//* The "AccessLength" specifications for Loads and Stores. NOTE: This is the number of bytes minus 1. */#define AccessLength_BYTE (0)#define AccessLength_HALFWORD (1)#define AccessLength_TRIPLEBYTE (2)#define AccessLength_WORD (3)#define AccessLength_QUINTIBYTE (4)#define AccessLength_SEXTIBYTE (5)#define AccessLength_SEPTIBYTE (6)#define AccessLength_DOUBLEWORD (7)#define AccessLength_QUADWORD (15)#define LOADDRMASK (WITH_TARGET_WORD_BITSIZE == 64 \ ? AccessLength_DOUBLEWORD /*7*/ \ : AccessLength_WORD /*3*/)#define PSIZE (WITH_TARGET_ADDRESS_BITSIZE)INLINE_SIM_MAIN (int) address_translation PARAMS ((SIM_DESC sd, sim_cpu *, address_word cia, address_word vAddr, int IorD, int LorS, address_word *pAddr, int *CCA, int raw));#define AddressTranslation(vAddr,IorD,LorS,pAddr,CCA,host,raw) \address_translation (SD, CPU, cia, vAddr, IorD, LorS, pAddr, CCA, raw)INLINE_SIM_MAIN (void) load_memory PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, uword64* memvalp, uword64* memval1p, int CCA, unsigned int AccessLength, address_word pAddr, address_word vAddr, int IorD));#define LoadMemory(memvalp,memval1p,CCA,AccessLength,pAddr,vAddr,IorD,raw) \load_memory (SD, CPU, cia, memvalp, memval1p, CCA, AccessLength, pAddr, vAddr, IorD)INLINE_SIM_MAIN (void) store_memory PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, int CCA, unsigned int AccessLength, uword64 MemElem, uword64 MemElem1, address_word pAddr, address_word vAddr));#define StoreMemory(CCA,AccessLength,MemElem,MemElem1,pAddr,vAddr,raw) \store_memory (SD, CPU, cia, CCA, AccessLength, MemElem, MemElem1, pAddr, vAddr)INLINE_SIM_MAIN (void) cache_op PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, int op, address_word pAddr, address_word vAddr, unsigned int instruction));#define CacheOp(op,pAddr,vAddr,instruction) \cache_op (SD, CPU, cia, op, pAddr, vAddr, instruction)INLINE_SIM_MAIN (void) sync_operation PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, int stype));#define SyncOperation(stype) \sync_operation (SD, CPU, cia, (stype))INLINE_SIM_MAIN (void) prefetch PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, int CCA, address_word pAddr, address_word vAddr, int DATA, int hint));#define Prefetch(CCA,pAddr,vAddr,DATA,hint) \prefetch (SD, CPU, cia, CCA, pAddr, vAddr, DATA, hint)void unpredictable_action (sim_cpu *cpu, address_word cia);#define NotWordValue(val) not_word_value (SD_, (val))#define Unpredictable() unpredictable (SD_)#define UnpredictableResult() /* For now, do nothing. */INLINE_SIM_MAIN (unsigned32) ifetch32 PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, address_word vaddr));#define IMEM32(CIA) ifetch32 (SD, CPU, (CIA), (CIA))INLINE_SIM_MAIN (unsigned16) ifetch16 PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, address_word vaddr));#define IMEM16(CIA) ifetch16 (SD, CPU, (CIA), ((CIA) & ~1))#define IMEM16_IMMED(CIA,NR) ifetch16 (SD, CPU, (CIA), ((CIA) & ~1) + 2 * (NR))void dotrace PARAMS ((SIM_DESC sd, sim_cpu *cpu, FILE *tracefh, int type, SIM_ADDR address, int width, char *comment, ...));extern FILE *tracefh;INLINE_SIM_MAIN (void) pending_tick PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia));extern SIM_CORE_SIGNAL_FN mips_core_signal;char* pr_addr PARAMS ((SIM_ADDR addr));char* pr_uword64 PARAMS ((uword64 addr));#define GPR_CLEAR(N) do { GPR_SET((N),0); } while (0)void mips_cpu_exception_trigger(SIM_DESC sd, sim_cpu* cpu, address_word pc);void mips_cpu_exception_suspend(SIM_DESC sd, sim_cpu* cpu, int exception);void mips_cpu_exception_resume(SIM_DESC sd, sim_cpu* cpu, int exception);#ifdef MIPS_MACH_MULTIextern int mips_mach_multi(SIM_DESC sd);#define MIPS_MACH(SD) mips_mach_multi(SD)#else#define MIPS_MACH(SD) MIPS_MACH_DEFAULT#endif/* Macros for determining whether a MIPS IV or MIPS V part is subject to the hi/lo restrictions described in mips.igen. */#define MIPS_MACH_HAS_MT_HILO_HAZARD(SD) \ (MIPS_MACH (SD) != bfd_mach_mips5500)#define MIPS_MACH_HAS_MULT_HILO_HAZARD(SD) \ (MIPS_MACH (SD) != bfd_mach_mips5500)#define MIPS_MACH_HAS_DIV_HILO_HAZARD(SD) \ (MIPS_MACH (SD) != bfd_mach_mips5500)#if H_REVEALS_MODULE_P (SIM_MAIN_INLINE)#include "sim-main.c"#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -