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 46 according to jump_pc[T2] */
47 47  
48 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 51 #ifdef TARGET_SPARC64
52 52 static TCGv cpu_xcc;
53 53 #endif
... ... @@ -1269,12 +1269,8 @@ static inline void gen_cond(TCGv r_dst, unsigned int cc, unsigned int cond)
1269 1269  
1270 1270 static inline void gen_fcond(TCGv r_dst, unsigned int cc, unsigned int cond)
1271 1271 {
1272   - TCGv r_src;
1273 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 1274 switch (cc) {
1279 1275 default:
1280 1276 case 0x0:
... ... @@ -1296,49 +1292,49 @@ static inline void gen_fcond(TCGv r_dst, unsigned int cc, unsigned int cond)
1296 1292 gen_op_eval_bn(r_dst);
1297 1293 break;
1298 1294 case 0x1:
1299   - gen_op_eval_fbne(r_dst, r_src, offset);
  1295 + gen_op_eval_fbne(r_dst, cpu_fsr, offset);
1300 1296 break;
1301 1297 case 0x2:
1302   - gen_op_eval_fblg(r_dst, r_src, offset);
  1298 + gen_op_eval_fblg(r_dst, cpu_fsr, offset);
1303 1299 break;
1304 1300 case 0x3:
1305   - gen_op_eval_fbul(r_dst, r_src, offset);
  1301 + gen_op_eval_fbul(r_dst, cpu_fsr, offset);
1306 1302 break;
1307 1303 case 0x4:
1308   - gen_op_eval_fbl(r_dst, r_src, offset);
  1304 + gen_op_eval_fbl(r_dst, cpu_fsr, offset);
1309 1305 break;
1310 1306 case 0x5:
1311   - gen_op_eval_fbug(r_dst, r_src, offset);
  1307 + gen_op_eval_fbug(r_dst, cpu_fsr, offset);
1312 1308 break;
1313 1309 case 0x6:
1314   - gen_op_eval_fbg(r_dst, r_src, offset);
  1310 + gen_op_eval_fbg(r_dst, cpu_fsr, offset);
1315 1311 break;
1316 1312 case 0x7:
1317   - gen_op_eval_fbu(r_dst, r_src, offset);
  1313 + gen_op_eval_fbu(r_dst, cpu_fsr, offset);
1318 1314 break;
1319 1315 case 0x8:
1320 1316 gen_op_eval_ba(r_dst);
1321 1317 break;
1322 1318 case 0x9:
1323   - gen_op_eval_fbe(r_dst, r_src, offset);
  1319 + gen_op_eval_fbe(r_dst, cpu_fsr, offset);
1324 1320 break;
1325 1321 case 0xa:
1326   - gen_op_eval_fbue(r_dst, r_src, offset);
  1322 + gen_op_eval_fbue(r_dst, cpu_fsr, offset);
1327 1323 break;
1328 1324 case 0xb:
1329   - gen_op_eval_fbge(r_dst, r_src, offset);
  1325 + gen_op_eval_fbge(r_dst, cpu_fsr, offset);
1330 1326 break;
1331 1327 case 0xc:
1332   - gen_op_eval_fbuge(r_dst, r_src, offset);
  1328 + gen_op_eval_fbuge(r_dst, cpu_fsr, offset);
1333 1329 break;
1334 1330 case 0xd:
1335   - gen_op_eval_fble(r_dst, r_src, offset);
  1331 + gen_op_eval_fble(r_dst, cpu_fsr, offset);
1336 1332 break;
1337 1333 case 0xe:
1338   - gen_op_eval_fbule(r_dst, r_src, offset);
  1334 + gen_op_eval_fbule(r_dst, cpu_fsr, offset);
1339 1335 break;
1340 1336 case 0xf:
1341   - gen_op_eval_fbo(r_dst, r_src, offset);
  1337 + gen_op_eval_fbo(r_dst, cpu_fsr, offset);
1342 1338 break;
1343 1339 }
1344 1340 }
... ... @@ -1588,10 +1584,8 @@ static inline void gen_op_fcmpeq(int fccno)
1588 1584  
1589 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 1589 gen_op_exception(TT_FP_EXCP);
1596 1590 }
1597 1591  
... ... @@ -1610,9 +1604,7 @@ static int gen_trap_ifnofpu(DisasContext * dc)
1610 1604  
1611 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 1610 static inline void gen_clear_float_exceptions(void)
... ... @@ -4769,6 +4761,9 @@ CPUSPARCState *cpu_sparc_init(const char *cpu_model)
4769 4761 cpu_psr = tcg_global_mem_new(TCG_TYPE_I32,
4770 4762 TCG_AREG0, offsetof(CPUState, psr),
4771 4763 "psr");
  4764 + cpu_fsr = tcg_global_mem_new(TCG_TYPE_TL,
  4765 + TCG_AREG0, offsetof(CPUState, fsr),
  4766 + "fsr");
4772 4767 for (i = 1; i < 8; i++)
4773 4768 cpu_gregs[i] = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0,
4774 4769 offsetof(CPUState, gregs[i]),
... ...