Skip to content
This repository was archived by the owner on Mar 28, 2020. It is now read-only.

Commit faf3d27

Browse files
committed
[ARM] Add Cortex-A32 support
Adding Cortex-A32 as an available target in the ARM backend. Patch by Sam Parker. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@263956 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 962167f commit faf3d27

File tree

4 files changed

+46
-2
lines changed

4 files changed

+46
-2
lines changed

include/llvm/Support/ARMTargetParser.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ ARM_CPU_NAME("sc300", AK_ARMV7M, FK_NONE, false, AEK_NONE)
215215
ARM_CPU_NAME("cortex-m3", AK_ARMV7M, FK_NONE, true, AEK_NONE)
216216
ARM_CPU_NAME("cortex-m4", AK_ARMV7EM, FK_FPV4_SP_D16, true, AEK_NONE)
217217
ARM_CPU_NAME("cortex-m7", AK_ARMV7EM, FK_FPV5_D16, false, AEK_NONE)
218+
ARM_CPU_NAME("cortex-a32", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, AEK_CRC)
218219
ARM_CPU_NAME("cortex-a35", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, AEK_CRC)
219220
ARM_CPU_NAME("cortex-a53", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, true, AEK_CRC)
220221
ARM_CPU_NAME("cortex-a57", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, AEK_CRC)

lib/Target/ARM/ARM.td

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,8 @@ def ProcA15 : SubtargetFeature<"a15", "ARMProcFamily", "CortexA15",
252252
"Cortex-A15 ARM processors", []>;
253253
def ProcA17 : SubtargetFeature<"a17", "ARMProcFamily", "CortexA17",
254254
"Cortex-A17 ARM processors", []>;
255+
def ProcA32 : SubtargetFeature<"a32", "ARMProcFamily", "CortexA32",
256+
"Cortex-A32 ARM processors", []>;
255257
def ProcA35 : SubtargetFeature<"a35", "ARMProcFamily", "CortexA35",
256258
"Cortex-A35 ARM processors", []>;
257259
def ProcA53 : SubtargetFeature<"a53", "ARMProcFamily", "CortexA53",
@@ -651,6 +653,12 @@ def : ProcNoItin<"cortex-m7", [ARMv7em,
651653
FeatureFPARMv8,
652654
FeatureD16]>;
653655

656+
def : ProcNoItin<"cortex-a32", [ARMv8a,
657+
FeatureHWDiv,
658+
FeatureHWDivARM,
659+
FeatureT2XtPk,
660+
FeatureCrypto,
661+
FeatureCRC]>;
654662

655663
def : ProcNoItin<"cortex-a35", [ARMv8a, ProcA35,
656664
FeatureHWDiv,

lib/Target/ARM/ARMSubtarget.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ class ARMSubtarget : public ARMGenSubtargetInfo {
4343
protected:
4444
enum ARMProcFamilyEnum {
4545
Others, CortexA5, CortexA7, CortexA8, CortexA9, CortexA12, CortexA15,
46-
CortexA17, CortexR4, CortexR4F, CortexR5, CortexR7, CortexA35, CortexA53,
47-
CortexA57, CortexA72, Krait, Swift, ExynosM1
46+
CortexA17, CortexR4, CortexR4F, CortexR5, CortexR7, CortexA32, CortexA35,
47+
CortexA53, CortexA57, CortexA72, Krait, Swift, ExynosM1
4848
};
4949
enum ARMProcClassEnum {
5050
None, AClass, RClass, MClass

test/CodeGen/ARM/build-attributes.ll

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@
108108
; RUN: llc < %s -mtriple=armv7r-linux-gnueabi -mcpu=cortex-r8 | FileCheck %s --check-prefix=CORTEX-R8
109109
; RUN: llc < %s -mtriple=armv7r-linux-gnueabi -mcpu=cortex-r8 -enable-unsafe-fp-math -disable-fp-elim -enable-no-infs-fp-math -enable-no-nans-fp-math -fp-contract=fast | FileCheck %s --check-prefix=CORTEX-R8-FAST
110110
; RUN: llc < %s -mtriple=armv7r-linux-gnueabi -mcpu=cortex-r8 -enable-sign-dependent-rounding-fp-math | FileCheck %s --check-prefix=DYN-ROUNDING
111+
; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mcpu=cortex-a32 | FileCheck %s --check-prefix=CORTEX-A32
112+
; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mcpu=cortex-a32 -enable-unsafe-fp-math -disable-fp-elim -enable-no-infs-fp-math -enable-no-nans-fp-math -fp-contract=fast | FileCheck %s --check-prefix=CORTEX-A32-FAST
113+
; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mcpu=cortex-a32 -enable-sign-dependent-rounding-fp-math | FileCheck %s --check-prefix=DYN-ROUNDING
111114
; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mcpu=cortex-a35 | FileCheck %s --check-prefix=CORTEX-A35
112115
; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mcpu=cortex-a35 -enable-unsafe-fp-math -disable-fp-elim -enable-no-infs-fp-math -enable-no-nans-fp-math -fp-contract=fast | FileCheck %s --check-prefix=CORTEX-A35-FAST
113116
; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mcpu=cortex-a35 -enable-sign-dependent-rounding-fp-math | FileCheck %s --check-prefix=DYN-ROUNDING
@@ -147,6 +150,8 @@
147150
; RUN: llc < %s -mtriple=armv8.1a-none-linux-gnueabi -mattr=+strict-align | FileCheck %s --check-prefix=STRICT-ALIGN
148151
; RUN: llc < %s -mtriple=armv8.1a-none-linux-gnueabi | FileCheck %s --check-prefix=NO-STRICT-ALIGN
149152
; ARMv8a (AArch32)
153+
; RUN: llc < %s -mtriple=armv8-none-linux-gnueabi -mcpu=cortex-a32 | FileCheck %s --check-prefix=NO-STRICT-ALIGN
154+
; RUN: llc < %s -mtriple=armv8-none-linux-gnueabi -mcpu=cortex-a32 -mattr=+strict-align | FileCheck %s --check-prefix=STRICT-ALIGN
150155
; RUN: llc < %s -mtriple=armv8-none-linux-gnueabi -mcpu=cortex-a35 | FileCheck %s --check-prefix=NO-STRICT-ALIGN
151156
; RUN: llc < %s -mtriple=armv8-none-linux-gnueabi -mcpu=cortex-a35 -mattr=+strict-align | FileCheck %s --check-prefix=STRICT-ALIGN
152157
; RUN: llc < %s -mtriple=armv8-none-linux-gnueabi -mcpu=cortex-a57 | FileCheck %s --check-prefix=NO-STRICT-ALIGN
@@ -1246,6 +1251,36 @@
12461251
; CORTEX-R8-FAST-NOT: .eabi_attribute 22
12471252
; CORTEX-R8-FAST: .eabi_attribute 23, 1
12481253

1254+
; CORTEX-A32: .cpu cortex-a32
1255+
; CORTEX-A32: .eabi_attribute 6, 14
1256+
; CORTEX-A32: .eabi_attribute 7, 65
1257+
; CORTEX-A32: .eabi_attribute 8, 1
1258+
; CORTEX-A32: .eabi_attribute 9, 2
1259+
; CORTEX-A32: .fpu crypto-neon-fp-armv8
1260+
; CORTEX-A32: .eabi_attribute 12, 3
1261+
; CORTEX-A32-NOT: .eabi_attribute 19
1262+
;; We default to IEEE 754 compliance
1263+
; CORTEX-A32: .eabi_attribute 20, 1
1264+
; CORTEX-A32: .eabi_attribute 21, 1
1265+
; CORTEX-A32-NOT: .eabi_attribute 22
1266+
; CORTEX-A32: .eabi_attribute 23, 3
1267+
; CORTEX-A32: .eabi_attribute 24, 1
1268+
; CORTEX-A32: .eabi_attribute 25, 1
1269+
; CORTEX-A32-NOT: .eabi_attribute 27
1270+
; CORTEX-A32-NOT: .eabi_attribute 28
1271+
; CORTEX-A32: .eabi_attribute 36, 1
1272+
; CORTEX-A32: .eabi_attribute 38, 1
1273+
; CORTEX-A32: .eabi_attribute 42, 1
1274+
; CORTEX-A32-NOT: .eabi_attribute 44
1275+
; CORTEX-A32: .eabi_attribute 68, 3
1276+
1277+
; CORTEX-A32-FAST-NOT: .eabi_attribute 19
1278+
;; The A32 has the ARMv8 FP unit, which always flushes preserving sign.
1279+
; CORTEX-A32-FAST: .eabi_attribute 20, 2
1280+
; CORTEX-A32-FAST-NOT: .eabi_attribute 21
1281+
; CORTEX-A32-FAST-NOT: .eabi_attribute 22
1282+
; CORTEX-A32-FAST: .eabi_attribute 23, 1
1283+
12491284
; CORTEX-A35: .cpu cortex-a35
12501285
; CORTEX-A35: .eabi_attribute 6, 14
12511286
; CORTEX-A35: .eabi_attribute 7, 65

0 commit comments

Comments
 (0)