added CPU_COMMON and CPUState.tb_jmp_cache[]
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1630 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									6e256c935c
								
							
						
					
					
						commit
						a316d3353c
					
				
							
								
								
									
										29
									
								
								cpu-defs.h
								
								
								
								
							
							
						
						
									
										29
									
								
								cpu-defs.h
								
								
								
								
							| 
						 | 
				
			
			@ -77,6 +77,9 @@ typedef unsigned long ram_addr_t;
 | 
			
		|||
 | 
			
		||||
#define MAX_BREAKPOINTS 32
 | 
			
		||||
 | 
			
		||||
#define TB_JMP_CACHE_BITS 12
 | 
			
		||||
#define TB_JMP_CACHE_SIZE (1 << TB_JMP_CACHE_BITS)
 | 
			
		||||
 | 
			
		||||
#define CPU_TLB_SIZE 256
 | 
			
		||||
 | 
			
		||||
typedef struct CPUTLBEntry {
 | 
			
		||||
| 
						 | 
				
			
			@ -91,4 +94,30 @@ typedef struct CPUTLBEntry {
 | 
			
		|||
    target_phys_addr_t addend; 
 | 
			
		||||
} CPUTLBEntry;
 | 
			
		||||
 | 
			
		||||
#define CPU_COMMON                                                      \
 | 
			
		||||
    struct TranslationBlock *current_tb; /* currently executing TB  */  \
 | 
			
		||||
    /* soft mmu support */                                              \
 | 
			
		||||
    /* in order to avoid passing too many arguments to the memory       \
 | 
			
		||||
       write helpers, we store some rarely used information in the CPU  \
 | 
			
		||||
       context) */                                                      \
 | 
			
		||||
    unsigned long mem_write_pc; /* host pc at which the memory was      \
 | 
			
		||||
                                   written */                           \
 | 
			
		||||
    target_ulong mem_write_vaddr; /* target virtual addr at which the   \
 | 
			
		||||
                                     memory was written */              \
 | 
			
		||||
    /* 0 = kernel, 1 = user */                                          \
 | 
			
		||||
    CPUTLBEntry tlb_read[2][CPU_TLB_SIZE];                              \
 | 
			
		||||
    CPUTLBEntry tlb_write[2][CPU_TLB_SIZE];                             \
 | 
			
		||||
    struct TranslationBlock *tb_jmp_cache[TB_JMP_CACHE_SIZE];           \
 | 
			
		||||
                                                                        \
 | 
			
		||||
    /* from this point: preserved by CPU reset */                       \
 | 
			
		||||
    /* ice debug support */                                             \
 | 
			
		||||
    target_ulong breakpoints[MAX_BREAKPOINTS];                          \
 | 
			
		||||
    int nb_breakpoints;                                                 \
 | 
			
		||||
    int singlestep_enabled;                                             \
 | 
			
		||||
                                                                        \
 | 
			
		||||
    /* user data */                                                     \
 | 
			
		||||
    void *opaque;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,22 +60,9 @@ typedef struct CPUARMState {
 | 
			
		|||
    jmp_buf jmp_env;
 | 
			
		||||
    int exception_index;
 | 
			
		||||
    int interrupt_request;
 | 
			
		||||
    struct TranslationBlock *current_tb;
 | 
			
		||||
    int user_mode_only;
 | 
			
		||||
    uint32_t address;
 | 
			
		||||
 | 
			
		||||
    /* ICE debug support.  */
 | 
			
		||||
    target_ulong breakpoints[MAX_BREAKPOINTS];
 | 
			
		||||
    int nb_breakpoints;
 | 
			
		||||
    int singlestep_enabled;
 | 
			
		||||
 | 
			
		||||
    /* in order to avoid passing too many arguments to the memory
 | 
			
		||||
       write helpers, we store some rarely used information in the CPU
 | 
			
		||||
       context) */
 | 
			
		||||
    unsigned long mem_write_pc; /* host pc at which the memory was
 | 
			
		||||
                                   written */
 | 
			
		||||
    unsigned long mem_write_vaddr; /* target virtual addr at which the
 | 
			
		||||
                                      memory was written */
 | 
			
		||||
    /* VFP coprocessor state.  */
 | 
			
		||||
    struct {
 | 
			
		||||
        float64 regs[16];
 | 
			
		||||
| 
						 | 
				
			
			@ -93,8 +80,8 @@ typedef struct CPUARMState {
 | 
			
		|||
        float_status fp_status;
 | 
			
		||||
    } vfp;
 | 
			
		||||
 | 
			
		||||
    /* user data */
 | 
			
		||||
    void *opaque;
 | 
			
		||||
    CPU_COMMON
 | 
			
		||||
 | 
			
		||||
} CPUARMState;
 | 
			
		||||
 | 
			
		||||
CPUARMState *cpu_arm_init(void);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -497,28 +497,11 @@ typedef struct CPUX86State {
 | 
			
		|||
    int error_code;
 | 
			
		||||
    int exception_is_int;
 | 
			
		||||
    target_ulong exception_next_eip;
 | 
			
		||||
    struct TranslationBlock *current_tb; /* currently executing TB */
 | 
			
		||||
    target_ulong dr[8]; /* debug registers */
 | 
			
		||||
    int interrupt_request; 
 | 
			
		||||
    int user_mode_only; /* user mode only simulation */
 | 
			
		||||
 | 
			
		||||
    /* soft mmu support */
 | 
			
		||||
    /* in order to avoid passing too many arguments to the memory
 | 
			
		||||
       write helpers, we store some rarely used information in the CPU
 | 
			
		||||
       context) */
 | 
			
		||||
    unsigned long mem_write_pc; /* host pc at which the memory was
 | 
			
		||||
                                   written */
 | 
			
		||||
    target_ulong mem_write_vaddr; /* target virtual addr at which the
 | 
			
		||||
                                     memory was written */
 | 
			
		||||
    /* 0 = kernel, 1 = user */
 | 
			
		||||
    CPUTLBEntry tlb_read[2][CPU_TLB_SIZE];
 | 
			
		||||
    CPUTLBEntry tlb_write[2][CPU_TLB_SIZE];
 | 
			
		||||
    
 | 
			
		||||
    /* from this point: preserved by CPU reset */
 | 
			
		||||
    /* ice debug support */
 | 
			
		||||
    target_ulong breakpoints[MAX_BREAKPOINTS];
 | 
			
		||||
    int nb_breakpoints;
 | 
			
		||||
    int singlestep_enabled;
 | 
			
		||||
    CPU_COMMON
 | 
			
		||||
 | 
			
		||||
    /* processor features (e.g. for CPUID insn) */
 | 
			
		||||
    uint32_t cpuid_level;
 | 
			
		||||
| 
						 | 
				
			
			@ -538,8 +521,6 @@ typedef struct CPUX86State {
 | 
			
		|||
    /* in order to simplify APIC support, we leave this pointer to the
 | 
			
		||||
       user */
 | 
			
		||||
    struct APICState *apic_state;
 | 
			
		||||
    /* user data */
 | 
			
		||||
    void *opaque;
 | 
			
		||||
} CPUX86State;
 | 
			
		||||
 | 
			
		||||
CPUX86State *cpu_x86_init(void);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -162,24 +162,8 @@ struct CPUMIPSState {
 | 
			
		|||
#define MIPS_HFLAG_BR     0x0800 /* branch to register (can't link TB) */
 | 
			
		||||
    target_ulong btarget;        /* Jump / branch target               */
 | 
			
		||||
    int bcond;                   /* Branch condition (if needed)       */
 | 
			
		||||
    struct TranslationBlock *current_tb; /* currently executing TB  */
 | 
			
		||||
    /* soft mmu support */
 | 
			
		||||
    /* in order to avoid passing too many arguments to the memory
 | 
			
		||||
       write helpers, we store some rarely used information in the CPU
 | 
			
		||||
       context) */
 | 
			
		||||
    target_ulong mem_write_pc; /* host pc at which the memory was
 | 
			
		||||
                                   written */
 | 
			
		||||
    unsigned long mem_write_vaddr; /* target virtual addr at which the
 | 
			
		||||
                                      memory was written */
 | 
			
		||||
    /* 0 = kernel, 1 = user (may have 2 = kernel code, 3 = user code ?) */
 | 
			
		||||
    CPUTLBEntry tlb_read[2][CPU_TLB_SIZE];
 | 
			
		||||
    CPUTLBEntry tlb_write[2][CPU_TLB_SIZE];
 | 
			
		||||
    /* ice debug support */
 | 
			
		||||
    target_ulong breakpoints[MAX_BREAKPOINTS];
 | 
			
		||||
    int nb_breakpoints;
 | 
			
		||||
    int singlestep_enabled; /* XXX: should use CPU single step mode instead */
 | 
			
		||||
    /* user data */
 | 
			
		||||
    void *opaque;
 | 
			
		||||
 | 
			
		||||
    CPU_COMMON
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#include "cpu-all.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -493,19 +493,10 @@ struct CPUPPCState {
 | 
			
		|||
    /* floating point status and control register */
 | 
			
		||||
    uint8_t fpscr[8];
 | 
			
		||||
 | 
			
		||||
    /* soft mmu support */
 | 
			
		||||
    /* 0 = kernel, 1 = user (may have 2 = kernel code, 3 = user code ?) */
 | 
			
		||||
    CPUTLBEntry tlb_read[2][CPU_TLB_SIZE];
 | 
			
		||||
    CPUTLBEntry tlb_write[2][CPU_TLB_SIZE];
 | 
			
		||||
    CPU_COMMON
 | 
			
		||||
 | 
			
		||||
    int access_type; /* when a memory exception occurs, the access
 | 
			
		||||
                        type is stored here */
 | 
			
		||||
    /* in order to avoid passing too many arguments to the memory
 | 
			
		||||
       write helpers, we store some rarely used information in the CPU
 | 
			
		||||
       context) */
 | 
			
		||||
    unsigned long mem_write_pc; /* host pc at which the memory was
 | 
			
		||||
                                   written */
 | 
			
		||||
    unsigned long mem_write_vaddr; /* target virtual addr at which the
 | 
			
		||||
                                      memory was written */
 | 
			
		||||
 | 
			
		||||
    /* MMU context */
 | 
			
		||||
    /* Address space register */
 | 
			
		||||
| 
						 | 
				
			
			@ -564,22 +555,13 @@ struct CPUPPCState {
 | 
			
		|||
    /* Those resources are used only in Qemu core */
 | 
			
		||||
    jmp_buf jmp_env;
 | 
			
		||||
    int user_mode_only; /* user mode only simulation */
 | 
			
		||||
    struct TranslationBlock *current_tb; /* currently executing TB */
 | 
			
		||||
    uint32_t hflags;
 | 
			
		||||
 | 
			
		||||
    /* ice debug support */
 | 
			
		||||
    target_ulong breakpoints[MAX_BREAKPOINTS];
 | 
			
		||||
    int nb_breakpoints;
 | 
			
		||||
    int singlestep_enabled; /* XXX: should use CPU single step mode instead */
 | 
			
		||||
 | 
			
		||||
    /* Power management */
 | 
			
		||||
    int power_mode;
 | 
			
		||||
 | 
			
		||||
    /* temporary hack to handle OSI calls (only used if non NULL) */
 | 
			
		||||
    int (*osi_call)(struct CPUPPCState *env);
 | 
			
		||||
 | 
			
		||||
    /* user data */
 | 
			
		||||
    void *opaque;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*****************************************************************************/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -166,21 +166,11 @@ typedef struct CPUSPARCState {
 | 
			
		|||
    int exception_index;
 | 
			
		||||
    int interrupt_index;
 | 
			
		||||
    int interrupt_request;
 | 
			
		||||
    struct TranslationBlock *current_tb;
 | 
			
		||||
    void *opaque;
 | 
			
		||||
    /* NOTE: we allow 8 more registers to handle wrapping */
 | 
			
		||||
    target_ulong regbase[NWINDOWS * 16 + 8];
 | 
			
		||||
 | 
			
		||||
    /* in order to avoid passing too many arguments to the memory
 | 
			
		||||
       write helpers, we store some rarely used information in the CPU
 | 
			
		||||
       context) */
 | 
			
		||||
    unsigned long mem_write_pc; /* host pc at which the memory was
 | 
			
		||||
                                   written */
 | 
			
		||||
    target_ulong mem_write_vaddr; /* target virtual addr at which the
 | 
			
		||||
                                      memory was written */
 | 
			
		||||
    /* 0 = kernel, 1 = user (may have 2 = kernel code, 3 = user code ?) */
 | 
			
		||||
    CPUTLBEntry tlb_read[2][CPU_TLB_SIZE];
 | 
			
		||||
    CPUTLBEntry tlb_write[2][CPU_TLB_SIZE];
 | 
			
		||||
    CPU_COMMON
 | 
			
		||||
 | 
			
		||||
    /* MMU regs */
 | 
			
		||||
#if defined(TARGET_SPARC64)
 | 
			
		||||
    uint64_t lsu;
 | 
			
		||||
| 
						 | 
				
			
			@ -222,12 +212,6 @@ typedef struct CPUSPARCState {
 | 
			
		|||
#if !defined(TARGET_SPARC64) && !defined(reg_T2)
 | 
			
		||||
    target_ulong t2;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    /* ice debug support */
 | 
			
		||||
    target_ulong breakpoints[MAX_BREAKPOINTS];
 | 
			
		||||
    int nb_breakpoints;
 | 
			
		||||
    int singlestep_enabled; /* XXX: should use CPU single step mode instead */
 | 
			
		||||
 | 
			
		||||
} CPUSPARCState;
 | 
			
		||||
#if defined(TARGET_SPARC64)
 | 
			
		||||
#define GET_FSR32(env) (env->fsr & 0xcfc1ffff)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue