diff options
author | Tamar Christina <tamar.christina@arm.com> | 2017-11-15 15:56:23 +0000 |
---|---|---|
committer | Tamar Christina <tamar.christina@arm.com> | 2017-11-15 15:56:23 +0000 |
commit | 01f48020363f1ca9b31df2ee0b2afedc38db1259 (patch) | |
tree | 22c06e70932733f22e4e8a84fc8ef9184f947cfe /gas/config/tc-arm.c | |
parent | c0c11fa91dbbf91b9c9d04384fe9f3ef5a6e7145 (diff) | |
download | gdb-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/config/tc-arm.c')
-rw-r--r-- | gas/config/tc-arm.c | 9 |
1 files changed, 8 insertions, 1 deletions
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), |