diff options
| author | Saleem Abdulrasool <compnerd@compnerd.org> | 2015-01-30 19:35:18 +0000 |
|---|---|---|
| committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2015-01-30 19:35:18 +0000 |
| commit | 70fe588c889ea58c9a9d1d369bb3bbf96413e365 (patch) | |
| tree | 90d4bdbbec24c0bbdbbeaf7fa0c547f6fee898a7 /llvm/lib/Target/ARM/AsmParser | |
| parent | e7c2b386f1fc9079035db33ac7b5546a15c7e0a9 (diff) | |
| download | bcm5719-llvm-70fe588c889ea58c9a9d1d369bb3bbf96413e365.tar.gz bcm5719-llvm-70fe588c889ea58c9a9d1d369bb3bbf96413e365.zip | |
ARM: further correct .fpu directive handling
If the original FPU specification involved a restricted VFP unit (d16), ensure
that we reset the functionality when we encounter a new FPU type. In
particular, if the user specified vfpv3-d16, but switched to a VFPv3 (which has
32 double precision registers), we would fail to reset the D16 feature, and
treat it as being equivalent to vfpv3-d16.
llvm-svn: 227603
Diffstat (limited to 'llvm/lib/Target/ARM/AsmParser')
| -rw-r--r-- | llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index 2de0ffa5ec6..bdad759b23d 100644 --- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -9197,11 +9197,12 @@ static const struct { } FPUs[] = { {ARM::VFP, ARM::FeatureVFP2, ARM::FeatureNEON}, {ARM::VFPV2, ARM::FeatureVFP2, ARM::FeatureNEON}, - {ARM::VFPV3, ARM::FeatureVFP2 | ARM::FeatureVFP3, ARM::FeatureNEON}, + {ARM::VFPV3, ARM::FeatureVFP2 | ARM::FeatureVFP3, + ARM::FeatureNEON | ARM::FeatureD16}, {ARM::VFPV3_D16, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureD16, ARM::FeatureNEON}, {ARM::VFPV4, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4, - ARM::FeatureNEON}, + ARM::FeatureNEON | ARM::FeatureD16}, {ARM::VFPV4_D16, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 | ARM::FeatureD16, ARM::FeatureNEON}, @@ -9210,19 +9211,20 @@ static const struct { ARM::FeatureNEON | ARM::FeatureCrypto}, {ARM::FP_ARMV8, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 | ARM::FeatureFPARMv8, - ARM::FeatureNEON | ARM::FeatureCrypto}, - {ARM::NEON, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureNEON, 0}, + ARM::FeatureNEON | ARM::FeatureCrypto | ARM::FeatureD16}, + {ARM::NEON, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureNEON, + ARM::FeatureD16}, {ARM::NEON_VFPV4, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 | ARM::FeatureNEON, - 0}, + ARM::FeatureD16}, {ARM::NEON_FP_ARMV8, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 | ARM::FeatureFPARMv8 | ARM::FeatureNEON, - ARM::FeatureCrypto}, + ARM::FeatureCrypto | ARM::FeatureD16}, {ARM::CRYPTO_NEON_FP_ARMV8, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 | ARM::FeatureFPARMv8 | ARM::FeatureNEON | ARM::FeatureCrypto, - 0}, + ARM::FeatureD16}, {ARM::SOFTVFP, 0, 0}, }; |

