mirror of https://github.com/xqemu/xqemu.git
target-alpha: Convert FARITH3 to source/sink
Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
baee04abba
commit
3d045dbca5
|
@ -995,48 +995,6 @@ static inline void gen_fcpyse(int ra, int rb, int rc)
|
||||||
gen_cpys_internal(ra, rb, rc, 0, 0xFFF0000000000000ULL);
|
gen_cpys_internal(ra, rb, rc, 0, 0xFFF0000000000000ULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FARITH3(name) \
|
|
||||||
static inline void glue(gen_f, name)(int ra, int rb, int rc) \
|
|
||||||
{ \
|
|
||||||
TCGv va, vb; \
|
|
||||||
\
|
|
||||||
if (unlikely(rc == 31)) { \
|
|
||||||
return; \
|
|
||||||
} \
|
|
||||||
if (ra == 31) { \
|
|
||||||
va = tcg_const_i64(0); \
|
|
||||||
} else { \
|
|
||||||
va = cpu_fir[ra]; \
|
|
||||||
} \
|
|
||||||
if (rb == 31) { \
|
|
||||||
vb = tcg_const_i64(0); \
|
|
||||||
} else { \
|
|
||||||
vb = cpu_fir[rb]; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
gen_helper_ ## name(cpu_fir[rc], cpu_env, va, vb); \
|
|
||||||
\
|
|
||||||
if (ra == 31) { \
|
|
||||||
tcg_temp_free(va); \
|
|
||||||
} \
|
|
||||||
if (rb == 31) { \
|
|
||||||
tcg_temp_free(vb); \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ??? VAX instruction qualifiers ignored. */
|
|
||||||
FARITH3(addf)
|
|
||||||
FARITH3(subf)
|
|
||||||
FARITH3(mulf)
|
|
||||||
FARITH3(divf)
|
|
||||||
FARITH3(addg)
|
|
||||||
FARITH3(subg)
|
|
||||||
FARITH3(mulg)
|
|
||||||
FARITH3(divg)
|
|
||||||
FARITH3(cmpgeq)
|
|
||||||
FARITH3(cmpglt)
|
|
||||||
FARITH3(cmpgle)
|
|
||||||
|
|
||||||
static void gen_ieee_arith3(DisasContext *ctx,
|
static void gen_ieee_arith3(DisasContext *ctx,
|
||||||
void (*helper)(TCGv, TCGv_ptr, TCGv, TCGv),
|
void (*helper)(TCGv, TCGv_ptr, TCGv, TCGv),
|
||||||
int ra, int rb, int rc, int fn11)
|
int ra, int rb, int rc, int fn11)
|
||||||
|
@ -2257,22 +2215,23 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn)
|
||||||
/* XXX: rounding mode and trap are ignored (!) */
|
/* XXX: rounding mode and trap are ignored (!) */
|
||||||
vc = dest_fpr(ctx, rc);
|
vc = dest_fpr(ctx, rc);
|
||||||
vb = load_fpr(ctx, rb);
|
vb = load_fpr(ctx, rb);
|
||||||
|
va = load_fpr(ctx, ra);
|
||||||
switch (fpfn) { /* fn11 & 0x3F */
|
switch (fpfn) { /* fn11 & 0x3F */
|
||||||
case 0x00:
|
case 0x00:
|
||||||
/* ADDF */
|
/* ADDF */
|
||||||
gen_faddf(ra, rb, rc);
|
gen_helper_addf(vc, cpu_env, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x01:
|
case 0x01:
|
||||||
/* SUBF */
|
/* SUBF */
|
||||||
gen_fsubf(ra, rb, rc);
|
gen_helper_subf(vc, cpu_env, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x02:
|
case 0x02:
|
||||||
/* MULF */
|
/* MULF */
|
||||||
gen_fmulf(ra, rb, rc);
|
gen_helper_mulf(vc, cpu_env, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x03:
|
case 0x03:
|
||||||
/* DIVF */
|
/* DIVF */
|
||||||
gen_fdivf(ra, rb, rc);
|
gen_helper_divf(vc, cpu_env, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x1E:
|
case 0x1E:
|
||||||
/* CVTDG -- TODO */
|
/* CVTDG -- TODO */
|
||||||
|
@ -2280,31 +2239,31 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn)
|
||||||
goto invalid_opc;
|
goto invalid_opc;
|
||||||
case 0x20:
|
case 0x20:
|
||||||
/* ADDG */
|
/* ADDG */
|
||||||
gen_faddg(ra, rb, rc);
|
gen_helper_addg(vc, cpu_env, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x21:
|
case 0x21:
|
||||||
/* SUBG */
|
/* SUBG */
|
||||||
gen_fsubg(ra, rb, rc);
|
gen_helper_subg(vc, cpu_env, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x22:
|
case 0x22:
|
||||||
/* MULG */
|
/* MULG */
|
||||||
gen_fmulg(ra, rb, rc);
|
gen_helper_mulg(vc, cpu_env, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x23:
|
case 0x23:
|
||||||
/* DIVG */
|
/* DIVG */
|
||||||
gen_fdivg(ra, rb, rc);
|
gen_helper_divg(vc, cpu_env, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x25:
|
case 0x25:
|
||||||
/* CMPGEQ */
|
/* CMPGEQ */
|
||||||
gen_fcmpgeq(ra, rb, rc);
|
gen_helper_cmpgeq(vc, cpu_env, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x26:
|
case 0x26:
|
||||||
/* CMPGLT */
|
/* CMPGLT */
|
||||||
gen_fcmpglt(ra, rb, rc);
|
gen_helper_cmpglt(vc, cpu_env, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x27:
|
case 0x27:
|
||||||
/* CMPGLE */
|
/* CMPGLE */
|
||||||
gen_fcmpgle(ra, rb, rc);
|
gen_helper_cmpgle(vc, cpu_env, va, vb);
|
||||||
break;
|
break;
|
||||||
case 0x2C:
|
case 0x2C:
|
||||||
/* CVTGF */
|
/* CVTGF */
|
||||||
|
|
Loading…
Reference in New Issue