📄 cpu.h
字号:
#if !defined (__MIPS_CPU_H__)#define __MIPS_CPU_H__#define TARGET_HAS_ICE 1#define ELF_MACHINE EM_MIPS#include "config.h"#include "mips-defs.h"#include "cpu-defs.h"#include "softfloat.h"// uint_fast8_t and uint_fast16_t not in <sys/int_types.h>// XXX: move that elsewhere#if defined(HOST_SOLARIS) && HOST_SOLARIS < 10typedef unsigned char uint_fast8_t;typedef unsigned int uint_fast16_t;#endifstruct CPUMIPSState;typedef struct r4k_tlb_t r4k_tlb_t;struct r4k_tlb_t { target_ulong VPN; uint32_t PageMask; uint_fast8_t ASID; uint_fast16_t G:1; uint_fast16_t C0:3; uint_fast16_t C1:3; uint_fast16_t V0:1; uint_fast16_t V1:1; uint_fast16_t D0:1; uint_fast16_t D1:1; target_ulong PFN[2];};typedef struct CPUMIPSTLBContext CPUMIPSTLBContext;struct CPUMIPSTLBContext { uint32_t nb_tlb; uint32_t tlb_in_use; int (*map_address) (struct CPUMIPSState *env, target_ulong *physical, int *prot, target_ulong address, int rw, int access_type); void (*do_tlbwi) (void); void (*do_tlbwr) (void); void (*do_tlbp) (void); void (*do_tlbr) (void); union { struct { r4k_tlb_t tlb[MIPS_TLB_MAX]; } r4k; } mmu;};typedef union fpr_t fpr_t;union fpr_t { float64 fd; /* ieee double precision */ float32 fs[2];/* ieee single precision */ uint64_t d; /* binary double fixed-point */ uint32_t w[2]; /* binary single fixed-point */};/* define FP_ENDIAN_IDX to access the same location * in the fpr_t union regardless of the host endianess */#if defined(WORDS_BIGENDIAN)# define FP_ENDIAN_IDX 1#else# define FP_ENDIAN_IDX 0#endiftypedef struct CPUMIPSFPUContext CPUMIPSFPUContext;struct CPUMIPSFPUContext { /* Floating point registers */ fpr_t fpr[32];#ifndef USE_HOST_FLOAT_REGS fpr_t ft0; fpr_t ft1; fpr_t ft2;#endif float_status fp_status; /* fpu implementation/revision register (fir) */ uint32_t fcr0;#define FCR0_F64 22#define FCR0_L 21#define FCR0_W 20#define FCR0_3D 19#define FCR0_PS 18#define FCR0_D 17#define FCR0_S 16#define FCR0_PRID 8#define FCR0_REV 0 /* fcsr */ uint32_t fcr31;#define SET_FP_COND(num,env) do { ((env)->fcr31) |= ((num) ? (1 << ((num) + 24)) : (1 << 23)); } while(0)#define CLEAR_FP_COND(num,env) do { ((env)->fcr31) &= ~((num) ? (1 << ((num) + 24)) : (1 << 23)); } while(0)#define GET_FP_COND(env) ((((env)->fcr31 >> 24) & 0xfe) | (((env)->fcr31 >> 23) & 0x1))#define GET_FP_CAUSE(reg) (((reg) >> 12) & 0x3f)#define GET_FP_ENABLE(reg) (((reg) >> 7) & 0x1f)#define GET_FP_FLAGS(reg) (((reg) >> 2) & 0x1f)#define SET_FP_CAUSE(reg,v) do { (reg) = ((reg) & ~(0x3f << 12)) | ((v & 0x3f) << 12); } while(0)#define SET_FP_ENABLE(reg,v) do { (reg) = ((reg) & ~(0x1f << 7)) | ((v & 0x1f) << 7); } while(0)#define SET_FP_FLAGS(reg,v) do { (reg) = ((reg) & ~(0x1f << 2)) | ((v & 0x1f) << 2); } while(0)#define UPDATE_FP_FLAGS(reg,v) do { (reg) |= ((v & 0x1f) << 2); } while(0)#define FP_INEXACT 1#define FP_UNDERFLOW 2#define FP_OVERFLOW 4#define FP_DIV0 8#define FP_INVALID 16#define FP_UNIMPLEMENTED 32};#define NB_MMU_MODES 3typedef struct CPUMIPSMVPContext CPUMIPSMVPContext;struct CPUMIPSMVPContext { int32_t CP0_MVPControl;#define CP0MVPCo_CPA 3#define CP0MVPCo_STLB 2#define CP0MVPCo_VPC 1#define CP0MVPCo_EVP 0 int32_t CP0_MVPConf0;#define CP0MVPC0_M 31#define CP0MVPC0_TLBS 29#define CP0MVPC0_GS 28#define CP0MVPC0_PCP 27#define CP0MVPC0_PTLBE 16#define CP0MVPC0_TCA 15#define CP0MVPC0_PVPE 10#define CP0MVPC0_PTC 0 int32_t CP0_MVPConf1;#define CP0MVPC1_CIM 31#define CP0MVPC1_CIF 30#define CP0MVPC1_PCX 20#define CP0MVPC1_PCP2 10#define CP0MVPC1_PCP1 0};typedef struct mips_def_t mips_def_t;#define MIPS_SHADOW_SET_MAX 16#define MIPS_TC_MAX 5#define MIPS_DSP_ACC 4typedef struct CPUMIPSState CPUMIPSState;struct CPUMIPSState { /* General integer registers */ target_ulong gpr[MIPS_SHADOW_SET_MAX][32]; /* Special registers */ target_ulong PC[MIPS_TC_MAX];#if TARGET_LONG_BITS > HOST_LONG_BITS target_ulong t0; target_ulong t1;#endif target_ulong HI[MIPS_TC_MAX][MIPS_DSP_ACC]; target_ulong LO[MIPS_TC_MAX][MIPS_DSP_ACC]; target_ulong ACX[MIPS_TC_MAX][MIPS_DSP_ACC]; target_ulong DSPControl[MIPS_TC_MAX]; CPUMIPSMVPContext *mvp; CPUMIPSTLBContext *tlb; CPUMIPSFPUContext *fpu; uint32_t current_tc; target_ulong *current_tc_gprs; uint32_t SEGBITS; target_ulong SEGMask; uint32_t PABITS; target_ulong PAMask; int32_t CP0_Index; /* CP0_MVP* are per MVP registers. */ int32_t CP0_Random; int32_t CP0_VPEControl;#define CP0VPECo_YSI 21#define CP0VPECo_GSI 20#define CP0VPECo_EXCPT 16#define CP0VPECo_TE 15#define CP0VPECo_TargTC 0 int32_t CP0_VPEConf0;#define CP0VPEC0_M 31#define CP0VPEC0_XTC 21#define CP0VPEC0_TCS 19#define CP0VPEC0_SCS 18#define CP0VPEC0_DSC 17#define CP0VPEC0_ICS 16#define CP0VPEC0_MVP 1#define CP0VPEC0_VPA 0 int32_t CP0_VPEConf1;#define CP0VPEC1_NCX 20#define CP0VPEC1_NCP2 10#define CP0VPEC1_NCP1 0 target_ulong CP0_YQMask; target_ulong CP0_VPESchedule; target_ulong CP0_VPEScheFBack; int32_t CP0_VPEOpt;#define CP0VPEOpt_IWX7 15#define CP0VPEOpt_IWX6 14#define CP0VPEOpt_IWX5 13#define CP0VPEOpt_IWX4 12#define CP0VPEOpt_IWX3 11#define CP0VPEOpt_IWX2 10#define CP0VPEOpt_IWX1 9#define CP0VPEOpt_IWX0 8#define CP0VPEOpt_DWX7 7#define CP0VPEOpt_DWX6 6#define CP0VPEOpt_DWX5 5#define CP0VPEOpt_DWX4 4#define CP0VPEOpt_DWX3 3#define CP0VPEOpt_DWX2 2#define CP0VPEOpt_DWX1 1#define CP0VPEOpt_DWX0 0 target_ulong CP0_EntryLo0; int32_t CP0_TCStatus[MIPS_TC_MAX];#define CP0TCSt_TCU3 31#define CP0TCSt_TCU2 30#define CP0TCSt_TCU1 29#define CP0TCSt_TCU0 28#define CP0TCSt_TMX 27#define CP0TCSt_RNST 23#define CP0TCSt_TDS 21#define CP0TCSt_DT 20#define CP0TCSt_DA 15#define CP0TCSt_A 13#define CP0TCSt_TKSU 11#define CP0TCSt_IXMT 10#define CP0TCSt_TASID 0 int32_t CP0_TCBind[MIPS_TC_MAX];#define CP0TCBd_CurTC 21#define CP0TCBd_TBE 17#define CP0TCBd_CurVPE 0 target_ulong CP0_TCHalt[MIPS_TC_MAX]; target_ulong CP0_TCContext[MIPS_TC_MAX]; target_ulong CP0_TCSchedule[MIPS_TC_MAX]; target_ulong CP0_TCScheFBack[MIPS_TC_MAX]; target_ulong CP0_EntryLo1; target_ulong CP0_Context; int32_t CP0_PageMask; int32_t CP0_PageGrain; int32_t CP0_Wired; int32_t CP0_SRSConf0_rw_bitmask; int32_t CP0_SRSConf0;#define CP0SRSC0_M 31#define CP0SRSC0_SRS3 20#define CP0SRSC0_SRS2 10#define CP0SRSC0_SRS1 0 int32_t CP0_SRSConf1_rw_bitmask; int32_t CP0_SRSConf1;#define CP0SRSC1_M 31#define CP0SRSC1_SRS6 20#define CP0SRSC1_SRS5 10#define CP0SRSC1_SRS4 0 int32_t CP0_SRSConf2_rw_bitmask; int32_t CP0_SRSConf2;#define CP0SRSC2_M 31#define CP0SRSC2_SRS9 20#define CP0SRSC2_SRS8 10#define CP0SRSC2_SRS7 0 int32_t CP0_SRSConf3_rw_bitmask; int32_t CP0_SRSConf3;#define CP0SRSC3_M 31#define CP0SRSC3_SRS12 20#define CP0SRSC3_SRS11 10#define CP0SRSC3_SRS10 0 int32_t CP0_SRSConf4_rw_bitmask; int32_t CP0_SRSConf4;#define CP0SRSC4_SRS15 20#define CP0SRSC4_SRS14 10#define CP0SRSC4_SRS13 0 int32_t CP0_HWREna; target_ulong CP0_BadVAddr; int32_t CP0_Count; target_ulong CP0_EntryHi; int32_t CP0_Compare; int32_t CP0_Status;#define CP0St_CU3 31#define CP0St_CU2 30#define CP0St_CU1 29#define CP0St_CU0 28#define CP0St_RP 27#define CP0St_FR 26#define CP0St_RE 25#define CP0St_MX 24#define CP0St_PX 23#define CP0St_BEV 22#define CP0St_TS 21#define CP0St_SR 20#define CP0St_NMI 19
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -