Commit 87e92502c60c9a2c2c3c322c388a300a6df8b79a

Authored by blueswir1
1 parent bb5529bb

Use a TCG global for fsr


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4068 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 22 additions and 27 deletions
target-sparc/translate.c
@@ -46,8 +46,8 @@ @@ -46,8 +46,8 @@
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_dst, cpu_psr;  
50 -static TCGv cpu_gregs[8]; 49 +static TCGv cpu_env, cpu_T[3], cpu_regwptr, cpu_cc_src, cpu_cc_dst;
  50 +static TCGv cpu_psr, cpu_fsr, cpu_gregs[8];
51 #ifdef TARGET_SPARC64 51 #ifdef TARGET_SPARC64
52 static TCGv cpu_xcc; 52 static TCGv cpu_xcc;
53 #endif 53 #endif
@@ -1269,12 +1269,8 @@ static inline void gen_cond(TCGv r_dst, unsigned int cc, unsigned int cond) @@ -1269,12 +1269,8 @@ static inline void gen_cond(TCGv r_dst, unsigned int cc, unsigned int cond)
1269 1269
1270 static inline void gen_fcond(TCGv r_dst, unsigned int cc, unsigned int cond) 1270 static inline void gen_fcond(TCGv r_dst, unsigned int cc, unsigned int cond)
1271 { 1271 {
1272 - TCGv r_src;  
1273 unsigned int offset; 1272 unsigned int offset;
1274 1273
1275 - r_src = tcg_temp_new(TCG_TYPE_TL);  
1276 - tcg_gen_ld_tl(r_src, cpu_env, offsetof(CPUSPARCState, fsr));  
1277 -  
1278 switch (cc) { 1274 switch (cc) {
1279 default: 1275 default:
1280 case 0x0: 1276 case 0x0:
@@ -1296,49 +1292,49 @@ static inline void gen_fcond(TCGv r_dst, unsigned int cc, unsigned int cond) @@ -1296,49 +1292,49 @@ static inline void gen_fcond(TCGv r_dst, unsigned int cc, unsigned int cond)
1296 gen_op_eval_bn(r_dst); 1292 gen_op_eval_bn(r_dst);
1297 break; 1293 break;
1298 case 0x1: 1294 case 0x1:
1299 - gen_op_eval_fbne(r_dst, r_src, offset); 1295 + gen_op_eval_fbne(r_dst, cpu_fsr, offset);
1300 break; 1296 break;
1301 case 0x2: 1297 case 0x2:
1302 - gen_op_eval_fblg(r_dst, r_src, offset); 1298 + gen_op_eval_fblg(r_dst, cpu_fsr, offset);
1303 break; 1299 break;
1304 case 0x3: 1300 case 0x3:
1305 - gen_op_eval_fbul(r_dst, r_src, offset); 1301 + gen_op_eval_fbul(r_dst, cpu_fsr, offset);
1306 break; 1302 break;
1307 case 0x4: 1303 case 0x4:
1308 - gen_op_eval_fbl(r_dst, r_src, offset); 1304 + gen_op_eval_fbl(r_dst, cpu_fsr, offset);
1309 break; 1305 break;
1310 case 0x5: 1306 case 0x5:
1311 - gen_op_eval_fbug(r_dst, r_src, offset); 1307 + gen_op_eval_fbug(r_dst, cpu_fsr, offset);
1312 break; 1308 break;
1313 case 0x6: 1309 case 0x6:
1314 - gen_op_eval_fbg(r_dst, r_src, offset); 1310 + gen_op_eval_fbg(r_dst, cpu_fsr, offset);
1315 break; 1311 break;
1316 case 0x7: 1312 case 0x7:
1317 - gen_op_eval_fbu(r_dst, r_src, offset); 1313 + gen_op_eval_fbu(r_dst, cpu_fsr, offset);
1318 break; 1314 break;
1319 case 0x8: 1315 case 0x8:
1320 gen_op_eval_ba(r_dst); 1316 gen_op_eval_ba(r_dst);
1321 break; 1317 break;
1322 case 0x9: 1318 case 0x9:
1323 - gen_op_eval_fbe(r_dst, r_src, offset); 1319 + gen_op_eval_fbe(r_dst, cpu_fsr, offset);
1324 break; 1320 break;
1325 case 0xa: 1321 case 0xa:
1326 - gen_op_eval_fbue(r_dst, r_src, offset); 1322 + gen_op_eval_fbue(r_dst, cpu_fsr, offset);
1327 break; 1323 break;
1328 case 0xb: 1324 case 0xb:
1329 - gen_op_eval_fbge(r_dst, r_src, offset); 1325 + gen_op_eval_fbge(r_dst, cpu_fsr, offset);
1330 break; 1326 break;
1331 case 0xc: 1327 case 0xc:
1332 - gen_op_eval_fbuge(r_dst, r_src, offset); 1328 + gen_op_eval_fbuge(r_dst, cpu_fsr, offset);
1333 break; 1329 break;
1334 case 0xd: 1330 case 0xd:
1335 - gen_op_eval_fble(r_dst, r_src, offset); 1331 + gen_op_eval_fble(r_dst, cpu_fsr, offset);
1336 break; 1332 break;
1337 case 0xe: 1333 case 0xe:
1338 - gen_op_eval_fbule(r_dst, r_src, offset); 1334 + gen_op_eval_fbule(r_dst, cpu_fsr, offset);
1339 break; 1335 break;
1340 case 0xf: 1336 case 0xf:
1341 - gen_op_eval_fbo(r_dst, r_src, offset); 1337 + gen_op_eval_fbo(r_dst, cpu_fsr, offset);
1342 break; 1338 break;
1343 } 1339 }
1344 } 1340 }
@@ -1588,10 +1584,8 @@ static inline void gen_op_fcmpeq(int fccno) @@ -1588,10 +1584,8 @@ static inline void gen_op_fcmpeq(int fccno)
1588 1584
1589 static inline void gen_op_fpexception_im(int fsr_flags) 1585 static inline void gen_op_fpexception_im(int fsr_flags)
1590 { 1586 {
1591 - tcg_gen_ld_tl(cpu_tmp0, cpu_env, offsetof(CPUSPARCState, fsr));  
1592 - tcg_gen_andi_tl(cpu_tmp0, cpu_tmp0, ~FSR_FTT_MASK);  
1593 - tcg_gen_ori_tl(cpu_tmp0, cpu_tmp0, fsr_flags);  
1594 - tcg_gen_st_tl(cpu_tmp0, cpu_env, offsetof(CPUSPARCState, fsr)); 1587 + tcg_gen_andi_tl(cpu_fsr, cpu_fsr, ~FSR_FTT_MASK);
  1588 + tcg_gen_ori_tl(cpu_fsr, cpu_fsr, fsr_flags);
1595 gen_op_exception(TT_FP_EXCP); 1589 gen_op_exception(TT_FP_EXCP);
1596 } 1590 }
1597 1591
@@ -1610,9 +1604,7 @@ static int gen_trap_ifnofpu(DisasContext * dc) @@ -1610,9 +1604,7 @@ static int gen_trap_ifnofpu(DisasContext * dc)
1610 1604
1611 static inline void gen_op_clear_ieee_excp_and_FTT(void) 1605 static inline void gen_op_clear_ieee_excp_and_FTT(void)
1612 { 1606 {
1613 - tcg_gen_ld_tl(cpu_tmp0, cpu_env, offsetof(CPUSPARCState, fsr));  
1614 - tcg_gen_andi_tl(cpu_tmp0, cpu_tmp0, ~(FSR_FTT_MASK | FSR_CEXC_MASK));  
1615 - tcg_gen_st_tl(cpu_tmp0, cpu_env, offsetof(CPUSPARCState, fsr)); 1607 + tcg_gen_andi_tl(cpu_fsr, cpu_fsr, ~(FSR_FTT_MASK | FSR_CEXC_MASK));
1616 } 1608 }
1617 1609
1618 static inline void gen_clear_float_exceptions(void) 1610 static inline void gen_clear_float_exceptions(void)
@@ -4769,6 +4761,9 @@ CPUSPARCState *cpu_sparc_init(const char *cpu_model) @@ -4769,6 +4761,9 @@ CPUSPARCState *cpu_sparc_init(const char *cpu_model)
4769 cpu_psr = tcg_global_mem_new(TCG_TYPE_I32, 4761 cpu_psr = tcg_global_mem_new(TCG_TYPE_I32,
4770 TCG_AREG0, offsetof(CPUState, psr), 4762 TCG_AREG0, offsetof(CPUState, psr),
4771 "psr"); 4763 "psr");
  4764 + cpu_fsr = tcg_global_mem_new(TCG_TYPE_TL,
  4765 + TCG_AREG0, offsetof(CPUState, fsr),
  4766 + "fsr");
4772 for (i = 1; i < 8; i++) 4767 for (i = 1; i < 8; i++)
4773 cpu_gregs[i] = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, 4768 cpu_gregs[i] = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0,
4774 offsetof(CPUState, gregs[i]), 4769 offsetof(CPUState, gregs[i]),