@@ -5615,6 +5615,17 @@ class ARMTargetInfo : public TargetInfo {
5615
5615
5616
5616
bool setFPMath(StringRef Name) override;
5617
5617
5618
+ void getTargetDefinesARMV81A(const LangOptions &Opts,
5619
+ MacroBuilder &Builder) const {
5620
+ Builder.defineMacro("__ARM_FEATURE_QRDMX", "1");
5621
+ }
5622
+
5623
+ void getTargetDefinesARMV82A(const LangOptions &Opts,
5624
+ MacroBuilder &Builder) const {
5625
+ // Also include the ARMv8.1-A defines
5626
+ getTargetDefinesARMV81A(Opts, Builder);
5627
+ }
5628
+
5618
5629
void getTargetDefines(const LangOptions &Opts,
5619
5630
MacroBuilder &Builder) const override {
5620
5631
// Target identification.
@@ -5813,8 +5824,15 @@ class ARMTargetInfo : public TargetInfo {
5813
5824
if (Opts.UnsafeFPMath)
5814
5825
Builder.defineMacro("__ARM_FP_FAST", "1");
5815
5826
5816
- if (ArchKind == llvm::ARM::AK_ARMV8_1A)
5817
- Builder.defineMacro("__ARM_FEATURE_QRDMX", "1");
5827
+ switch(ArchKind) {
5828
+ default: break;
5829
+ case llvm::ARM::AK_ARMV8_1A:
5830
+ getTargetDefinesARMV81A(Opts, Builder);
5831
+ break;
5832
+ case llvm::ARM::AK_ARMV8_2A:
5833
+ getTargetDefinesARMV82A(Opts, Builder);
5834
+ break;
5835
+ }
5818
5836
}
5819
5837
5820
5838
ArrayRef<Builtin::Info> getTargetBuiltins() const override {
@@ -6207,9 +6225,8 @@ class AArch64TargetInfo : public TargetInfo {
6207
6225
unsigned CRC;
6208
6226
unsigned Crypto;
6209
6227
unsigned Unaligned;
6210
- unsigned V8_1A;
6211
- unsigned V8_2A;
6212
6228
unsigned HasFullFP16;
6229
+ llvm::AArch64::ArchKind ArchKind;
6213
6230
6214
6231
static const Builtin::Info BuiltinInfo[];
6215
6232
@@ -6275,6 +6292,20 @@ class AArch64TargetInfo : public TargetInfo {
6275
6292
static_cast<unsigned>(llvm::AArch64::ArchKind::AK_INVALID);
6276
6293
}
6277
6294
6295
+ void getTargetDefinesARMV81A(const LangOptions &Opts,
6296
+ MacroBuilder &Builder) const {
6297
+ Builder.defineMacro("__ARM_FEATURE_QRDMX", "1");
6298
+ }
6299
+
6300
+ void getTargetDefinesARMV82A(const LangOptions &Opts,
6301
+ MacroBuilder &Builder) const {
6302
+ // Also include the ARMv8.1 defines
6303
+ getTargetDefinesARMV81A(Opts, Builder);
6304
+
6305
+ if (FPU == NeonMode && HasFullFP16)
6306
+ Builder.defineMacro("__ARM_FEATURE_FP16_VECTOR_ARITHMETIC", "1");
6307
+ }
6308
+
6278
6309
void getTargetDefines(const LangOptions &Opts,
6279
6310
MacroBuilder &Builder) const override {
6280
6311
// Target identification.
@@ -6339,10 +6370,15 @@ class AArch64TargetInfo : public TargetInfo {
6339
6370
if (Unaligned)
6340
6371
Builder.defineMacro("__ARM_FEATURE_UNALIGNED", "1");
6341
6372
6342
- if (V8_1A)
6343
- Builder.defineMacro("__ARM_FEATURE_QRDMX", "1");
6344
- if (V8_2A && FPU == NeonMode && HasFullFP16)
6345
- Builder.defineMacro("__ARM_FEATURE_FP16_VECTOR_ARITHMETIC", "1");
6373
+ switch(ArchKind) {
6374
+ default: break;
6375
+ case llvm::AArch64::ArchKind::AK_ARMV8_1A:
6376
+ getTargetDefinesARMV81A(Opts, Builder);
6377
+ break;
6378
+ case llvm::AArch64::ArchKind::AK_ARMV8_2A:
6379
+ getTargetDefinesARMV82A(Opts, Builder);
6380
+ break;
6381
+ }
6346
6382
6347
6383
// All of the __sync_(bool|val)_compare_and_swap_(1|2|4|8) builtins work.
6348
6384
Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
@@ -6369,9 +6405,8 @@ class AArch64TargetInfo : public TargetInfo {
6369
6405
CRC = 0;
6370
6406
Crypto = 0;
6371
6407
Unaligned = 1;
6372
- V8_1A = 0;
6373
- V8_2A = 0;
6374
6408
HasFullFP16 = 0;
6409
+ ArchKind = llvm::AArch64::ArchKind::AK_ARMV8A;
6375
6410
6376
6411
for (const auto &Feature : Features) {
6377
6412
if (Feature == "+neon")
@@ -6383,9 +6418,9 @@ class AArch64TargetInfo : public TargetInfo {
6383
6418
if (Feature == "+strict-align")
6384
6419
Unaligned = 0;
6385
6420
if (Feature == "+v8.1a")
6386
- V8_1A = 1 ;
6421
+ ArchKind = llvm::AArch64::ArchKind::AK_ARMV8_1A ;
6387
6422
if (Feature == "+v8.2a")
6388
- V8_2A = 1 ;
6423
+ ArchKind = llvm::AArch64::ArchKind::AK_ARMV8_2A ;
6389
6424
if (Feature == "+fullfp16")
6390
6425
HasFullFP16 = 1;
6391
6426
}
0 commit comments