Commit 20e1fb525a399c0c10b90c7b73e65fc73d251b83

Authored by aurel32
1 parent af4b6c54

target-mips: optimize gen_cl()

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

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6932 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 11 additions and 15 deletions
target-mips/translate.c
... ... @@ -2128,42 +2128,36 @@ static void gen_cl (DisasContext *ctx, uint32_t opc,
2128 2128 int rd, int rs)
2129 2129 {
2130 2130 const char *opn = "CLx";
2131   - TCGv t0 = tcg_temp_local_new();
  2131 + TCGv t0;
2132 2132  
2133 2133 if (rd == 0) {
2134 2134 /* Treat as NOP. */
2135 2135 MIPS_DEBUG("NOP");
2136   - goto out;
  2136 + return;
2137 2137 }
  2138 + t0 = tcg_temp_new();
2138 2139 gen_load_gpr(t0, rs);
2139 2140 switch (opc) {
2140 2141 case OPC_CLO:
2141   - gen_helper_clo(t0, t0);
  2142 + gen_helper_clo(cpu_gpr[rd], t0);
2142 2143 opn = "clo";
2143 2144 break;
2144 2145 case OPC_CLZ:
2145   - gen_helper_clz(t0, t0);
  2146 + gen_helper_clz(cpu_gpr[rd], t0);
2146 2147 opn = "clz";
2147 2148 break;
2148 2149 #if defined(TARGET_MIPS64)
2149 2150 case OPC_DCLO:
2150   - gen_helper_dclo(t0, t0);
  2151 + gen_helper_dclo(cpu_gpr[rd], t0);
2151 2152 opn = "dclo";
2152 2153 break;
2153 2154 case OPC_DCLZ:
2154   - gen_helper_dclz(t0, t0);
  2155 + gen_helper_dclz(cpu_gpr[rd], t0);
2155 2156 opn = "dclz";
2156 2157 break;
2157 2158 #endif
2158   - default:
2159   - MIPS_INVAL(opn);
2160   - generate_exception(ctx, EXCP_RI);
2161   - goto out;
2162 2159 }
2163   - gen_store_gpr(t0, rd);
2164 2160 MIPS_DEBUG("%s %s, %s", opn, regnames[rd], regnames[rs]);
2165   -
2166   - out:
2167 2161 tcg_temp_free(t0);
2168 2162 }
2169 2163  
... ... @@ -7711,7 +7705,8 @@ static void decode_opc (CPUState *env, DisasContext *ctx)
7711 7705 case OPC_MUL:
7712 7706 gen_arith(env, ctx, op1, rd, rs, rt);
7713 7707 break;
7714   - case OPC_CLZ ... OPC_CLO:
  7708 + case OPC_CLO:
  7709 + case OPC_CLZ:
7715 7710 check_insn(env, ctx, ISA_MIPS32);
7716 7711 gen_cl(ctx, op1, rd, rs);
7717 7712 break;
... ... @@ -7728,7 +7723,8 @@ static void decode_opc (CPUState *env, DisasContext *ctx)
7728 7723 /* Treat as NOP. */
7729 7724 break;
7730 7725 #if defined(TARGET_MIPS64)
7731   - case OPC_DCLZ ... OPC_DCLO:
  7726 + case OPC_DCLO:
  7727 + case OPC_DCLZ:
7732 7728 check_insn(env, ctx, ISA_MIPS64);
7733 7729 check_mips_64(ctx);
7734 7730 gen_cl(ctx, op1, rd, rs);
... ...