From: Richard Henderson Date: Wed, 19 Mar 2014 06:36:49 +0000 (-0700) Subject: target-alpha: Convert opcode 0x13 to source/sink X-Git-Tag: v2.1.0-rc0~165^2~33 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=de4d3555fab888be7ddccf6922526b97b1aaba1c;p=thirdparty%2Fqemu.git target-alpha: Convert opcode 0x13 to source/sink Signed-off-by: Richard Henderson --- diff --git a/target-alpha/translate.c b/target-alpha/translate.c index 4299104074a..4a4876b9f82 100644 --- a/target-alpha/translate.c +++ b/target-alpha/translate.c @@ -2340,55 +2340,26 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn) goto invalid_opc; } break; + case 0x13: + vc = dest_gpr(ctx, rc); + vb = load_gpr_lit(ctx, rb, lit, islit); + va = load_gpr(ctx, ra); switch (fn7) { case 0x00: /* MULL */ - if (likely(rc != 31)) { - if (ra == 31) { - tcg_gen_movi_i64(cpu_ir[rc], 0); - } else { - if (islit) { - tcg_gen_muli_i64(cpu_ir[rc], cpu_ir[ra], lit); - } else { - tcg_gen_mul_i64(cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]); - } - tcg_gen_ext32s_i64(cpu_ir[rc], cpu_ir[rc]); - } - } + tcg_gen_mul_i64(vc, va, vb); + tcg_gen_ext32s_i64(vc, vc); break; case 0x20: /* MULQ */ - if (likely(rc != 31)) { - if (ra == 31) { - tcg_gen_movi_i64(cpu_ir[rc], 0); - } else if (islit) { - tcg_gen_muli_i64(cpu_ir[rc], cpu_ir[ra], lit); - } else { - tcg_gen_mul_i64(cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]); - } - } + tcg_gen_mul_i64(vc, va, vb); break; case 0x30: /* UMULH */ - { - TCGv low; - if (unlikely(rc == 31)){ - break; - } - if (ra == 31) { - tcg_gen_movi_i64(cpu_ir[rc], 0); - break; - } - low = tcg_temp_new(); - if (islit) { - tcg_gen_movi_tl(low, lit); - tcg_gen_mulu2_i64(low, cpu_ir[rc], cpu_ir[ra], low); - } else { - tcg_gen_mulu2_i64(low, cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]); - } - tcg_temp_free(low); - } + tmp = tcg_temp_new(); + tcg_gen_mulu2_i64(tmp, vc, va, vb); + tcg_temp_free(tmp); break; case 0x40: /* MULL/V */