mirror of https://github.com/proxmox/mirror_qemu
target-alpha: Convert gen_cmp to source/sink
Signed-off-by: Richard Henderson <rth@twiddle.net>master
parent
cd2d46fd21
commit
958683482c
|
@ -1509,36 +1509,6 @@ MVIOP2(pkwb)
|
||||||
MVIOP2(unpkbl)
|
MVIOP2(unpkbl)
|
||||||
MVIOP2(unpkbw)
|
MVIOP2(unpkbw)
|
||||||
|
|
||||||
static void gen_cmp(TCGCond cond, int ra, int rb, int rc,
|
|
||||||
int islit, uint8_t lit)
|
|
||||||
{
|
|
||||||
TCGv va, vb;
|
|
||||||
|
|
||||||
if (unlikely(rc == 31)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ra == 31) {
|
|
||||||
va = tcg_const_i64(0);
|
|
||||||
} else {
|
|
||||||
va = cpu_ir[ra];
|
|
||||||
}
|
|
||||||
if (islit) {
|
|
||||||
vb = tcg_const_i64(lit);
|
|
||||||
} else {
|
|
||||||
vb = cpu_ir[rb];
|
|
||||||
}
|
|
||||||
|
|
||||||
tcg_gen_setcond_i64(cond, cpu_ir[rc], va, vb);
|
|
||||||
|
|
||||||
if (ra == 31) {
|
|
||||||
tcg_temp_free(va);
|
|
||||||
}
|
|
||||||
if (islit) {
|
|
||||||
tcg_temp_free(vb);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void gen_rx(int ra, int set)
|
static void gen_rx(int ra, int set)
|
||||||
{
|
{
|
||||||
TCGv_i32 tmp;
|
TCGv_i32 tmp;
|
||||||
|
@ -2014,7 +1984,7 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn)
|
||||||
break;
|
break;
|
||||||
case 0x1D:
|
case 0x1D:
|
||||||
/* CMPULT */
|
/* CMPULT */
|
||||||
gen_cmp(TCG_COND_LTU, ra, rb, rc, islit, lit);
|
tcg_gen_setcond_i64(TCG_COND_LTU, vc, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x20:
|
case 0x20:
|
||||||
/* ADDQ */
|
/* ADDQ */
|
||||||
|
@ -2040,7 +2010,7 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn)
|
||||||
break;
|
break;
|
||||||
case 0x2D:
|
case 0x2D:
|
||||||
/* CMPEQ */
|
/* CMPEQ */
|
||||||
gen_cmp(TCG_COND_EQ, ra, rb, rc, islit, lit);
|
tcg_gen_setcond_i64(TCG_COND_EQ, vc, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x32:
|
case 0x32:
|
||||||
/* S8ADDQ */
|
/* S8ADDQ */
|
||||||
|
@ -2058,7 +2028,7 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn)
|
||||||
break;
|
break;
|
||||||
case 0x3D:
|
case 0x3D:
|
||||||
/* CMPULE */
|
/* CMPULE */
|
||||||
gen_cmp(TCG_COND_LEU, ra, rb, rc, islit, lit);
|
tcg_gen_setcond_i64(TCG_COND_LEU, vc, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x40:
|
case 0x40:
|
||||||
/* ADDL/V */
|
/* ADDL/V */
|
||||||
|
@ -2070,7 +2040,7 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn)
|
||||||
break;
|
break;
|
||||||
case 0x4D:
|
case 0x4D:
|
||||||
/* CMPLT */
|
/* CMPLT */
|
||||||
gen_cmp(TCG_COND_LT, ra, rb, rc, islit, lit);
|
tcg_gen_setcond_i64(TCG_COND_LT, vc, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x60:
|
case 0x60:
|
||||||
/* ADDQ/V */
|
/* ADDQ/V */
|
||||||
|
@ -2082,7 +2052,7 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn)
|
||||||
break;
|
break;
|
||||||
case 0x6D:
|
case 0x6D:
|
||||||
/* CMPLE */
|
/* CMPLE */
|
||||||
gen_cmp(TCG_COND_LE, ra, rb, rc, islit, lit);
|
tcg_gen_setcond_i64(TCG_COND_LE, vc, va, vb);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
goto invalid_opc;
|
goto invalid_opc;
|
||||||
|
|
Loading…
Reference in New Issue