[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-arm] [PATCH v4 16/31] arm/translate-a64: initial decode for simd_t
From: |
Alex Bennée |
Subject: |
[Qemu-arm] [PATCH v4 16/31] arm/translate-a64: initial decode for simd_two_reg_misc_fp16 |
Date: |
Tue, 27 Feb 2018 14:38:37 +0000 |
This actually covers two different sections of the encoding table:
Advanced SIMD scalar two-register miscellaneous FP16
Advanced SIMD two-register miscellaneous (FP16)
The difference between the two is covered by a combination of Q (bit
30) and S (bit 28). Notably the FRINTx instructions are only
available in the vector form.
This is just the decode skeleton which will be filled out by later
patches.
Signed-off-by: Alex Bennée <address@hidden>
Reviewed-by: Richard Henderson <address@hidden>
---
v2
- checkpatch cleanups
v3
- update comment on group from following patches.
- rm left over debug fpf
---
target/arm/translate-a64.c | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
index 3487c0430f..9c1892c49a 100644
--- a/target/arm/translate-a64.c
+++ b/target/arm/translate-a64.c
@@ -11164,6 +11164,45 @@ static void disas_simd_two_reg_misc(DisasContext *s,
uint32_t insn)
}
}
+/* AdvSIMD [scalar] two register miscellaneous (FP16)
+ *
+ * 31 30 29 28 27 24 23 22 21 17 16 12 11 10 9 5 4 0
+ * +---+---+---+---+---------+---+-------------+--------+-----+------+------+
+ * | 0 | Q | U | S | 1 1 1 0 | a | 1 1 1 1 0 0 | opcode | 1 0 | Rn | Rd |
+ * +---+---+---+---+---------+---+-------------+--------+-----+------+------+
+ * mask: 1000 1111 0111 1110 0000 1100 0000 0000 0x8f7e 0c00
+ * val: 0000 1110 0111 1000 0000 1000 0000 0000 0x0e78 0800
+ *
+ * This actually covers two groups where scalar access is governed by
+ * bit 28. A bunch of the instructions (float to integral) only exist
+ * in the vector form and are un-allocated for the scalar decode. Also
+ * in the scalar decode Q is always 1.
+ */
+static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
+{
+ int fpop, opcode, a;
+
+ if (!arm_dc_feature(s, ARM_FEATURE_V8_FP16)) {
+ unallocated_encoding(s);
+ return;
+ }
+
+ if (!fp_access_check(s)) {
+ return;
+ }
+
+ opcode = extract32(insn, 12, 4);
+ a = extract32(insn, 23, 1);
+ fpop = deposit32(opcode, 5, 1, a);
+
+ switch (fpop) {
+ default:
+ fprintf(stderr, "%s: insn %#04x fpop %#2x\n", __func__, insn, fpop);
+ g_assert_not_reached();
+ }
+
+}
+
/* AdvSIMD scalar x indexed element
* 31 30 29 28 24 23 22 21 20 19 16 15 12 11 10 9 5 4 0
* +-----+---+-----------+------+---+---+------+-----+---+---+------+------+
@@ -12236,6 +12275,7 @@ static const AArch64DecodeTable data_proc_simd[] = {
{ 0xce800000, 0xffe00000, disas_crypto_xar },
{ 0xce408000, 0xffe0c000, disas_crypto_three_reg_imm2 },
{ 0x0e400400, 0x9f60c400, disas_simd_three_reg_same_fp16 },
+ { 0x0e780800, 0x8f7e0c00, disas_simd_two_reg_misc_fp16 },
{ 0x00000000, 0x00000000, NULL }
};
--
2.15.1
- [Qemu-arm] [PATCH v4 01/31] include/exec/helper-head.h: support f16 in helper calls, (continued)
- [Qemu-arm] [PATCH v4 01/31] include/exec/helper-head.h: support f16 in helper calls, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 03/31] target/arm/cpu.h: update comment for half-precision values, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 07/31] arm/translate-a64: handle_3same_64 comment fix, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 04/31] target/arm/cpu.h: add additional float_status flags, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 06/31] arm/translate-a64: implement half-precision F(MIN|MAX)(V|NMV), Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 05/31] target/arm/helper: pass explicit fpst to set_rmode, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 12/31] arm/translate-a64: add FP16 FR[ECP/SQRT]S to simd_three_reg_same_fp16, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 10/31] arm/translate-a64: add FP16 F[A]C[EQ/GE/GT] to simd_three_reg_same_fp16, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 09/31] arm/translate-a64: add FP16 FADD/FABD/FSUB/FMUL/FDIV to simd_three_reg_same_fp16, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 08/31] arm/translate-a64: initial decode for simd_three_reg_same_fp16, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 16/31] arm/translate-a64: initial decode for simd_two_reg_misc_fp16,
Alex Bennée <=
- [Qemu-arm] [PATCH v4 18/31] arm/translate-a64: add FCVTxx to simd_two_reg_misc_fp16, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 15/31] arm/translate-a64: add FP16 x2 ops for simd_indexed, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 17/31] arm/translate-a64: add FP16 FPRINTx to simd_two_reg_misc_fp16, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 28/31] arm/translate-a64: add FP16 FMOV to simd_mod_imm, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 23/31] arm/translate-a64: add FP16 FRECPE, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 30/31] arm/translate-a64: implement simd_scalar_three_reg_same_fp16, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 11/31] arm/translate-a64: add FP16 FMULA/X/S to simd_three_reg_same_fp16, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 24/31] arm/translate-a64: add FP16 FRCPX to simd_two_reg_misc_fp16, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 29/31] arm/translate-a64: add all FP16 ops in simd_scalar_pairwise, Alex Bennée, 2018/02/27
- [Qemu-arm] [PATCH v4 19/31] arm/translate-a64: add FP16 FCMxx (zero) to simd_two_reg_misc_fp16, Alex Bennée, 2018/02/27