Skip to content

Commit 98ae944

Browse files
committed
Ensure FPU Features are collected when using the Clang Assembler
Previously, FPU features were not collected when forming a list of features for the Assembler. This also allows NEON to be pulled from the FPU support rather than having it hardcoded into the Target Parser Definitions.
1 parent aa3866c commit 98ae944

File tree

7 files changed

+160
-119
lines changed

7 files changed

+160
-119
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ Potentially Breaking Changes
3838
- Fix missing diagnostics for uses of declarations when performing typename access,
3939
such as when performing member access on a '[[deprecated]]' type alias.
4040
(#GH58547)
41+
- For ARM targets, when using cc1as, the features included in the selected CPU or
42+
Arch's FPU are now loaded and utilized. If you wish not to use a specific feature,
43+
this will need appending to the command line used.
4144

4245
C/C++ Language Potentially Breaking Changes
4346
-------------------------------------------
@@ -427,6 +430,7 @@ X86 Support
427430

428431
Arm and AArch64 Support
429432
^^^^^^^^^^^^^^^^^^^^^^^
433+
- For ARM targets, cc1as now considers the FPU's features for the selected CPU or Arch.
430434

431435
Android Support
432436
^^^^^^^^^^^^^^^

clang/lib/Driver/ToolChains/Arch/ARM.cpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -679,20 +679,18 @@ llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D,
679679
CPUArgFPUKind != llvm::ARM::FK_INVALID ? CPUArgFPUKind : ArchArgFPUKind;
680680
(void)llvm::ARM::getFPUFeatures(FPUKind, Features);
681681
} else {
682-
bool Generic = true;
683-
if (!ForAS) {
684-
std::string CPU = arm::getARMTargetCPU(CPUName, ArchName, Triple);
685-
if (CPU != "generic")
686-
Generic = false;
687-
llvm::ARM::ArchKind ArchKind =
688-
arm::getLLVMArchKindForARM(CPU, ArchName, Triple);
689-
FPUKind = llvm::ARM::getDefaultFPU(CPU, ArchKind);
690-
(void)llvm::ARM::getFPUFeatures(FPUKind, Features);
691-
}
682+
std::string CPU = arm::getARMTargetCPU(CPUName, ArchName, Triple);
683+
bool Generic = CPU == "generic";
692684
if (Generic && (Triple.isOSWindows() || Triple.isOSDarwin()) &&
693685
getARMSubArchVersionNumber(Triple) >= 7) {
694686
FPUKind = llvm::ARM::parseFPU("neon");
695687
(void)llvm::ARM::getFPUFeatures(FPUKind, Features);
688+
} else if ((!Generic) ||
689+
(Generic && getARMSubArchVersionNumber(Triple) >= 7)) {
690+
llvm::ARM::ArchKind ArchKind =
691+
arm::getLLVMArchKindForARM(CPU, ArchName, Triple);
692+
FPUKind = llvm::ARM::getDefaultFPU(CPU, ArchKind);
693+
(void)llvm::ARM::getFPUFeatures(FPUKind, Features);
696694
}
697695
}
698696

clang/test/Driver/arm-fpu-selection.s

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Ensures that when targeting an ARM target with an Asm file, clang
2+
// collects the features from the FPU. This is critical in the
3+
// activation of NEON for supported targets. The Cortex-R52 will be
4+
// used and tested for VFP and NEON Support
5+
6+
// RUN: %clang -target arm-none-eabi -mcpu=cortex-r52 -c %s -o /dev/null | count 0
7+
// RUN: %clang -target arm-none-eabi -mcpu=cortex-r52 -c %s -o /dev/null -### 2> %t | FileCheck --check-prefix=CHECK-TARGET-FEATURES < %t %s
8+
9+
// Check that NEON and VFPV5 have been activated when using Cortex-R52 when using cc1as
10+
// CHECK-TARGET-FEATURES: "-target-feature" "+neon"
11+
// CHECK-TARGET-FEATURES: "-target-feature" "+fp-armv8"
12+
// CHECK-TARGET-FEATURES: "-target-feature" "+vfp2sp"
13+
// CHECK-TARGET-FEATURES: "-target-feature" "+vfp3"
14+
// CHECK-TARGET-FEATURES: "-target-feature" "+fp-armv8d16"
15+
// CHECK-TARGET-FEATURES: "-target-feature" "+fp-armv8d16sp"
16+
// CHECK-TARGET-FEATURES: "-target-feature" "+fp-armv8sp"
17+
18+
vadd.f32 s0, s1, s2
19+
vadd.f64 d0, d1, d2
20+
vcvt.u32.f32 s0, s0, #1
21+
vcvt.u32.f64 d0, d0, #1
22+
vcvtb.f32.f16 s0, s1
23+
vcvtb.f64.f16 d0, s1
24+
vfma.f32 s0, s1, s2
25+
vfma.f64 d0, d1, d2
26+
vcvta.u32.f32 s0, s1
27+
vcvta.u32.f64 s0, d1
28+
vadd.f32 q0, q1, q2
29+
vcvt.f32.f16 q0, d1
30+
vfma.f32 q0, q1, q2
31+
vcvta.u32.f32 q0, q1

clang/test/Driver/armv8.1m.main.s

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,21 @@
88
# RUN: not %clang -c -target arm-none-none-eabi -march=armv8.1-m.main+fp -o /dev/null %s 2>%t
99
# RUN: FileCheck --check-prefix=ERROR-V81M_FP < %t %s
1010
# RUN: not %clang -c -target arm-none-none-eabi -march=armv8.1-m.main+nofp -o /dev/null %s 2>%t
11-
# RUN: FileCheck --check-prefix=ERROR-V81M_FP < %t %s
11+
# RUN: FileCheck --check-prefix=ERROR-V81M_NOFP < %t %s
1212
# RUN: not %clang -c -target arm-none-none-eabi -march=armv8.1-m.main+fp.dp -o /dev/null %s 2>%t
1313
# RUN: FileCheck --check-prefix=ERROR-V81M_FPDP < %t %s
1414
# RUN: not %clang -c -target arm-none-none-eabi -march=armv8.1-m.main+nofp.dp -o /dev/null %s 2>%t
15-
# RUN: FileCheck --check-prefix=ERROR-V81M_FPDP < %t %s
15+
# RUN: FileCheck --check-prefix=ERROR-V81M_NOFPDP < %t %s
1616
# RUN: not %clang -c -target arm-none-none-eabi -march=armv8.1-m.main+mve -o /dev/null %s 2>%t
1717
# RUN: FileCheck --check-prefix=ERROR-V81M_MVE < %t %s
1818
# RUN: not %clang -c -target arm-none-none-eabi -march=armv8.1-m.main+nomve -o /dev/null %s 2>%t
19-
# RUN: FileCheck --check-prefix=ERROR-V81M_MVE < %t %s
19+
# RUN: FileCheck --check-prefix=ERROR-V81M_NOMVE < %t %s
2020
# RUN: not %clang -c -target arm-none-none-eabi -march=armv8.1-m.main+mve+fp -o /dev/null %s 2>%t
2121
# RUN: FileCheck --check-prefix=ERROR-V81M_MVE_FP < %t %s
2222
# RUN: not %clang -c -target arm-none-none-eabi -march=armv8.1-m.main+mve.fp -o /dev/null %s 2>%t
2323
# RUN: FileCheck --check-prefix=ERROR-V81M_MVEFP < %t %s
2424
# RUN: not %clang -c -target arm-none-none-eabi -march=armv8.1-m.main+nomve.fp -o /dev/null %s 2>%t
25-
# RUN: FileCheck --check-prefix=ERROR-V81M_MVEFP < %t %s
25+
# RUN: FileCheck --check-prefix=ERROR-V81M_NOMVEFP < %t %s
2626

2727
.syntax unified
2828
.thumb
@@ -35,39 +35,58 @@ qadd r0, r1, r2
3535
# ERROR-V8M: :[[@LINE-1]]:1: error
3636
# ERROR-V81M: :[[@LINE-2]]:1: error
3737
# ERROR-V81M_FP: :[[@LINE-3]]:1: error
38-
# ERROR-V81M_FPDP: :[[@LINE-4]]:1: error
38+
# ERROR-V81M_NOFP: :[[@LINE-4]]:1: error
39+
# ERROR-V81M_FPDP: :[[@LINE-5]]:1: error
40+
# ERROR-V81M_NOFPDP: :[[@LINE-6]]:1: error
41+
# ERROR-V81M_NOMVE: :[[@LINE-7]]:1: error
42+
# ERROR-V81M_NOMVEFP: :[[@LINE-8]]:1: error
3943

4044
vadd.f16 s0, s1, s2
4145
# ERROR-V8M: :[[@LINE-1]]:1: error
42-
# ERROR-V81M: :[[@LINE-2]]:1: error
43-
# ERROR-V81M_DSP: :[[@LINE-3]]:1: error
44-
# ERROR-V81M_MVE: :[[@LINE-4]]:1: error
46+
# ERROR-V81M_NOFP: :[[@LINE-2]]:1: error
4547

4648
vabs.f32 s0, s1
47-
# ERROR-V8M: :[[@LINE-1]]:1: error
48-
# ERROR-V81M: :[[@LINE-2]]:1: error
49-
# ERROR-V81M_DSP: :[[@LINE-3]]:1: error
50-
# ERROR-V81M_MVE: :[[@LINE-4]]:1: error
49+
# ERROR-V81M_NOFP: :[[@LINE-1]]:1: error
5150

52-
vcmp.f64 d0,d1
51+
vabs.s32 q0, q1
5352
# ERROR-V8M: :[[@LINE-1]]:1: error
5453
# ERROR-V81M: :[[@LINE-2]]:1: error
5554
# ERROR-V81M_DSP: :[[@LINE-3]]:1: error
5655
# ERROR-V81M_FP: :[[@LINE-4]]:1: error
57-
# ERROR-V81M_MVE: :[[@LINE-5]]:1: error
58-
# ERROR-V81M_MVE_FP: :[[@LINE-6]]:1: error
59-
# ERROR-V81M_MVEFP: :[[@LINE-7]]:1: error
56+
# ERROR-V81M_NOFP: :[[@LINE-5]]:1: error
57+
# ERROR-V81M_FPDP: :[[@LINE-6]]:1: error
58+
# ERROR-V81M_NOFPDP: :[[@LINE-7]]:1: error
59+
# ERROR-V81M_NOMVE: :[[@LINE-8]]:1: error
60+
# ERROR-V81M_NOMVEFP: :[[@LINE-9]]:1: error
61+
62+
vcmp.f64 d0,d1
63+
# ERROR-V81M: :[[@LINE-1]]:1: error
64+
# ERROR-V81M_DSP: :[[@LINE-2]]:1: error
65+
# ERROR-V81M_FP: :[[@LINE-3]]:1: error
66+
# ERROR-V81M_NOFP: :[[@LINE-4]]:1: error
67+
# ERROR-V81M_NOFPDP: :[[@LINE-5]]:1: error
68+
# ERROR-V81M_MVE: :[[@LINE-6]]:1: error
69+
# ERROR-V81M_NOMVE: :[[@LINE-7]]:1: error
70+
# ERROR-V81M_MVE_FP: :[[@LINE-8]]:1: error
71+
# ERROR-V81M_MVEFP: :[[@LINE-9]]:1: error
72+
# ERROR-V81M_NOMVEFP: :[[@LINE-10]]:1: error
6073

6174
asrl r0, r1, r2
6275
# ERROR-V8M: :[[@LINE-1]]:1: error
6376
# ERROR-V81M: :[[@LINE-2]]:1: error
6477
# ERROR-V81M_DSP: :[[@LINE-3]]:1: error
6578
# ERROR-V81M_FP: :[[@LINE-4]]:1: error
6679
# ERROR-V81M_FPDP: :[[@LINE-5]]:1: error
80+
# ERROR-V81M_NOFPDP: :[[@LINE-6]]:1: error
81+
# ERROR-V81M_NOMVE: :[[@LINE-7]]:1: error
82+
# ERROR-V81M_NOMVEFP: :[[@LINE-8]]:1: error
6783

6884
vcadd.i8 q0, q1, q2, #90
6985
# ERROR-V8M: :[[@LINE-1]]:1: error
7086
# ERROR-V81M: :[[@LINE-2]]:1: error
7187
# ERROR-V81M_DSP: :[[@LINE-3]]:1: error
7288
# ERROR-V81M_FP: :[[@LINE-4]]:1: error
7389
# ERROR-V81M_FPDP: :[[@LINE-5]]:1: error
90+
# ERROR-V81M_NOFPDP: :[[@LINE-6]]:1: error
91+
# ERROR-V81M_NOMVE: :[[@LINE-7]]:1: error
92+
# ERROR-V81M_NOMVEFP: :[[@LINE-8]]:1: error

clang/test/Preprocessor/arm-target-features.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1028,7 +1028,7 @@
10281028
// CHECK-R52-NOT: #define __ARM_NEON 1
10291029
// CHECK-R52-NOT: #define __ARM_NEON__
10301030

1031-
// Check that on AArch32, Neon is correctly activated when the targey supports the feature
1031+
// Check that on AArch32, Neon is correctly activated when the target supports the feature
10321032
// RUN: %clang -target arm-none-eabi -march=armv8-a -mfloat-abi=hard -x c -E -dM -o - %s | FileCheck -check-prefix=CHECK-SIMD %s
10331033
// RUN: %clang -target arm-none-eabi -mcpu=cortex-r52 -mfloat-abi=hard -x c -E -dM -o - %s | FileCheck -check-prefix=CHECK-SIMD %s
10341034
// RUN: %clang -target arm-none-eabi -mcpu=cortex-a57 -mfloat-abi=hard -x c -E -dM -o - %s | FileCheck -check-prefix=CHECK-SIMD %s

llvm/include/llvm/TargetParser/ARMTargetParser.def

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -107,88 +107,86 @@ ARM_ARCH("armv7e-m", ARMV7EM, "7E-M", "+v7em", ARMBuildAttrs::CPUArch::v7E_M,
107107
ARM_ARCH("armv8-a", ARMV8A, "8-A", "+v8a", ARMBuildAttrs::CPUArch::v8_A,
108108
FK_CRYPTO_NEON_FP_ARMV8,
109109
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
110-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD))
110+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC))
111111
ARM_ARCH("armv8.1-a", ARMV8_1A, "8.1-A", "+v8.1a", ARMBuildAttrs::CPUArch::v8_A,
112112
FK_CRYPTO_NEON_FP_ARMV8,
113113
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
114-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD))
114+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC))
115115
ARM_ARCH("armv8.2-a", ARMV8_2A, "8.2-A", "+v8.2a", ARMBuildAttrs::CPUArch::v8_A,
116116
FK_CRYPTO_NEON_FP_ARMV8,
117117
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
118-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
119-
ARM::AEK_RAS))
118+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS))
120119
ARM_ARCH("armv8.3-a", ARMV8_3A, "8.3-A", "+v8.3a", ARMBuildAttrs::CPUArch::v8_A,
121120
FK_CRYPTO_NEON_FP_ARMV8,
122121
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
123-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
124-
ARM::AEK_RAS))
122+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS))
125123
ARM_ARCH("armv8.4-a", ARMV8_4A, "8.4-A", "+v8.4a", ARMBuildAttrs::CPUArch::v8_A,
126124
FK_CRYPTO_NEON_FP_ARMV8,
127125
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
128-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
129-
ARM::AEK_RAS | ARM::AEK_DOTPROD))
126+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
127+
ARM::AEK_DOTPROD))
130128
ARM_ARCH("armv8.5-a", ARMV8_5A, "8.5-A", "+v8.5a", ARMBuildAttrs::CPUArch::v8_A,
131129
FK_CRYPTO_NEON_FP_ARMV8,
132130
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
133-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
134-
ARM::AEK_RAS | ARM::AEK_DOTPROD))
131+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
132+
ARM::AEK_DOTPROD))
135133
ARM_ARCH("armv8.6-a", ARMV8_6A, "8.6-A", "+v8.6a", ARMBuildAttrs::CPUArch::v8_A,
136134
FK_CRYPTO_NEON_FP_ARMV8,
137135
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
138-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
139-
ARM::AEK_RAS | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
136+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
137+
ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
140138
ARM_ARCH("armv8.7-a", ARMV8_7A, "8.7-A", "+v8.7a", ARMBuildAttrs::CPUArch::v8_A,
141139
FK_CRYPTO_NEON_FP_ARMV8,
142140
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
143-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
144-
ARM::AEK_RAS | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
141+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
142+
ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
145143
ARM_ARCH("armv8.8-a", ARMV8_8A, "8.8-A", "+v8.8a", ARMBuildAttrs::CPUArch::v8_A,
146144
FK_CRYPTO_NEON_FP_ARMV8,
147145
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
148-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
149-
ARM::AEK_RAS | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_SHA2 |
150-
ARM::AEK_AES | ARM::AEK_I8MM))
146+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
147+
ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_SHA2 | ARM::AEK_AES |
148+
ARM::AEK_I8MM))
151149
ARM_ARCH("armv8.9-a", ARMV8_9A, "8.9-A", "+v8.9a", ARMBuildAttrs::CPUArch::v8_A,
152150
FK_CRYPTO_NEON_FP_ARMV8,
153151
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
154-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
155-
ARM::AEK_RAS | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_SHA2 |
156-
ARM::AEK_AES | ARM::AEK_I8MM))
152+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
153+
ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_SHA2 | ARM::AEK_AES |
154+
ARM::AEK_I8MM))
157155
ARM_ARCH("armv9-a", ARMV9A, "9-A", "+v9a", ARMBuildAttrs::CPUArch::v9_A,
158156
FK_NEON_FP_ARMV8,
159157
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
160-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
161-
ARM::AEK_RAS | ARM::AEK_DOTPROD))
158+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
159+
ARM::AEK_DOTPROD))
162160
ARM_ARCH("armv9.1-a", ARMV9_1A, "9.1-A", "+v9.1a", ARMBuildAttrs::CPUArch::v9_A,
163161
FK_NEON_FP_ARMV8,
164162
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
165-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
166-
ARM::AEK_RAS | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
163+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
164+
ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
167165
ARM_ARCH("armv9.2-a", ARMV9_2A, "9.2-A", "+v9.2a", ARMBuildAttrs::CPUArch::v9_A,
168166
FK_NEON_FP_ARMV8,
169167
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
170-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
171-
ARM::AEK_RAS | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
168+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
169+
ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
172170
ARM_ARCH("armv9.3-a", ARMV9_3A, "9.3-A", "+v9.3a", ARMBuildAttrs::CPUArch::v9_A,
173171
FK_CRYPTO_NEON_FP_ARMV8,
174172
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
175-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
176-
ARM::AEK_RAS | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
173+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
174+
ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
177175
ARM_ARCH("armv9.4-a", ARMV9_4A, "9.4-A", "+v9.4a", ARMBuildAttrs::CPUArch::v9_A,
178176
FK_NEON_FP_ARMV8,
179177
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
180-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
181-
ARM::AEK_RAS | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
178+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
179+
ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
182180
ARM_ARCH("armv9.5-a", ARMV9_5A, "9.5-A", "+v9.5a", ARMBuildAttrs::CPUArch::v9_A,
183181
FK_NEON_FP_ARMV8,
184182
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
185-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
186-
ARM::AEK_RAS | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
183+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
184+
ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
187185
ARM_ARCH("armv9.6-a", ARMV9_6A, "9.6-A", "+v9.6a", ARMBuildAttrs::CPUArch::v9_A,
188186
FK_NEON_FP_ARMV8,
189187
(ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
190-
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_SIMD |
191-
ARM::AEK_RAS | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
188+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
189+
ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM))
192190
ARM_ARCH("armv8-r", ARMV8R, "8-R", "+v8r", ARMBuildAttrs::CPUArch::v8_R,
193191
FK_FPV5_SP_D16,
194192
(ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
@@ -336,8 +334,8 @@ ARM_CPU_NAME("cortex-r7", ARMV7R, FK_VFPV3_D16_FP16, false,
336334
(ARM::AEK_MP | ARM::AEK_HWDIVARM))
337335
ARM_CPU_NAME("cortex-r8", ARMV7R, FK_VFPV3_D16_FP16, false,
338336
(ARM::AEK_MP | ARM::AEK_HWDIVARM))
339-
ARM_CPU_NAME("cortex-r52", ARMV8R, FK_NEON_FP_ARMV8, false, ARM::AEK_SIMD)
340-
ARM_CPU_NAME("cortex-r52plus", ARMV8R, FK_NEON_FP_ARMV8, false, ARM::AEK_SIMD)
337+
ARM_CPU_NAME("cortex-r52", ARMV8R, FK_NEON_FP_ARMV8, false, ARM::AEK_NONE)
338+
ARM_CPU_NAME("cortex-r52plus", ARMV8R, FK_NEON_FP_ARMV8, false, ARM::AEK_NONE)
341339
ARM_CPU_NAME("sc300", ARMV7M, FK_NONE, false, ARM::AEK_NONE)
342340
ARM_CPU_NAME("cortex-m3", ARMV7M, FK_NONE, true, ARM::AEK_NONE)
343341
ARM_CPU_NAME("cortex-m4", ARMV7EM, FK_FPV4_SP_D16, true, ARM::AEK_NONE)

0 commit comments

Comments
 (0)