Annotation of qemu/target-mips/cpu.h, revision 1.1.1.1

1.1       root        1: #if !defined (__MIPS_CPU_H__)
                      2: #define __MIPS_CPU_H__
                      3: 
                      4: #include "mips-defs.h"
                      5: #include "cpu-defs.h"
                      6: #include "config.h"
                      7: #include "softfloat.h"
                      8: 
                      9: typedef union fpr_t fpr_t;
                     10: union fpr_t {
                     11:     double d;
                     12:     float  f;
                     13:     uint32_t u[2];
                     14: };
                     15: 
                     16: #if defined(MIPS_USES_R4K_TLB)
                     17: typedef struct tlb_t tlb_t;
                     18: struct tlb_t {
                     19:     target_ulong VPN;
                     20:     target_ulong end;
                     21:     uint8_t ASID;
                     22:     uint8_t G;
                     23:     uint8_t C[2];
                     24:     uint8_t V[2];
                     25:     uint8_t D[2];
                     26:     target_ulong PFN[2];
                     27: };
                     28: #endif
                     29: 
                     30: typedef struct CPUMIPSState CPUMIPSState;
                     31: struct CPUMIPSState {
                     32:     /* General integer registers */
                     33:     target_ulong gpr[32];
                     34:     /* Special registers */
                     35:     target_ulong PC;
                     36:     uint32_t HI, LO;
                     37:     uint32_t DCR; /* ? */
                     38: #if defined(MIPS_USES_FPU)
                     39:     /* Floating point registers */
                     40:     fpr_t fpr[16];
                     41:     /* Floating point special purpose registers */
                     42:     uint32_t fcr0;
                     43:     uint32_t fcr25;
                     44:     uint32_t fcr26;
                     45:     uint32_t fcr28;
                     46:     uint32_t fcsr;
                     47: #endif
                     48: #if defined(MIPS_USES_R4K_TLB)
                     49:     tlb_t tlb[16];
                     50: #endif
                     51:     uint32_t CP0_index;
                     52:     uint32_t CP0_random;
                     53:     uint32_t CP0_EntryLo0;
                     54:     uint32_t CP0_EntryLo1;
                     55:     uint32_t CP0_Context;
                     56:     uint32_t CP0_PageMask;
                     57:     uint32_t CP0_Wired;
                     58:     uint32_t CP0_BadVAddr;
                     59:     uint32_t CP0_Count;
                     60:     uint32_t CP0_EntryHi;
                     61:     uint32_t CP0_Compare;
                     62:     uint32_t CP0_Status;
                     63: #define CP0St_CU3   31
                     64: #define CP0St_CU2   30
                     65: #define CP0St_CU1   29
                     66: #define CP0St_CU0   28
                     67: #define CP0St_RP    27
                     68: #define CP0St_RE    25
                     69: #define CP0St_BEV   22
                     70: #define CP0St_TS    21
                     71: #define CP0St_SR    20
                     72: #define CP0St_NMI   19
                     73: #define CP0St_IM    8
                     74: #define CP0St_UM    4
                     75: #define CP0St_ERL   2
                     76: #define CP0St_EXL   1
                     77: #define CP0St_IE    0
                     78:     uint32_t CP0_Cause;
                     79: #define CP0Ca_IV   23
                     80:     uint32_t CP0_EPC;
                     81:     uint32_t CP0_PRid;
                     82:     uint32_t CP0_Config0;
                     83: #define CP0C0_M    31
                     84: #define CP0C0_K23  28
                     85: #define CP0C0_KU   25
                     86: #define CP0C0_MDU  20
                     87: #define CP0C0_MM   17
                     88: #define CP0C0_BM   16
                     89: #define CP0C0_BE   15
                     90: #define CP0C0_AT   13
                     91: #define CP0C0_AR   10
                     92: #define CP0C0_MT   7
                     93: #define CP0C0_K0   0
                     94:     uint32_t CP0_Config1;
                     95: #define CP0C1_MMU  25
                     96: #define CP0C1_IS   22
                     97: #define CP0C1_IL   19
                     98: #define CP0C1_IA   16
                     99: #define CP0C1_DS   13
                    100: #define CP0C1_DL   10
                    101: #define CP0C1_DA   7
                    102: #define CP0C1_PC   4
                    103: #define CP0C1_WR   3
                    104: #define CP0C1_CA   2
                    105: #define CP0C1_EP   1
                    106: #define CP0C1_FP   0
                    107:     uint32_t CP0_LLAddr;
                    108:     uint32_t CP0_WatchLo;
                    109:     uint32_t CP0_WatchHi;
                    110:     uint32_t CP0_Debug;
                    111: #define CPDB_DBD   31
                    112: #define CP0DB_DM   30
                    113: #define CP0DB_LSNM 28
                    114: #define CP0DB_Doze 27
                    115: #define CP0DB_Halt 26
                    116: #define CP0DB_CNT  25
                    117: #define CP0DB_IBEP 24
                    118: #define CP0DB_DBEP 21
                    119: #define CP0DB_IEXI 20
                    120: #define CP0DB_VER  15
                    121: #define CP0DB_DEC  10
                    122: #define CP0DB_SSt  8
                    123: #define CP0DB_DINT 5
                    124: #define CP0DB_DIB  4
                    125: #define CP0DB_DDBS 3
                    126: #define CP0DB_DDBL 2
                    127: #define CP0DB_DBp  1
                    128: #define CP0DB_DSS  0
                    129:     uint32_t CP0_DEPC;
                    130:     uint32_t CP0_TagLo;
                    131:     uint32_t CP0_DataLo;
                    132:     uint32_t CP0_ErrorEPC;
                    133:     uint32_t CP0_DESAVE;
                    134:     /* Qemu */
                    135: #if defined (USE_HOST_FLOAT_REGS) && defined(MIPS_USES_FPU)
                    136:     double ft0, ft1, ft2;
                    137: #endif
                    138:     struct QEMUTimer *timer; /* Internal timer */
                    139:     int interrupt_request;
                    140:     jmp_buf jmp_env;
                    141:     int exception_index;
                    142:     int error_code;
                    143:     int user_mode_only; /* user mode only simulation */
                    144:     uint32_t hflags;    /* CPU State */
                    145:     /* TMASK defines different execution modes */
                    146: #define MIPS_HFLAGS_TMASK 0x00FF
                    147: #define MIPS_HFLAG_MODE   0x001F /* execution modes                    */
                    148: #define MIPS_HFLAG_UM     0x0001 /* user mode                          */
                    149: #define MIPS_HFLAG_ERL    0x0002 /* Error mode                         */
                    150: #define MIPS_HFLAG_EXL    0x0004 /* Exception mode                     */
                    151: #define MIPS_HFLAG_DM     0x0008 /* Debug mode                         */
                    152: #define MIPS_HFLAG_SM     0x0010 /* Supervisor mode                    */
                    153: #define MIPS_HFLAG_RE     0x0040 /* Reversed endianness                */
                    154: #define MIPS_HFLAG_DS     0x0080 /* In / out of delay slot             */
                    155:     /* Those flags keep the branch state if the translation is interrupted
                    156:      * between the branch instruction and the delay slot
                    157:      */
                    158: #define MIPS_HFLAG_BMASK  0x0F00
                    159: #define MIPS_HFLAG_B      0x0100 /* Unconditional branch               */
                    160: #define MIPS_HFLAG_BC     0x0200 /* Conditional branch                 */
                    161: #define MIPS_HFLAG_BL     0x0400 /* Likely branch                      */
                    162: #define MIPS_HFLAG_BR     0x0800 /* branch to register (can't link TB) */
                    163:     target_ulong btarget;        /* Jump / branch target               */
                    164:     int bcond;                   /* Branch condition (if needed)       */
                    165:     struct TranslationBlock *current_tb; /* currently executing TB  */
                    166:     /* soft mmu support */
                    167:     /* in order to avoid passing too many arguments to the memory
                    168:        write helpers, we store some rarely used information in the CPU
                    169:        context) */
                    170:     target_ulong mem_write_pc; /* host pc at which the memory was
                    171:                                    written */
                    172:     unsigned long mem_write_vaddr; /* target virtual addr at which the
                    173:                                       memory was written */
                    174:     /* 0 = kernel, 1 = user (may have 2 = kernel code, 3 = user code ?) */
                    175:     CPUTLBEntry tlb_read[2][CPU_TLB_SIZE];
                    176:     CPUTLBEntry tlb_write[2][CPU_TLB_SIZE];
                    177:     /* ice debug support */
                    178:     target_ulong breakpoints[MAX_BREAKPOINTS];
                    179:     int nb_breakpoints;
                    180:     int singlestep_enabled; /* XXX: should use CPU single step mode instead */
                    181:     /* user data */
                    182:     void *opaque;
                    183: };
                    184: 
                    185: #include "cpu-all.h"
                    186: 
                    187: /* Memory access type :
                    188:  * may be needed for precise access rights control and precise exceptions.
                    189:  */
                    190: enum {
                    191:     /* 1 bit to define user level / supervisor access */
                    192:     ACCESS_USER  = 0x00,
                    193:     ACCESS_SUPER = 0x01,
                    194:     /* 1 bit to indicate direction */
                    195:     ACCESS_STORE = 0x02,
                    196:     /* Type of instruction that generated the access */
                    197:     ACCESS_CODE  = 0x10, /* Code fetch access                */
                    198:     ACCESS_INT   = 0x20, /* Integer load/store access        */
                    199:     ACCESS_FLOAT = 0x30, /* floating point load/store access */
                    200: };
                    201: 
                    202: /* Exceptions */
                    203: enum {
                    204:     EXCP_NONE          = -1,
                    205:     EXCP_RESET         = 0,
                    206:     EXCP_SRESET,
                    207:     EXCP_DSS,
                    208:     EXCP_DINT,
                    209:     EXCP_NMI,
                    210:     EXCP_MCHECK,
                    211:     EXCP_EXT_INTERRUPT,
                    212:     EXCP_DFWATCH,
                    213:     EXCP_DIB, /* 8 */
                    214:     EXCP_IWATCH,
                    215:     EXCP_AdEL,
                    216:     EXCP_AdES,
                    217:     EXCP_TLBF,
                    218:     EXCP_IBE,
                    219:     EXCP_DBp,
                    220:     EXCP_SYSCALL,
                    221:     EXCP_BREAK,
                    222:     EXCP_CpU, /* 16 */
                    223:     EXCP_RI,
                    224:     EXCP_OVERFLOW,
                    225:     EXCP_TRAP,
                    226:     EXCP_DDBS,
                    227:     EXCP_DWATCH,
                    228:     EXCP_LAE, /* 22 */
                    229:     EXCP_SAE,
                    230:     EXCP_LTLBL,
                    231:     EXCP_TLBL,
                    232:     EXCP_TLBS,
                    233:     EXCP_DBE,
                    234:     EXCP_DDBL,
                    235:     EXCP_MTCP0         = 0x104, /* mtmsr instruction:               */
                    236:                                 /* may change privilege level       */
                    237:     EXCP_BRANCH        = 0x108, /* branch instruction               */
                    238:     EXCP_ERET          = 0x10C, /* return from interrupt            */
                    239:     EXCP_SYSCALL_USER  = 0x110, /* System call in user mode only    */
                    240:     EXCP_FLUSH         = 0x109,
                    241: };
                    242: 
                    243: int cpu_mips_exec(CPUMIPSState *s);
                    244: CPUMIPSState *cpu_mips_init(void);
                    245: uint32_t cpu_mips_get_clock (void);
                    246: 
                    247: #endif /* !defined (__MIPS_CPU_H__) */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.