aboutsummaryrefslogtreecommitdiff
path: root/opcodes/aarch64-tbl.h
diff options
context:
space:
mode:
authorMatthew Wahab <matthew.wahab@arm.com>2015-12-14 17:16:50 +0000
committerMatthew Wahab <matthew.wahab@arm.com>2015-12-14 17:18:50 +0000
commitbb515fea4ac30f761c17dec701c95c0b54fabf30 (patch)
tree1c5ddde0ea278a49008fc85b83ae530c5433146b /opcodes/aarch64-tbl.h
parent5f7728b7413b3bed576f8dd11d1343c20b3a2333 (diff)
downloadgdb-bb515fea4ac30f761c17dec701c95c0b54fabf30.zip
gdb-bb515fea4ac30f761c17dec701c95c0b54fabf30.tar.gz
gdb-bb515fea4ac30f761c17dec701c95c0b54fabf30.tar.bz2
[AArch64][PATCH 8/14] Support FP16 Adv.SIMD Across Lanes instructions.
ARMv8.2 adds 16-bit floating point operations as an optional extension to the floating point and Adv.SIMD support. This patch adds FP16 instructions to the group Adv.SIMD Across Lanes, making them available when +simd+fp16 is enabled. The instructions added are: FMAXNMV, FMAXV, FMINNMV and FMINV. The general form for these instructions is <OP> <Hd>, <V>.<T> where T is 4h or 8h. The new instructions valid make uses of the 8H and 4H that were previously illegal. The patch adjusts a test for illegal uses of vector types to take this into account. gas/testsuite/ 2015-12-14 Matthew Wahab <matthew.wahab@arm.com> * gas/aarch64/advsimd-fp16.d: Update expected output. * gas/aarch64/advsimd-fp16.s: Add tests for Adv.SIMD across lanes instructions. * gas/aarch64/illegal.d: Update expected output. * gas/aarch64/illegal.s: Replace test for illegal use of 'h' specifier. opcodes/ 2015-12-14 Matthew Wahab <matthew.wahab@arm.com> * aarch64-asm-2.c: Regenerate. * aarch64-dis-2.c: Regenerate. * aarch64-opc-2.c: Regenerate. * aarch64-tbl.h (QL_XLANES_FP_H): New. (aarch64_opcode_table): Add fp16 versions of fmaxnmv, fmaxv, fminnmv, fminv to the Adv.SIMD across lanes group. Change-Id: Ib9a47e867f55e0272c2446eb7e16837503d2f94c
Diffstat (limited to 'opcodes/aarch64-tbl.h')
-rw-r--r--opcodes/aarch64-tbl.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/opcodes/aarch64-tbl.h b/opcodes/aarch64-tbl.h
index 17ab3c1..a7ce31a 100644
--- a/opcodes/aarch64-tbl.h
+++ b/opcodes/aarch64-tbl.h
@@ -1218,6 +1218,13 @@
QLF2(S_S, V_4S), \
}
+/* e.g. FMINV <V><d>, <Vn>.<T>. */
+#define QL_XLANES_FP_H \
+{ \
+ QLF2 (S_H, V_4H), \
+ QLF2 (S_H, V_8H), \
+}
+
/* e.g. SADDLV <V><d>, <Vn>.<T>. */
#define QL_XLANES_L \
{ \
@@ -1397,9 +1404,17 @@ struct aarch64_opcode aarch64_opcode_table[] =
{"umaxv", 0x2e30a800, 0xbf3ffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES, F_SIZEQ},
{"uminv", 0x2e31a800, 0xbf3ffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES, F_SIZEQ},
{"fmaxnmv", 0x2e30c800, 0xbfbffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES_FP, F_SIZEQ},
+ {"fmaxnmv", 0xe30c800, 0xbffffc00, asimdall, 0, SIMD_F16,
+ OP2 (Fd, Vn), QL_XLANES_FP_H, F_SIZEQ},
{"fmaxv", 0x2e30f800, 0xbfbffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES_FP, F_SIZEQ},
+ {"fmaxv", 0xe30f800, 0xbffffc00, asimdall, 0, SIMD_F16,
+ OP2 (Fd, Vn), QL_XLANES_FP_H, F_SIZEQ},
{"fminnmv", 0x2eb0c800, 0xbfbffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES_FP, F_SIZEQ},
+ {"fminnmv", 0xeb0c800, 0xbffffc00, asimdall, 0, SIMD_F16,
+ OP2 (Fd, Vn), QL_XLANES_FP_H, F_SIZEQ},
{"fminv", 0x2eb0f800, 0xbfbffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES_FP, F_SIZEQ},
+ {"fminv", 0xeb0f800, 0xbffffc00, asimdall, 0, SIMD_F16,
+ OP2 (Fd, Vn), QL_XLANES_FP_H, F_SIZEQ},
/* AdvSIMD three different. */
{"saddl", 0x0e200000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
{"saddl2", 0x4e200000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},