target-alpha: Convert ARITH3 to source/sink
Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
3d045dbca5
commit
cd2754addc
@ -1258,43 +1258,6 @@ static void gen_msk_l(DisasContext *ctx, TCGv vc, TCGv va, int rb, bool islit,
|
||||
}
|
||||
}
|
||||
|
||||
/* Code to call arith3 helpers */
|
||||
#define ARITH3(name) \
|
||||
static inline void glue(gen_, name)(int ra, int rb, int rc, int islit,\
|
||||
uint8_t lit) \
|
||||
{ \
|
||||
if (unlikely(rc == 31)) \
|
||||
return; \
|
||||
\
|
||||
if (ra != 31) { \
|
||||
if (islit) { \
|
||||
TCGv tmp = tcg_const_i64(lit); \
|
||||
gen_helper_ ## name(cpu_ir[rc], cpu_ir[ra], tmp); \
|
||||
tcg_temp_free(tmp); \
|
||||
} else \
|
||||
gen_helper_ ## name (cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]); \
|
||||
} else { \
|
||||
TCGv tmp1 = tcg_const_i64(0); \
|
||||
if (islit) { \
|
||||
TCGv tmp2 = tcg_const_i64(lit); \
|
||||
gen_helper_ ## name (cpu_ir[rc], tmp1, tmp2); \
|
||||
tcg_temp_free(tmp2); \
|
||||
} else \
|
||||
gen_helper_ ## name (cpu_ir[rc], tmp1, cpu_ir[rb]); \
|
||||
tcg_temp_free(tmp1); \
|
||||
} \
|
||||
}
|
||||
ARITH3(cmpbge)
|
||||
ARITH3(minub8)
|
||||
ARITH3(minsb8)
|
||||
ARITH3(minuw4)
|
||||
ARITH3(minsw4)
|
||||
ARITH3(maxub8)
|
||||
ARITH3(maxsb8)
|
||||
ARITH3(maxuw4)
|
||||
ARITH3(maxsw4)
|
||||
ARITH3(perr)
|
||||
|
||||
#define MVIOP2(name) \
|
||||
static inline void glue(gen_, name)(int rb, int rc) \
|
||||
{ \
|
||||
@ -1765,7 +1728,7 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn)
|
||||
break;
|
||||
case 0x0F:
|
||||
/* CMPBGE */
|
||||
gen_cmpbge(ra, rb, rc, islit, lit);
|
||||
gen_helper_cmpbge(vc, va, vb);
|
||||
break;
|
||||
case 0x12:
|
||||
/* S8ADDL */
|
||||
@ -2619,45 +2582,61 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn)
|
||||
|
||||
case 0x1C:
|
||||
vc = dest_gpr(ctx, rc);
|
||||
if (fn7 == 0x70) {
|
||||
/* FTOIT */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_FIX);
|
||||
REQUIRE_REG_31(rb);
|
||||
va = load_fpr(ctx, ra);
|
||||
tcg_gen_mov_i64(vc, va);
|
||||
break;
|
||||
} else if (fn7 == 0x78) {
|
||||
/* FTOIS */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_FIX);
|
||||
REQUIRE_REG_31(rb);
|
||||
t32 = tcg_temp_new_i32();
|
||||
va = load_fpr(ctx, ra);
|
||||
gen_helper_s_to_memory(t32, va);
|
||||
tcg_gen_ext_i32_i64(vc, t32);
|
||||
tcg_temp_free_i32(t32);
|
||||
break;
|
||||
}
|
||||
|
||||
vb = load_gpr_lit(ctx, rb, lit, islit);
|
||||
switch (fn7) {
|
||||
case 0x00:
|
||||
/* SEXTB */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_BWX);
|
||||
REQUIRE_REG_31(ra);
|
||||
vb = load_gpr_lit(ctx, rb, lit, islit);
|
||||
tcg_gen_ext8s_i64(vc, vb);
|
||||
break;
|
||||
case 0x01:
|
||||
/* SEXTW */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_BWX);
|
||||
REQUIRE_REG_31(ra);
|
||||
vb = load_gpr_lit(ctx, rb, lit, islit);
|
||||
tcg_gen_ext16s_i64(vc, vb);
|
||||
break;
|
||||
case 0x30:
|
||||
/* CTPOP */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_CIX);
|
||||
REQUIRE_REG_31(ra);
|
||||
vb = load_gpr_lit(ctx, rb, lit, islit);
|
||||
gen_helper_ctpop(vc, vb);
|
||||
break;
|
||||
case 0x31:
|
||||
/* PERR */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI);
|
||||
gen_perr(ra, rb, rc, islit, lit);
|
||||
va = load_gpr(ctx, ra);
|
||||
gen_helper_perr(vc, va, vb);
|
||||
break;
|
||||
case 0x32:
|
||||
/* CTLZ */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_CIX);
|
||||
REQUIRE_REG_31(ra);
|
||||
vb = load_gpr_lit(ctx, rb, lit, islit);
|
||||
gen_helper_ctlz(vc, vb);
|
||||
break;
|
||||
case 0x33:
|
||||
/* CTTZ */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_CIX);
|
||||
REQUIRE_REG_31(ra);
|
||||
vb = load_gpr_lit(ctx, rb, lit, islit);
|
||||
gen_helper_cttz(vc, vb);
|
||||
break;
|
||||
case 0x34:
|
||||
@ -2687,59 +2666,50 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn)
|
||||
case 0x38:
|
||||
/* MINSB8 */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI);
|
||||
gen_minsb8(ra, rb, rc, islit, lit);
|
||||
va = load_gpr(ctx, ra);
|
||||
gen_helper_minsb8(vc, va, vb);
|
||||
break;
|
||||
case 0x39:
|
||||
/* MINSW4 */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI);
|
||||
gen_minsw4(ra, rb, rc, islit, lit);
|
||||
va = load_gpr(ctx, ra);
|
||||
gen_helper_minsw4(vc, va, vb);
|
||||
break;
|
||||
case 0x3A:
|
||||
/* MINUB8 */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI);
|
||||
gen_minub8(ra, rb, rc, islit, lit);
|
||||
va = load_gpr(ctx, ra);
|
||||
gen_helper_minub8(vc, va, vb);
|
||||
break;
|
||||
case 0x3B:
|
||||
/* MINUW4 */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI);
|
||||
gen_minuw4(ra, rb, rc, islit, lit);
|
||||
va = load_gpr(ctx, ra);
|
||||
gen_helper_minuw4(vc, va, vb);
|
||||
break;
|
||||
case 0x3C:
|
||||
/* MAXUB8 */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI);
|
||||
gen_maxub8(ra, rb, rc, islit, lit);
|
||||
va = load_gpr(ctx, ra);
|
||||
gen_helper_maxub8(vc, va, vb);
|
||||
break;
|
||||
case 0x3D:
|
||||
/* MAXUW4 */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI);
|
||||
gen_maxuw4(ra, rb, rc, islit, lit);
|
||||
va = load_gpr(ctx, ra);
|
||||
gen_helper_maxuw4(vc, va, vb);
|
||||
break;
|
||||
case 0x3E:
|
||||
/* MAXSB8 */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI);
|
||||
gen_maxsb8(ra, rb, rc, islit, lit);
|
||||
va = load_gpr(ctx, ra);
|
||||
gen_helper_maxsb8(vc, va, vb);
|
||||
break;
|
||||
case 0x3F:
|
||||
/* MAXSW4 */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI);
|
||||
gen_maxsw4(ra, rb, rc, islit, lit);
|
||||
break;
|
||||
case 0x70:
|
||||
/* FTOIT */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_FIX);
|
||||
REQUIRE_REG_31(rb);
|
||||
va = load_fpr(ctx, ra);
|
||||
tcg_gen_mov_i64(vc, va);
|
||||
break;
|
||||
case 0x78:
|
||||
/* FTOIS */
|
||||
REQUIRE_TB_FLAG(TB_FLAGS_AMASK_FIX);
|
||||
REQUIRE_REG_31(rb);
|
||||
t32 = tcg_temp_new_i32();
|
||||
va = load_fpr(ctx, ra);
|
||||
gen_helper_s_to_memory(t32, va);
|
||||
tcg_gen_ext_i32_i64(vc, t32);
|
||||
tcg_temp_free_i32(t32);
|
||||
va = load_gpr(ctx, ra);
|
||||
gen_helper_maxsw4(vc, va, vb);
|
||||
break;
|
||||
default:
|
||||
goto invalid_opc;
|
||||
|
Loading…
Reference in New Issue
Block a user