From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 39/42] arm/translate-a64: add all single op FP16 to handle_fp_1src_half
Date: Thu, 1 Mar 2018 11:24:00 +0000 [thread overview]
Message-ID: <20180301112403.12487-40-peter.maydell@linaro.org> (raw)
In-Reply-To: <20180301112403.12487-1-peter.maydell@linaro.org>
From: Alex Bennée <alex.bennee@linaro.org>
This includes FMOV, FABS, FNEG, FSQRT and FRINT[NPMZAXI]. We re-use
existing helpers to achieve this.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20180227143852.11175-32-alex.bennee@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/translate-a64.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
index 52cecae047..32811dc8b0 100644
--- a/target/arm/translate-a64.c
+++ b/target/arm/translate-a64.c
@@ -4596,6 +4596,65 @@ static void disas_fp_csel(DisasContext *s, uint32_t insn)
tcg_temp_free_i64(t_true);
}
+/* Floating-point data-processing (1 source) - half precision */
+static void handle_fp_1src_half(DisasContext *s, int opcode, int rd, int rn)
+{
+ TCGv_ptr fpst = NULL;
+ TCGv_i32 tcg_op = tcg_temp_new_i32();
+ TCGv_i32 tcg_res = tcg_temp_new_i32();
+
+ read_vec_element_i32(s, tcg_op, rn, 0, MO_16);
+
+ switch (opcode) {
+ case 0x0: /* FMOV */
+ tcg_gen_mov_i32(tcg_res, tcg_op);
+ break;
+ case 0x1: /* FABS */
+ tcg_gen_andi_i32(tcg_res, tcg_op, 0x7fff);
+ break;
+ case 0x2: /* FNEG */
+ tcg_gen_xori_i32(tcg_res, tcg_op, 0x8000);
+ break;
+ case 0x3: /* FSQRT */
+ gen_helper_sqrt_f16(tcg_res, tcg_op, cpu_env);
+ break;
+ case 0x8: /* FRINTN */
+ case 0x9: /* FRINTP */
+ case 0xa: /* FRINTM */
+ case 0xb: /* FRINTZ */
+ case 0xc: /* FRINTA */
+ {
+ TCGv_i32 tcg_rmode = tcg_const_i32(arm_rmode_to_sf(opcode & 7));
+ fpst = get_fpstatus_ptr(true);
+
+ gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst);
+ gen_helper_advsimd_rinth(tcg_res, tcg_op, fpst);
+
+ gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst);
+ tcg_temp_free_i32(tcg_rmode);
+ break;
+ }
+ case 0xe: /* FRINTX */
+ fpst = get_fpstatus_ptr(true);
+ gen_helper_advsimd_rinth_exact(tcg_res, tcg_op, fpst);
+ break;
+ case 0xf: /* FRINTI */
+ fpst = get_fpstatus_ptr(true);
+ gen_helper_advsimd_rinth(tcg_res, tcg_op, fpst);
+ break;
+ default:
+ abort();
+ }
+
+ write_fp_sreg(s, rd, tcg_res);
+
+ if (fpst) {
+ tcg_temp_free_ptr(fpst);
+ }
+ tcg_temp_free_i32(tcg_op);
+ tcg_temp_free_i32(tcg_res);
+}
+
/* Floating-point data-processing (1 source) - single precision */
static void handle_fp_1src_single(DisasContext *s, int opcode, int rd, int rn)
{
@@ -4825,6 +4884,18 @@ static void disas_fp_1src(DisasContext *s, uint32_t insn)
handle_fp_1src_double(s, opcode, rd, rn);
break;
+ case 3:
+ if (!arm_dc_feature(s, ARM_FEATURE_V8_FP16)) {
+ unallocated_encoding(s);
+ return;
+ }
+
+ if (!fp_access_check(s)) {
+ return;
+ }
+
+ handle_fp_1src_half(s, opcode, rd, rn);
+ break;
default:
unallocated_encoding(s);
}
--
2.16.2
next prev parent reply other threads:[~2018-03-01 11:24 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-01 11:23 [Qemu-devel] [PULL 00/42] target-arm queue Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 01/42] hw: register: Run post_write hook on reset Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 02/42] xilinx_spips: Enable only two slaves when reading/writing with stripe Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 03/42] xilinx_spips: Use 8 dummy cycles with the QIOR/QIOR4 commands Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 04/42] i2c: Fix some brace style issues Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 05/42] i2c: Move the bus class to i2c.h Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 06/42] hw/i2c-ddc: Do not fail writes Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 07/42] hw/sii9022: Add support for Silicon Image SII9022 Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 08/42] arm/vexpress: Add proper display connector emulation Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 09/42] include/exec/helper-head.h: support f16 in helper calls Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 10/42] target/arm/cpu64: introduce ARM_V8_FP16 feature bit Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 11/42] target/arm/cpu.h: update comment for half-precision values Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 12/42] target/arm/cpu.h: add additional float_status flags Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 13/42] target/arm/helper: pass explicit fpst to set_rmode Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 14/42] arm/translate-a64: implement half-precision F(MIN|MAX)(V|NMV) Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 15/42] arm/translate-a64: handle_3same_64 comment fix Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 16/42] arm/translate-a64: initial decode for simd_three_reg_same_fp16 Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 17/42] arm/translate-a64: add FP16 FADD/FABD/FSUB/FMUL/FDIV to simd_three_reg_same_fp16 Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 18/42] arm/translate-a64: add FP16 F[A]C[EQ/GE/GT] " Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 19/42] arm/translate-a64: add FP16 FMULA/X/S " Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 20/42] arm/translate-a64: add FP16 FR[ECP/SQRT]S " Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 21/42] arm/translate-a64: add FP16 pairwise ops simd_three_reg_same_fp16 Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 22/42] arm/translate-a64: add FP16 FMULX/MLS/FMLA to simd_indexed Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 23/42] arm/translate-a64: add FP16 x2 ops for simd_indexed Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 24/42] arm/translate-a64: initial decode for simd_two_reg_misc_fp16 Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 25/42] arm/translate-a64: add FP16 FPRINTx to simd_two_reg_misc_fp16 Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 26/42] arm/translate-a64: add FCVTxx " Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 27/42] arm/translate-a64: add FP16 FCMxx (zero) " Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 28/42] arm/translate-a64: add FP16 SCVTF/UCVFT " Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 29/42] arm/translate-a64: add FP16 FNEG/FABS " Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 30/42] arm/helper.c: re-factor recpe and add recepe_f16 Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 31/42] arm/translate-a64: add FP16 FRECPE Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 32/42] arm/translate-a64: add FP16 FRCPX to simd_two_reg_misc_fp16 Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 33/42] arm/translate-a64: add FP16 FSQRT " Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 34/42] arm/helper.c: re-factor rsqrte and add rsqrte_f16 Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 35/42] arm/translate-a64: add FP16 FRSQRTE to simd_two_reg_misc_fp16 Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 36/42] arm/translate-a64: add FP16 FMOV to simd_mod_imm Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 37/42] arm/translate-a64: add all FP16 ops in simd_scalar_pairwise Peter Maydell
2018-03-01 11:23 ` [Qemu-devel] [PULL 38/42] arm/translate-a64: implement simd_scalar_three_reg_same_fp16 Peter Maydell
2018-03-01 11:24 ` Peter Maydell [this message]
2018-03-01 11:24 ` [Qemu-devel] [PULL 40/42] target/arm: Enable ARM_V8_FP16 feature bit for the AArch64 "any" CPU Peter Maydell
2018-03-01 11:24 ` [Qemu-devel] [PULL 41/42] linux-user: Report AArch64 FP16 support via hwcap bits Peter Maydell
2018-03-01 11:24 ` [Qemu-devel] [PULL 42/42] MAINTAINERS: Update my email address Peter Maydell
2018-03-01 13:00 ` [Qemu-devel] [PULL 00/42] target-arm queue no-reply
2018-03-01 14:45 ` Peter Maydell
2018-03-02 0:52 ` Fam Zheng
2018-03-01 13:01 ` no-reply
2018-03-01 17:08 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180301112403.12487-40-peter.maydell@linaro.org \
--to=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).