Commit a316d3353cefb6634f8007c8bb18f4744a66766b

Authored by bellard
1 parent 6e256c93

added CPU_COMMON and CPUState.tb_jmp_cache[]


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1630 c046a42c-6fe2-441c-8c8c-71466251a162
cpu-defs.h
... ... @@ -77,6 +77,9 @@ typedef unsigned long ram_addr_t;
77 77  
78 78 #define MAX_BREAKPOINTS 32
79 79  
  80 +#define TB_JMP_CACHE_BITS 12
  81 +#define TB_JMP_CACHE_SIZE (1 << TB_JMP_CACHE_BITS)
  82 +
80 83 #define CPU_TLB_SIZE 256
81 84  
82 85 typedef struct CPUTLBEntry {
... ... @@ -91,4 +94,30 @@ typedef struct CPUTLBEntry {
91 94 target_phys_addr_t addend;
92 95 } CPUTLBEntry;
93 96  
  97 +#define CPU_COMMON \
  98 + struct TranslationBlock *current_tb; /* currently executing TB */ \
  99 + /* soft mmu support */ \
  100 + /* in order to avoid passing too many arguments to the memory \
  101 + write helpers, we store some rarely used information in the CPU \
  102 + context) */ \
  103 + unsigned long mem_write_pc; /* host pc at which the memory was \
  104 + written */ \
  105 + target_ulong mem_write_vaddr; /* target virtual addr at which the \
  106 + memory was written */ \
  107 + /* 0 = kernel, 1 = user */ \
  108 + CPUTLBEntry tlb_read[2][CPU_TLB_SIZE]; \
  109 + CPUTLBEntry tlb_write[2][CPU_TLB_SIZE]; \
  110 + struct TranslationBlock *tb_jmp_cache[TB_JMP_CACHE_SIZE]; \
  111 + \
  112 + /* from this point: preserved by CPU reset */ \
  113 + /* ice debug support */ \
  114 + target_ulong breakpoints[MAX_BREAKPOINTS]; \
  115 + int nb_breakpoints; \
  116 + int singlestep_enabled; \
  117 + \
  118 + /* user data */ \
  119 + void *opaque;
  120 +
  121 +
  122 +
94 123 #endif
... ...
target-arm/cpu.h
... ... @@ -60,22 +60,9 @@ typedef struct CPUARMState {
60 60 jmp_buf jmp_env;
61 61 int exception_index;
62 62 int interrupt_request;
63   - struct TranslationBlock *current_tb;
64 63 int user_mode_only;
65 64 uint32_t address;
66 65  
67   - /* ICE debug support. */
68   - target_ulong breakpoints[MAX_BREAKPOINTS];
69   - int nb_breakpoints;
70   - int singlestep_enabled;
71   -
72   - /* in order to avoid passing too many arguments to the memory
73   - write helpers, we store some rarely used information in the CPU
74   - context) */
75   - unsigned long mem_write_pc; /* host pc at which the memory was
76   - written */
77   - unsigned long mem_write_vaddr; /* target virtual addr at which the
78   - memory was written */
79 66 /* VFP coprocessor state. */
80 67 struct {
81 68 float64 regs[16];
... ... @@ -93,8 +80,8 @@ typedef struct CPUARMState {
93 80 float_status fp_status;
94 81 } vfp;
95 82  
96   - /* user data */
97   - void *opaque;
  83 + CPU_COMMON
  84 +
98 85 } CPUARMState;
99 86  
100 87 CPUARMState *cpu_arm_init(void);
... ...
target-i386/cpu.h
... ... @@ -497,28 +497,11 @@ typedef struct CPUX86State {
497 497 int error_code;
498 498 int exception_is_int;
499 499 target_ulong exception_next_eip;
500   - struct TranslationBlock *current_tb; /* currently executing TB */
501 500 target_ulong dr[8]; /* debug registers */
502 501 int interrupt_request;
503 502 int user_mode_only; /* user mode only simulation */
504 503  
505   - /* soft mmu support */
506   - /* in order to avoid passing too many arguments to the memory
507   - write helpers, we store some rarely used information in the CPU
508   - context) */
509   - unsigned long mem_write_pc; /* host pc at which the memory was
510   - written */
511   - target_ulong mem_write_vaddr; /* target virtual addr at which the
512   - memory was written */
513   - /* 0 = kernel, 1 = user */
514   - CPUTLBEntry tlb_read[2][CPU_TLB_SIZE];
515   - CPUTLBEntry tlb_write[2][CPU_TLB_SIZE];
516   -
517   - /* from this point: preserved by CPU reset */
518   - /* ice debug support */
519   - target_ulong breakpoints[MAX_BREAKPOINTS];
520   - int nb_breakpoints;
521   - int singlestep_enabled;
  504 + CPU_COMMON
522 505  
523 506 /* processor features (e.g. for CPUID insn) */
524 507 uint32_t cpuid_level;
... ... @@ -538,8 +521,6 @@ typedef struct CPUX86State {
538 521 /* in order to simplify APIC support, we leave this pointer to the
539 522 user */
540 523 struct APICState *apic_state;
541   - /* user data */
542   - void *opaque;
543 524 } CPUX86State;
544 525  
545 526 CPUX86State *cpu_x86_init(void);
... ...
target-mips/cpu.h
... ... @@ -162,24 +162,8 @@ struct CPUMIPSState {
162 162 #define MIPS_HFLAG_BR 0x0800 /* branch to register (can't link TB) */
163 163 target_ulong btarget; /* Jump / branch target */
164 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;
  165 +
  166 + CPU_COMMON
183 167 };
184 168  
185 169 #include "cpu-all.h"
... ...
target-ppc/cpu.h
... ... @@ -493,19 +493,10 @@ struct CPUPPCState {
493 493 /* floating point status and control register */
494 494 uint8_t fpscr[8];
495 495  
496   - /* soft mmu support */
497   - /* 0 = kernel, 1 = user (may have 2 = kernel code, 3 = user code ?) */
498   - CPUTLBEntry tlb_read[2][CPU_TLB_SIZE];
499   - CPUTLBEntry tlb_write[2][CPU_TLB_SIZE];
  496 + CPU_COMMON
  497 +
500 498 int access_type; /* when a memory exception occurs, the access
501 499 type is stored here */
502   - /* in order to avoid passing too many arguments to the memory
503   - write helpers, we store some rarely used information in the CPU
504   - context) */
505   - unsigned long mem_write_pc; /* host pc at which the memory was
506   - written */
507   - unsigned long mem_write_vaddr; /* target virtual addr at which the
508   - memory was written */
509 500  
510 501 /* MMU context */
511 502 /* Address space register */
... ... @@ -564,22 +555,13 @@ struct CPUPPCState {
564 555 /* Those resources are used only in Qemu core */
565 556 jmp_buf jmp_env;
566 557 int user_mode_only; /* user mode only simulation */
567   - struct TranslationBlock *current_tb; /* currently executing TB */
568 558 uint32_t hflags;
569 559  
570   - /* ice debug support */
571   - target_ulong breakpoints[MAX_BREAKPOINTS];
572   - int nb_breakpoints;
573   - int singlestep_enabled; /* XXX: should use CPU single step mode instead */
574   -
575 560 /* Power management */
576 561 int power_mode;
577 562  
578 563 /* temporary hack to handle OSI calls (only used if non NULL) */
579 564 int (*osi_call)(struct CPUPPCState *env);
580   -
581   - /* user data */
582   - void *opaque;
583 565 };
584 566  
585 567 /*****************************************************************************/
... ...
target-sparc/cpu.h
... ... @@ -166,21 +166,11 @@ typedef struct CPUSPARCState {
166 166 int exception_index;
167 167 int interrupt_index;
168 168 int interrupt_request;
169   - struct TranslationBlock *current_tb;
170   - void *opaque;
171 169 /* NOTE: we allow 8 more registers to handle wrapping */
172 170 target_ulong regbase[NWINDOWS * 16 + 8];
173 171  
174   - /* in order to avoid passing too many arguments to the memory
175   - write helpers, we store some rarely used information in the CPU
176   - context) */
177   - unsigned long mem_write_pc; /* host pc at which the memory was
178   - written */
179   - target_ulong mem_write_vaddr; /* target virtual addr at which the
180   - memory was written */
181   - /* 0 = kernel, 1 = user (may have 2 = kernel code, 3 = user code ?) */
182   - CPUTLBEntry tlb_read[2][CPU_TLB_SIZE];
183   - CPUTLBEntry tlb_write[2][CPU_TLB_SIZE];
  172 + CPU_COMMON
  173 +
184 174 /* MMU regs */
185 175 #if defined(TARGET_SPARC64)
186 176 uint64_t lsu;
... ... @@ -222,12 +212,6 @@ typedef struct CPUSPARCState {
222 212 #if !defined(TARGET_SPARC64) && !defined(reg_T2)
223 213 target_ulong t2;
224 214 #endif
225   -
226   - /* ice debug support */
227   - target_ulong breakpoints[MAX_BREAKPOINTS];
228   - int nb_breakpoints;
229   - int singlestep_enabled; /* XXX: should use CPU single step mode instead */
230   -
231 215 } CPUSPARCState;
232 216 #if defined(TARGET_SPARC64)
233 217 #define GET_FSR32(env) (env->fsr & 0xcfc1ffff)
... ...