Commit 7c60cc4bcaee6614b7b9a713f974b5d8e536e9c6

Authored by bellard
1 parent 7cb69cae

suppressed fixed registers

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4408 c046a42c-6fe2-441c-8c8c-71466251a162
target-sparc/cpu.h
@@ -188,7 +188,6 @@ typedef struct trap_state { @@ -188,7 +188,6 @@ typedef struct trap_state {
188 typedef struct CPUSPARCState { 188 typedef struct CPUSPARCState {
189 target_ulong gregs[8]; /* general registers */ 189 target_ulong gregs[8]; /* general registers */
190 target_ulong *regwptr; /* pointer to current register window */ 190 target_ulong *regwptr; /* pointer to current register window */
191 - float32 fpr[TARGET_FPREGS]; /* floating point registers */  
192 target_ulong pc; /* program counter */ 191 target_ulong pc; /* program counter */
193 target_ulong npc; /* next program counter */ 192 target_ulong npc; /* next program counter */
194 target_ulong y; /* multiply/divide register */ 193 target_ulong y; /* multiply/divide register */
@@ -197,8 +196,13 @@ typedef struct CPUSPARCState { @@ -197,8 +196,13 @@ typedef struct CPUSPARCState {
197 target_ulong cc_src, cc_src2; 196 target_ulong cc_src, cc_src2;
198 target_ulong cc_dst; 197 target_ulong cc_dst;
199 198
  199 + target_ulong t0, t1; /* temporaries live across basic blocks */
  200 + target_ulong cond; /* conditional branch result (XXX: save it in a
  201 + temporary register when possible) */
  202 +
200 uint32_t psr; /* processor state register */ 203 uint32_t psr; /* processor state register */
201 target_ulong fsr; /* FPU state register */ 204 target_ulong fsr; /* FPU state register */
  205 + float32 fpr[TARGET_FPREGS]; /* floating point registers */
202 uint32_t cwp; /* index of current register window (extracted 206 uint32_t cwp; /* index of current register window (extracted
203 from PSR) */ 207 from PSR) */
204 uint32_t wim; /* window invalid mask */ 208 uint32_t wim; /* window invalid mask */
@@ -271,7 +275,6 @@ typedef struct CPUSPARCState { @@ -271,7 +275,6 @@ typedef struct CPUSPARCState {
271 uint64_t hpstate, htstate[MAXTL], hintp, htba, hver, hstick_cmpr, ssr; 275 uint64_t hpstate, htstate[MAXTL], hintp, htba, hver, hstick_cmpr, ssr;
272 void *hstick; // UA 2005 276 void *hstick; // UA 2005
273 #endif 277 #endif
274 - target_ulong t1, t2;  
275 uint32_t features; 278 uint32_t features;
276 } CPUSPARCState; 279 } CPUSPARCState;
277 280
target-sparc/exec.h
@@ -4,36 +4,7 @@ @@ -4,36 +4,7 @@
4 #include "dyngen-exec.h" 4 #include "dyngen-exec.h"
5 5
6 register struct CPUSPARCState *env asm(AREG0); 6 register struct CPUSPARCState *env asm(AREG0);
7 -  
8 -#ifdef TARGET_SPARC64  
9 -#define T0 (env->t0)  
10 -#define T2 (env->t2)  
11 #define REGWPTR env->regwptr 7 #define REGWPTR env->regwptr
12 -#else  
13 -register uint32_t T0 asm(AREG1);  
14 -  
15 -#undef REG_REGWPTR // Broken  
16 -#ifdef REG_REGWPTR  
17 -#if defined(__sparc__)  
18 -register uint32_t *REGWPTR asm(AREG4);  
19 -#else  
20 -register uint32_t *REGWPTR asm(AREG3);  
21 -#endif  
22 -#define reg_REGWPTR  
23 -  
24 -#ifdef AREG4  
25 -register uint32_t T2 asm(AREG4);  
26 -#define reg_T2  
27 -#else  
28 -#define T2 (env->t2)  
29 -#endif  
30 -  
31 -#else  
32 -#define REGWPTR env->regwptr  
33 -register uint32_t T2 asm(AREG3);  
34 -#endif  
35 -#define reg_T2  
36 -#endif  
37 8
38 #define FT0 (env->ft0) 9 #define FT0 (env->ft0)
39 #define FT1 (env->ft1) 10 #define FT1 (env->ft1)
target-sparc/op_helper.c
@@ -2189,33 +2189,6 @@ uint64_t helper_pack64(target_ulong high, target_ulong low) @@ -2189,33 +2189,6 @@ uint64_t helper_pack64(target_ulong high, target_ulong low)
2189 #define ADDR(x) (x) 2189 #define ADDR(x) (x)
2190 #endif 2190 #endif
2191 2191
2192 -#ifdef __i386__  
2193 -void helper_std_i386(target_ulong addr, int mem_idx)  
2194 -{  
2195 - uint64_t tmp = ((uint64_t)env->t1 << 32) | (uint64_t)(env->t2 & 0xffffffff);  
2196 -  
2197 -#if !defined(CONFIG_USER_ONLY)  
2198 - switch (mem_idx) {  
2199 - case 0:  
2200 - stq_user(ADDR(addr), tmp);  
2201 - break;  
2202 - case 1:  
2203 - stq_kernel(ADDR(addr), tmp);  
2204 - break;  
2205 -#ifdef TARGET_SPARC64  
2206 - case 2:  
2207 - stq_hypv(ADDR(addr), tmp);  
2208 - break;  
2209 -#endif  
2210 - default:  
2211 - break;  
2212 - }  
2213 -#else  
2214 - stq_raw(ADDR(addr), tmp);  
2215 -#endif  
2216 -}  
2217 -#endif /* __i386__ */  
2218 -  
2219 void helper_stdf(target_ulong addr, int mem_idx) 2192 void helper_stdf(target_ulong addr, int mem_idx)
2220 { 2193 {
2221 #if !defined(CONFIG_USER_ONLY) 2194 #if !defined(CONFIG_USER_ONLY)
@@ -2894,7 +2867,7 @@ void tlb_fill(target_ulong addr, int is_write, int mmu_idx, void *retaddr) @@ -2894,7 +2867,7 @@ void tlb_fill(target_ulong addr, int is_write, int mmu_idx, void *retaddr)
2894 if (tb) { 2867 if (tb) {
2895 /* the PC is inside the translated code. It means that we have 2868 /* the PC is inside the translated code. It means that we have
2896 a virtual CPU fault */ 2869 a virtual CPU fault */
2897 - cpu_restore_state(tb, env, pc, (void *)T2); 2870 + cpu_restore_state(tb, env, pc, (void *)env->cond);
2898 } 2871 }
2899 } 2872 }
2900 cpu_loop_exit(); 2873 cpu_loop_exit();
target-sparc/translate.c
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 according to jump_pc[T2] */ 46 according to jump_pc[T2] */
47 47
48 /* global register indexes */ 48 /* global register indexes */
49 -static TCGv cpu_env, cpu_T[3], cpu_regwptr, cpu_cc_src, cpu_cc_src2, cpu_cc_dst; 49 +static TCGv cpu_env, cpu_T[2], cpu_regwptr, cpu_cc_src, cpu_cc_src2, cpu_cc_dst;
50 static TCGv cpu_psr, cpu_fsr, cpu_pc, cpu_npc, cpu_gregs[8]; 50 static TCGv cpu_psr, cpu_fsr, cpu_pc, cpu_npc, cpu_gregs[8];
51 static TCGv cpu_cond, cpu_src1, cpu_src2, cpu_dst, cpu_addr, cpu_val; 51 static TCGv cpu_cond, cpu_src1, cpu_src2, cpu_dst, cpu_addr, cpu_val;
52 #ifdef TARGET_SPARC64 52 #ifdef TARGET_SPARC64
@@ -4223,16 +4223,9 @@ static void disas_sparc_insn(DisasContext * dc) @@ -4223,16 +4223,9 @@ static void disas_sparc_insn(DisasContext * dc)
4223 tcg_gen_helper_0_2(helper_check_align, cpu_addr, tcg_const_i32(7)); 4223 tcg_gen_helper_0_2(helper_check_align, cpu_addr, tcg_const_i32(7));
4224 r_low = tcg_temp_new(TCG_TYPE_I32); 4224 r_low = tcg_temp_new(TCG_TYPE_I32);
4225 gen_movl_reg_TN(rd + 1, r_low); 4225 gen_movl_reg_TN(rd + 1, r_low);
4226 -#ifndef __i386__  
4227 tcg_gen_helper_1_2(helper_pack64, cpu_tmp64, cpu_val, 4226 tcg_gen_helper_1_2(helper_pack64, cpu_tmp64, cpu_val,
4228 r_low); 4227 r_low);
4229 tcg_gen_qemu_st64(cpu_tmp64, cpu_addr, dc->mem_idx); 4228 tcg_gen_qemu_st64(cpu_tmp64, cpu_addr, dc->mem_idx);
4230 -#else /* __i386__ */  
4231 - tcg_gen_st_tl(cpu_val, cpu_env, offsetof(CPUState, t1));  
4232 - tcg_gen_st_tl(r_low, cpu_env, offsetof(CPUState, t2));  
4233 - tcg_gen_helper_0_2(helper_std_i386, cpu_addr,  
4234 - tcg_const_i32(dc->mem_idx));  
4235 -#endif /* __i386__ */  
4236 } 4229 }
4237 break; 4230 break;
4238 #if !defined(CONFIG_USER_ONLY) || defined(TARGET_SPARC64) 4231 #if !defined(CONFIG_USER_ONLY) || defined(TARGET_SPARC64)
@@ -4475,8 +4468,6 @@ static inline int gen_intermediate_code_internal(TranslationBlock * tb, @@ -4475,8 +4468,6 @@ static inline int gen_intermediate_code_internal(TranslationBlock * tb,
4475 cpu_tmp32 = tcg_temp_new(TCG_TYPE_I32); 4468 cpu_tmp32 = tcg_temp_new(TCG_TYPE_I32);
4476 cpu_tmp64 = tcg_temp_new(TCG_TYPE_I64); 4469 cpu_tmp64 = tcg_temp_new(TCG_TYPE_I64);
4477 4470
4478 - cpu_cond = cpu_T[2];  
4479 -  
4480 do { 4471 do {
4481 if (env->nb_breakpoints > 0) { 4472 if (env->nb_breakpoints > 0) {
4482 for(j = 0; j < env->nb_breakpoints; j++) { 4473 for(j = 0; j < env->nb_breakpoints; j++) {
@@ -4599,22 +4590,18 @@ void gen_intermediate_code_init(CPUSPARCState *env) @@ -4599,22 +4590,18 @@ void gen_intermediate_code_init(CPUSPARCState *env)
4599 cpu_regwptr = tcg_global_mem_new(TCG_TYPE_PTR, TCG_AREG0, 4590 cpu_regwptr = tcg_global_mem_new(TCG_TYPE_PTR, TCG_AREG0,
4600 offsetof(CPUState, regwptr), 4591 offsetof(CPUState, regwptr),
4601 "regwptr"); 4592 "regwptr");
4602 - //#if TARGET_LONG_BITS > HOST_LONG_BITS  
4603 #ifdef TARGET_SPARC64 4593 #ifdef TARGET_SPARC64
4604 - cpu_T[0] = tcg_global_mem_new(TCG_TYPE_TL,  
4605 - TCG_AREG0, offsetof(CPUState, t0), "T0");  
4606 - cpu_T[1] = tcg_global_mem_new(TCG_TYPE_TL,  
4607 - TCG_AREG0, offsetof(CPUState, t1), "T1");  
4608 - cpu_T[2] = tcg_global_mem_new(TCG_TYPE_TL,  
4609 - TCG_AREG0, offsetof(CPUState, t2), "T2");  
4610 cpu_xcc = tcg_global_mem_new(TCG_TYPE_I32, 4594 cpu_xcc = tcg_global_mem_new(TCG_TYPE_I32,
4611 TCG_AREG0, offsetof(CPUState, xcc), 4595 TCG_AREG0, offsetof(CPUState, xcc),
4612 "xcc"); 4596 "xcc");
4613 -#else  
4614 - cpu_T[0] = tcg_global_reg_new(TCG_TYPE_TL, TCG_AREG1, "T0");  
4615 - cpu_T[1] = tcg_global_reg_new(TCG_TYPE_TL, TCG_AREG2, "T1");  
4616 - cpu_T[2] = tcg_global_reg_new(TCG_TYPE_TL, TCG_AREG3, "T2");  
4617 #endif 4597 #endif
  4598 + /* XXX: T0 and T1 should be temporaries */
  4599 + cpu_T[0] = tcg_global_mem_new(TCG_TYPE_TL,
  4600 + TCG_AREG0, offsetof(CPUState, t0), "T0");
  4601 + cpu_T[1] = tcg_global_mem_new(TCG_TYPE_TL,
  4602 + TCG_AREG0, offsetof(CPUState, t1), "T1");
  4603 + cpu_cond = tcg_global_mem_new(TCG_TYPE_TL,
  4604 + TCG_AREG0, offsetof(CPUState, cond), "cond");
4618 cpu_cc_src = tcg_global_mem_new(TCG_TYPE_TL, 4605 cpu_cc_src = tcg_global_mem_new(TCG_TYPE_TL,
4619 TCG_AREG0, offsetof(CPUState, cc_src), 4606 TCG_AREG0, offsetof(CPUState, cc_src),
4620 "cc_src"); 4607 "cc_src");