Commit 41db460791c2d6a5d59a39614f2f63a5fca6d73e

Authored by aurel32
1 parent d45f89f4

target-mips: optimize write to env->hflags

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6941 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 7 additions and 14 deletions
target-mips/translate.c
... ... @@ -429,8 +429,8 @@ enum {
429 429 static TCGv_ptr cpu_env;
430 430 static TCGv cpu_gpr[32], cpu_PC;
431 431 static TCGv cpu_HI[MIPS_DSP_ACC], cpu_LO[MIPS_DSP_ACC], cpu_ACX[MIPS_DSP_ACC];
432   -static TCGv cpu_dspctrl, btarget;
433   -static TCGv bcond;
  432 +static TCGv cpu_dspctrl, btarget, bcond;
  433 +static TCGv_i32 hflags;
434 434 static TCGv_i32 fpu_fpr32[32], fpu_fpr32h[32];
435 435 static TCGv_i32 fpu_fcr0, fpu_fcr31;
436 436  
... ... @@ -758,11 +758,7 @@ static inline void save_cpu_state (DisasContext *ctx, int do_save_pc)
758 758 ctx->saved_pc = ctx->pc;
759 759 }
760 760 if (ctx->hflags != ctx->saved_hflags) {
761   - TCGv_i32 r_tmp = tcg_temp_new_i32();
762   -
763   - tcg_gen_movi_i32(r_tmp, ctx->hflags);
764   - tcg_gen_st_i32(r_tmp, cpu_env, offsetof(CPUState, hflags));
765   - tcg_temp_free_i32(r_tmp);
  761 + tcg_gen_movi_i32(hflags, ctx->hflags);
766 762 ctx->saved_hflags = ctx->hflags;
767 763 switch (ctx->hflags & MIPS_HFLAG_BMASK) {
768 764 case MIPS_HFLAG_BR:
... ... @@ -7555,13 +7551,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx)
7555 7551  
7556 7552 MIPS_DEBUG("blikely condition (" TARGET_FMT_lx ")", ctx->pc + 4);
7557 7553 tcg_gen_brcondi_tl(TCG_COND_NE, bcond, 0, l1);
7558   - {
7559   - TCGv_i32 r_tmp = tcg_temp_new_i32();
7560   -
7561   - tcg_gen_movi_i32(r_tmp, ctx->hflags & ~MIPS_HFLAG_BMASK);
7562   - tcg_gen_st_i32(r_tmp, cpu_env, offsetof(CPUState, hflags));
7563   - tcg_temp_free_i32(r_tmp);
7564   - }
  7554 + tcg_gen_movi_i32(hflags, ctx->hflags & ~MIPS_HFLAG_BMASK);
7565 7555 gen_goto_tb(ctx, 1, ctx->pc + 4);
7566 7556 gen_set_label(l1);
7567 7557 }
... ... @@ -8413,6 +8403,9 @@ static void mips_tcg_init(void)
8413 8403 offsetof(CPUState, bcond), "bcond");
8414 8404 btarget = tcg_global_mem_new(TCG_AREG0,
8415 8405 offsetof(CPUState, btarget), "btarget");
  8406 + hflags = tcg_global_mem_new_i32(TCG_AREG0,
  8407 + offsetof(CPUState, hflags), "hflags");
  8408 +
8416 8409 for (i = 0; i < 32; i++)
8417 8410 fpu_fpr32[i] = tcg_global_mem_new_i32(TCG_AREG0,
8418 8411 offsetof(CPUState, active_fpu.fpr[i].w[FP_ENDIAN_IDX]),
... ...