target/arm: Convert FJCVTZS to decodetree
Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20241211163036.2297116-34-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
f568134a57
commit
a769f854e6
@ -1363,6 +1363,8 @@ FCVTZU_g . 0011110 .. 111001 000000 ..... ..... @icvt
|
|||||||
FCVTAS_g . 0011110 .. 100100 000000 ..... ..... @icvt
|
FCVTAS_g . 0011110 .. 100100 000000 ..... ..... @icvt
|
||||||
FCVTAU_g . 0011110 .. 100101 000000 ..... ..... @icvt
|
FCVTAU_g . 0011110 .. 100101 000000 ..... ..... @icvt
|
||||||
|
|
||||||
|
FJCVTZS 0 0011110 01 111110 000000 ..... ..... @rr
|
||||||
|
|
||||||
# Floating-point data processing (1 source)
|
# Floating-point data processing (1 source)
|
||||||
|
|
||||||
FMOV_s 00011110 .. 1 000000 10000 ..... ..... @rr_hsd
|
FMOV_s 00011110 .. 1 000000 10000 ..... ..... @rr_hsd
|
||||||
|
@ -8714,6 +8714,26 @@ TRANS(FCVTZU_g, do_fcvt_g, a, FPROUNDING_ZERO, false)
|
|||||||
TRANS(FCVTAS_g, do_fcvt_g, a, FPROUNDING_TIEAWAY, true)
|
TRANS(FCVTAS_g, do_fcvt_g, a, FPROUNDING_TIEAWAY, true)
|
||||||
TRANS(FCVTAU_g, do_fcvt_g, a, FPROUNDING_TIEAWAY, false)
|
TRANS(FCVTAU_g, do_fcvt_g, a, FPROUNDING_TIEAWAY, false)
|
||||||
|
|
||||||
|
static bool trans_FJCVTZS(DisasContext *s, arg_FJCVTZS *a)
|
||||||
|
{
|
||||||
|
if (!dc_isar_feature(aa64_jscvt, s)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (fp_access_check(s)) {
|
||||||
|
TCGv_i64 t = read_fp_dreg(s, a->rn);
|
||||||
|
TCGv_ptr fpstatus = fpstatus_ptr(FPST_FPCR);
|
||||||
|
|
||||||
|
gen_helper_fjcvtzs(t, t, fpstatus);
|
||||||
|
|
||||||
|
tcg_gen_ext32u_i64(cpu_reg(s, a->rd), t);
|
||||||
|
tcg_gen_extrh_i64_i32(cpu_ZF, t);
|
||||||
|
tcg_gen_movi_i32(cpu_CF, 0);
|
||||||
|
tcg_gen_movi_i32(cpu_NF, 0);
|
||||||
|
tcg_gen_movi_i32(cpu_VF, 0);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static void handle_fmov(DisasContext *s, int rd, int rn, int type, bool itof)
|
static void handle_fmov(DisasContext *s, int rd, int rn, int type, bool itof)
|
||||||
{
|
{
|
||||||
/* FMOV: gpr to or from float, double, or top half of quad fp reg,
|
/* FMOV: gpr to or from float, double, or top half of quad fp reg,
|
||||||
@ -8775,20 +8795,6 @@ static void handle_fmov(DisasContext *s, int rd, int rn, int type, bool itof)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_fjcvtzs(DisasContext *s, int rd, int rn)
|
|
||||||
{
|
|
||||||
TCGv_i64 t = read_fp_dreg(s, rn);
|
|
||||||
TCGv_ptr fpstatus = fpstatus_ptr(FPST_FPCR);
|
|
||||||
|
|
||||||
gen_helper_fjcvtzs(t, t, fpstatus);
|
|
||||||
|
|
||||||
tcg_gen_ext32u_i64(cpu_reg(s, rd), t);
|
|
||||||
tcg_gen_extrh_i64_i32(cpu_ZF, t);
|
|
||||||
tcg_gen_movi_i32(cpu_CF, 0);
|
|
||||||
tcg_gen_movi_i32(cpu_NF, 0);
|
|
||||||
tcg_gen_movi_i32(cpu_VF, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Floating point <-> integer conversions
|
/* Floating point <-> integer conversions
|
||||||
* 31 30 29 28 24 23 22 21 20 19 18 16 15 10 9 5 4 0
|
* 31 30 29 28 24 23 22 21 20 19 18 16 15 10 9 5 4 0
|
||||||
* +----+---+---+-----------+------+---+-------+-----+-------------+----+----+
|
* +----+---+---+-----------+------+---+-------+-----+-------------+----+----+
|
||||||
@ -8843,13 +8849,6 @@ static void disas_fp_int_conv(DisasContext *s, uint32_t insn)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0b00111110: /* FJCVTZS */
|
case 0b00111110: /* FJCVTZS */
|
||||||
if (!dc_isar_feature(aa64_jscvt, s)) {
|
|
||||||
goto do_unallocated;
|
|
||||||
} else if (fp_access_check(s)) {
|
|
||||||
handle_fjcvtzs(s, rd, rn);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
do_unallocated:
|
do_unallocated:
|
||||||
unallocated_encoding(s);
|
unallocated_encoding(s);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user