aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorTamar Christina <tamar.christina@arm.com>2017-11-15 15:56:23 +0000
committerTamar Christina <tamar.christina@arm.com>2017-11-15 15:56:23 +0000
commit01f48020363f1ca9b31df2ee0b2afedc38db1259 (patch)
tree22c06e70932733f22e4e8a84fc8ef9184f947cfe /gas
parentc0c11fa91dbbf91b9c9d04384fe9f3ef5a6e7145 (diff)
downloadgdb-01f48020363f1ca9b31df2ee0b2afedc38db1259.zip
gdb-01f48020363f1ca9b31df2ee0b2afedc38db1259.tar.gz
gdb-01f48020363f1ca9b31df2ee0b2afedc38db1259.tar.bz2
Separate the new FP16 instructions backported from Armv8.4-a to Armv8.2-a into a new flag order to distinguish them from the rest of the already existing optional FP16 instructions in Armv8.2-a.
The new flag "+fp16fml" is available from Armv8.2-a and implies +fp16 and is mandatory from Armv8.4-a. gas/ * config/tc-arm.c (arm_ext_fp16_fml, fp16fml): New. (do_neon_fmac_maybe_scalar_long): Use arm_ext_fp16_fml. * doc/c-arm.texi (fp16, fp16fml): New. * testsuite/gas/arm/armv8_2-a-fp16.d (fp16): Make fp16fml. * testsuite/gas/arm/armv8_3-a-fp16.d (fp16): Make fp16fml. * testsuite/gas/arm/armv8_2-a-fp16-illegal.d (fp16): Make fp16fml. * testsuite/gas/arm/armv8_2-a-fp16-thumb2.d (fp16): Make fp16fml. include/ * opcode/arm.h: (ARM_EXT2_FP16_FML): New. (ARM_AEXT2_V8_4A): Add ARM_EXT2_FP16_FML.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog10
-rw-r--r--gas/config/tc-arm.c9
-rw-r--r--gas/doc/c-arm.texi2
-rw-r--r--gas/testsuite/gas/arm/armv8_2-a-fp16-illegal.d2
-rw-r--r--gas/testsuite/gas/arm/armv8_2-a-fp16-thumb2.d2
-rw-r--r--gas/testsuite/gas/arm/armv8_2-a-fp16.d2
-rw-r--r--gas/testsuite/gas/arm/armv8_3-a-fp16.d2
7 files changed, 24 insertions, 5 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 8ebdb8b..307fb00 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,13 @@
+2017-11-15 Tamar Christina <tamar.christina@arm.com>
+
+ * config/tc-arm.c (arm_ext_fp16_fml, fp16fml): New.
+ (do_neon_fmac_maybe_scalar_long): Use arm_ext_fp16_fml.
+ * doc/c-arm.texi (fp16, fp16fml): New.
+ * testsuite/gas/arm/armv8_2-a-fp16.d (fp16): Make fp16fml.
+ * testsuite/gas/arm/armv8_3-a-fp16.d (fp16): Make fp16fml.
+ * testsuite/gas/arm/armv8_2-a-fp16-illegal.d (fp16): Make fp16fml.
+ * testsuite/gas/arm/armv8_2-a-fp16-thumb2.d (fp16): Make fp16fml.
+
2017-11-15 Nick Clifton <nickc@redhat.com>
PR 15152
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 128ab38..e920637 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -235,6 +235,8 @@ static const arm_feature_set arm_ext_ras =
/* FP16 instructions. */
static const arm_feature_set arm_ext_fp16 =
ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST);
+static const arm_feature_set arm_ext_fp16_fml =
+ ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_FML);
static const arm_feature_set arm_ext_v8_2 =
ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_2A);
static const arm_feature_set arm_ext_v8_3 =
@@ -16210,7 +16212,7 @@ do_neon_fmac_maybe_scalar_long (int subtype)
as_warn (_("vfmal/vfmsl with FP16 type cannot be conditional, the "
"behaviour is UNPREDICTABLE"));
- constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_fp16),
+ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_fp16_fml),
_(BAD_FP16));
constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_neon_ext_armv8),
@@ -26243,6 +26245,11 @@ static const struct arm_option_extension_value_table arm_extensions[] =
ARM_EXT_OPT ("fp16", ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
ARM_ARCH_V8_2A),
+ ARM_EXT_OPT ("fp16fml", ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST
+ | ARM_EXT2_FP16_FML),
+ ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST
+ | ARM_EXT2_FP16_FML),
+ ARM_ARCH_V8_2A),
ARM_EXT_OPT2 ("idiv", ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV | ARM_EXT_DIV),
ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV | ARM_EXT_DIV),
ARM_FEATURE_CORE_LOW (ARM_EXT_V7A),
diff --git a/gas/doc/c-arm.texi b/gas/doc/c-arm.texi
index 5e518c6..075716f 100644
--- a/gas/doc/c-arm.texi
+++ b/gas/doc/c-arm.texi
@@ -178,6 +178,8 @@ The following extensions are currently supported:
@code{crypto} (Cryptography Extensions for v8-A architecture, implies @code{fp+simd}),
@code{dotprod} (Dot Product Extensions for v8.2-A architecture, implies @code{fp+simd}),
@code{fp} (Floating Point Extensions for v8-A architecture),
+@code{fp16} (FP16 Extensions for v8.2-A architecture, implies @code{fp}),
+@code{fp16fml} (FP16 Floating Point Multiplication Variant Extensions for v8.2-A architecture, implies @code{fp16}),
@code{idiv} (Integer Divide Extensions for v7-A and v7-R architectures),
@code{iwmmxt},
@code{iwmmxt2},
diff --git a/gas/testsuite/gas/arm/armv8_2-a-fp16-illegal.d b/gas/testsuite/gas/arm/armv8_2-a-fp16-illegal.d
index 745ae05..b568087 100644
--- a/gas/testsuite/gas/arm/armv8_2-a-fp16-illegal.d
+++ b/gas/testsuite/gas/arm/armv8_2-a-fp16-illegal.d
@@ -1,2 +1,2 @@
-#as: -march=armv8.2-a+fp16 -mfpu=neon-fp-armv8
+#as: -march=armv8.2-a+fp16fml -mfpu=neon-fp-armv8
#error-output: armv8_2-a-fp16-illegal.l
diff --git a/gas/testsuite/gas/arm/armv8_2-a-fp16-thumb2.d b/gas/testsuite/gas/arm/armv8_2-a-fp16-thumb2.d
index b03a8ae..010eda7 100644
--- a/gas/testsuite/gas/arm/armv8_2-a-fp16-thumb2.d
+++ b/gas/testsuite/gas/arm/armv8_2-a-fp16-thumb2.d
@@ -1,4 +1,4 @@
-#as: -march=armv8.2-a+fp16 -mfpu=neon-fp-armv8 -mthumb
+#as: -march=armv8.2-a+fp16fml -mfpu=neon-fp-armv8 -mthumb
#source: armv8_2-a-fp16.s
#objdump: -d
diff --git a/gas/testsuite/gas/arm/armv8_2-a-fp16.d b/gas/testsuite/gas/arm/armv8_2-a-fp16.d
index 9f99828..e639253 100644
--- a/gas/testsuite/gas/arm/armv8_2-a-fp16.d
+++ b/gas/testsuite/gas/arm/armv8_2-a-fp16.d
@@ -1,4 +1,4 @@
-#as: -march=armv8.2-a+fp16 -mfpu=neon-fp-armv8
+#as: -march=armv8.2-a+fp16fml -mfpu=neon-fp-armv8
#source: armv8_2-a-fp16.s
#objdump: -d
diff --git a/gas/testsuite/gas/arm/armv8_3-a-fp16.d b/gas/testsuite/gas/arm/armv8_3-a-fp16.d
index 545275a..70d6930 100644
--- a/gas/testsuite/gas/arm/armv8_3-a-fp16.d
+++ b/gas/testsuite/gas/arm/armv8_3-a-fp16.d
@@ -1,4 +1,4 @@
-#as: -march=armv8.3-a+fp16 -mfpu=neon-fp-armv8
+#as: -march=armv8.3-a+fp16fml -mfpu=neon-fp-armv8
#source: armv8_2-a-fp16.s
#objdump: -d