You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
keystone/llvm/lib/Target/ARM/ARMGenSubtargetInfo.inc

464 lines
29 KiB

/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
|* *|
|* Subtarget Enumeration Source Fragment *|
|* *|
|* Automatically generated file, do not edit! *|
|* *|
\*===----------------------------------------------------------------------===*/
#ifdef GET_SUBTARGETINFO_ENUM
#undef GET_SUBTARGETINFO_ENUM
namespace llvm_ks {
namespace ARM {
enum : uint64_t {
ARMv2 = 0,
ARMv2a = 1,
ARMv3 = 2,
ARMv3m = 3,
ARMv4 = 4,
ARMv4t = 5,
ARMv5t = 6,
ARMv5te = 7,
ARMv5tej = 8,
ARMv6 = 9,
ARMv6j = 10,
ARMv6k = 11,
ARMv6kz = 12,
ARMv6m = 13,
ARMv6sm = 14,
ARMv6t2 = 15,
ARMv7a = 16,
ARMv7em = 17,
ARMv7k = 18,
ARMv7m = 19,
ARMv7r = 20,
ARMv7s = 21,
ARMv8a = 22,
ARMv8mBaseline = 23,
ARMv8mMainline = 24,
ARMv81a = 25,
ARMv82a = 26,
Feature8MSecExt = 27,
FeatureAClass = 28,
FeatureAcquireRelease = 29,
FeatureAvoidMOVsShOp = 30,
FeatureAvoidPartialCPSR = 31,
FeatureCRC = 32,
FeatureCrypto = 33,
FeatureD16 = 34,
FeatureDB = 35,
FeatureDSP = 36,
FeatureFP16 = 37,
FeatureFPARMv8 = 38,
FeatureFullFP16 = 39,
FeatureHWDiv = 40,
FeatureHWDivARM = 41,
FeatureHasRAS = 42,
FeatureHasSlowFPVMLx = 43,
FeatureLongCalls = 44,
FeatureMClass = 45,
FeatureMP = 46,
FeatureNEON = 47,
FeatureNEONForFP = 48,
FeatureNaClTrap = 49,
FeatureNoARM = 50,
FeatureNoMovt = 51,
FeaturePerfMon = 52,
FeaturePref32BitThumb = 53,
FeatureRClass = 54,
FeatureReserveR9 = 55,
FeatureSlowFPBrcc = 56,
FeatureStrictAlign = 57,
FeatureT2XtPk = 58,
FeatureThumb2 = 59,
FeatureTrustZone = 60,
FeatureV7Clrex = 61,
FeatureVFP2 = 62,
FeatureVFP3 = 63,
FeatureVFP4 = 64,
FeatureVFPOnlySP = 65,
FeatureVMLxForwarding = 66,
FeatureVirtualization = 67,
FeatureZCZeroing = 68,
HasV4TOps = 69,
HasV5TEOps = 70,
HasV5TOps = 71,
HasV6KOps = 72,
HasV6MOps = 73,
HasV6Ops = 74,
HasV6T2Ops = 75,
HasV7Ops = 76,
HasV8MBaselineOps = 77,
HasV8MMainlineOps = 78,
HasV8Ops = 79,
HasV8_1aOps = 80,
HasV8_2aOps = 81,
IWMMXT = 82,
IWMMXT2 = 83,
ModeSoftFloat = 84,
ModeThumb = 85,
ProcA5 = 86,
ProcA7 = 87,
ProcA8 = 88,
ProcA9 = 89,
ProcA12 = 90,
ProcA15 = 91,
ProcA17 = 92,
ProcA35 = 93,
ProcA53 = 94,
ProcA57 = 95,
ProcA72 = 96,
ProcExynosM1 = 97,
ProcKrait = 98,
ProcR4 = 99,
ProcR5 = 100,
ProcR7 = 101,
ProcSwift = 102,
XScale = 103
};
}
} // end llvm namespace
#endif // GET_SUBTARGETINFO_ENUM
#ifdef GET_SUBTARGETINFO_MC_DESC
#undef GET_SUBTARGETINFO_MC_DESC
namespace llvm_ks {
// Sorted (by key) array of values for CPU features.
extern const llvm_ks::SubtargetFeatureKV ARMFeatureKV[] = {
{ "32bit", "Prefer 32-bit Thumb instrs", { ARM::FeaturePref32BitThumb }, { } },
{ "8msecext", "Enable support for ARMv8-M Security Extensions", { ARM::Feature8MSecExt }, { } },
{ "a12", "Cortex-A12 ARM processors", { ARM::ProcA12 }, { } },
{ "a15", "Cortex-A15 ARM processors", { ARM::ProcA15 }, { } },
{ "a17", "Cortex-A17 ARM processors", { ARM::ProcA17 }, { } },
{ "a35", "Cortex-A35 ARM processors", { ARM::ProcA35 }, { } },
{ "a5", "Cortex-A5 ARM processors", { ARM::ProcA5 }, { } },
{ "a53", "Cortex-A53 ARM processors", { ARM::ProcA53 }, { } },
{ "a57", "Cortex-A57 ARM processors", { ARM::ProcA57 }, { } },
{ "a7", "Cortex-A7 ARM processors", { ARM::ProcA7 }, { } },
{ "a72", "Cortex-A72 ARM processors", { ARM::ProcA72 }, { } },
{ "a8", "Cortex-A8 ARM processors", { ARM::ProcA8 }, { } },
{ "a9", "Cortex-A9 ARM processors", { ARM::ProcA9 }, { } },
{ "aclass", "Is application profile ('A' series)", { ARM::FeatureAClass }, { } },
{ "acquire-release", "Has v8 acquire/release (lda/ldaex etc) instructions", { ARM::FeatureAcquireRelease }, { } },
{ "armv2", "ARMv2 architecture", { ARM::ARMv2 }, { } },
{ "armv2a", "ARMv2a architecture", { ARM::ARMv2a }, { } },
{ "armv3", "ARMv3 architecture", { ARM::ARMv3 }, { } },
{ "armv3m", "ARMv3m architecture", { ARM::ARMv3m }, { } },
{ "armv4", "ARMv4 architecture", { ARM::ARMv4 }, { } },
{ "armv4t", "ARMv4t architecture", { ARM::ARMv4t }, { ARM::HasV4TOps } },
{ "armv5t", "ARMv5t architecture", { ARM::ARMv5t }, { ARM::HasV5TOps } },
{ "armv5te", "ARMv5te architecture", { ARM::ARMv5te }, { ARM::HasV5TEOps } },
{ "armv5tej", "ARMv5tej architecture", { ARM::ARMv5tej }, { ARM::HasV5TEOps } },
{ "armv6", "ARMv6 architecture", { ARM::ARMv6 }, { ARM::HasV6Ops } },
{ "armv6-m", "ARMv6m architecture", { ARM::ARMv6m }, { ARM::HasV6MOps, ARM::FeatureNoARM, ARM::FeatureDB, ARM::FeatureMClass } },
{ "armv6j", "ARMv7a architecture", { ARM::ARMv6j }, { ARM::ARMv6 } },
{ "armv6k", "ARMv6k architecture", { ARM::ARMv6k }, { ARM::HasV6KOps } },
{ "armv6kz", "ARMv6kz architecture", { ARM::ARMv6kz }, { ARM::HasV6KOps, ARM::FeatureTrustZone } },
{ "armv6s-m", "ARMv6sm architecture", { ARM::ARMv6sm }, { ARM::HasV6MOps, ARM::FeatureNoARM, ARM::FeatureDB, ARM::FeatureMClass } },
{ "armv6t2", "ARMv6t2 architecture", { ARM::ARMv6t2 }, { ARM::HasV6T2Ops, ARM::FeatureDSP } },
{ "armv7-a", "ARMv7a architecture", { ARM::ARMv7a }, { ARM::HasV7Ops, ARM::FeatureNEON, ARM::FeatureDB, ARM::FeatureDSP, ARM::FeatureAClass } },
{ "armv7-m", "ARMv7m architecture", { ARM::ARMv7m }, { ARM::HasV7Ops, ARM::FeatureThumb2, ARM::FeatureNoARM, ARM::FeatureDB, ARM::FeatureHWDiv, ARM::FeatureMClass } },
{ "armv7-r", "ARMv7r architecture", { ARM::ARMv7r }, { ARM::HasV7Ops, ARM::FeatureDB, ARM::FeatureDSP, ARM::FeatureHWDiv, ARM::FeatureRClass } },
{ "armv7e-m", "ARMv7em architecture", { ARM::ARMv7em }, { ARM::HasV7Ops, ARM::FeatureThumb2, ARM::FeatureNoARM, ARM::FeatureDB, ARM::FeatureHWDiv, ARM::FeatureMClass, ARM::FeatureDSP, ARM::FeatureT2XtPk } },
{ "armv7k", "ARMv7a architecture", { ARM::ARMv7k }, { ARM::ARMv7a } },
{ "armv7s", "ARMv7a architecture", { ARM::ARMv7s }, { ARM::ARMv7a } },
{ "armv8-a", "ARMv8a architecture", { ARM::ARMv8a }, { ARM::HasV8Ops, ARM::FeatureAClass, ARM::FeatureDB, ARM::FeatureFPARMv8, ARM::FeatureNEON, ARM::FeatureDSP, ARM::FeatureTrustZone, ARM::FeatureMP, ARM::FeatureVirtualization, ARM::FeatureCrypto, ARM::FeatureCRC } },
{ "armv8-m.base", "ARMv8mBaseline architecture", { ARM::ARMv8mBaseline }, { ARM::HasV8MBaselineOps, ARM::FeatureNoARM, ARM::FeatureDB, ARM::FeatureHWDiv, ARM::FeatureV7Clrex, ARM::Feature8MSecExt, ARM::FeatureAcquireRelease, ARM::FeatureMClass } },
{ "armv8-m.main", "ARMv8mMainline architecture", { ARM::ARMv8mMainline }, { ARM::HasV8MMainlineOps, ARM::FeatureNoARM, ARM::FeatureDB, ARM::FeatureHWDiv, ARM::Feature8MSecExt, ARM::FeatureAcquireRelease, ARM::FeatureMClass } },
{ "armv8.1-a", "ARMv81a architecture", { ARM::ARMv81a }, { ARM::HasV8_1aOps, ARM::FeatureAClass, ARM::FeatureDB, ARM::FeatureFPARMv8, ARM::FeatureNEON, ARM::FeatureDSP, ARM::FeatureTrustZone, ARM::FeatureMP, ARM::FeatureVirtualization, ARM::FeatureCrypto, ARM::FeatureCRC } },
{ "armv8.2-a", "ARMv82a architecture", { ARM::ARMv82a }, { ARM::HasV8_2aOps, ARM::FeatureAClass, ARM::FeatureDB, ARM::FeatureFPARMv8, ARM::FeatureNEON, ARM::FeatureDSP, ARM::FeatureTrustZone, ARM::FeatureMP, ARM::FeatureVirtualization, ARM::FeatureCrypto, ARM::FeatureCRC } },
{ "avoid-movs-shop", "Avoid movs instructions with shifter operand", { ARM::FeatureAvoidMOVsShOp }, { } },
{ "avoid-partial-cpsr", "Avoid CPSR partial update for OOO execution", { ARM::FeatureAvoidPartialCPSR }, { } },
{ "crc", "Enable support for CRC instructions", { ARM::FeatureCRC }, { } },
{ "crypto", "Enable support for Cryptography extensions", { ARM::FeatureCrypto }, { ARM::FeatureNEON } },
{ "d16", "Restrict FP to 16 double registers", { ARM::FeatureD16 }, { } },
{ "db", "Has data barrier (dmb / dsb) instructions", { ARM::FeatureDB }, { } },
{ "dsp", "Supports DSP instructions in ARM and/or Thumb2", { ARM::FeatureDSP }, { } },
{ "exynosm1", "Samsung Exynos-M1 processors", { ARM::ProcExynosM1 }, { } },
{ "fp-armv8", "Enable ARMv8 FP", { ARM::FeatureFPARMv8 }, { ARM::FeatureVFP4 } },
{ "fp-only-sp", "Floating point unit supports single precision only", { ARM::FeatureVFPOnlySP }, { } },
{ "fp16", "Enable half-precision floating point", { ARM::FeatureFP16 }, { } },
{ "fullfp16", "Enable full half-precision floating point", { ARM::FeatureFullFP16 }, { ARM::FeatureFPARMv8 } },
{ "hwdiv", "Enable divide instructions", { ARM::FeatureHWDiv }, { } },
{ "hwdiv-arm", "Enable divide instructions in ARM mode", { ARM::FeatureHWDivARM }, { } },
{ "iwmmxt", "ARMv5te architecture", { ARM::IWMMXT }, { ARM::ARMv5te } },
{ "iwmmxt2", "ARMv5te architecture", { ARM::IWMMXT2 }, { ARM::ARMv5te } },
{ "krait", "Qualcomm ARM processors", { ARM::ProcKrait }, { } },
{ "long-calls", "Generate calls via indirect call instructions", { ARM::FeatureLongCalls }, { } },
{ "mclass", "Is microcontroller profile ('M' series)", { ARM::FeatureMClass }, { } },
{ "mp", "Supports Multiprocessing extension", { ARM::FeatureMP }, { } },
{ "nacl-trap", "NaCl trap", { ARM::FeatureNaClTrap }, { } },
{ "neon", "Enable NEON instructions", { ARM::FeatureNEON }, { ARM::FeatureVFP3 } },
{ "neonfp", "Use NEON for single precision FP", { ARM::FeatureNEONForFP }, { } },
{ "no-movt", "Don't use movt/movw pairs for 32-bit imms", { ARM::FeatureNoMovt }, { } },
{ "noarm", "Does not support ARM mode execution", { ARM::FeatureNoARM }, { ARM::ModeThumb } },
{ "perfmon", "Enable support for Performance Monitor extensions", { ARM::FeaturePerfMon }, { } },
{ "r4", "Cortex-R4 ARM processors", { ARM::ProcR4 }, { } },
{ "r5", "Cortex-R5 ARM processors", { ARM::ProcR5 }, { } },
{ "r7", "Cortex-R7 ARM processors", { ARM::ProcR7 }, { } },
{ "ras", "Has return address stack", { ARM::FeatureHasRAS }, { } },
{ "rclass", "Is realtime profile ('R' series)", { ARM::FeatureRClass }, { } },
{ "reserve-r9", "Reserve R9, making it unavailable as GPR", { ARM::FeatureReserveR9 }, { } },
{ "slow-fp-brcc", "FP compare + branch is slow", { ARM::FeatureSlowFPBrcc }, { } },
{ "slowfpvmlx", "Disable VFP / NEON MAC instructions", { ARM::FeatureHasSlowFPVMLx }, { } },
{ "soft-float", "Use software floating point features.", { ARM::ModeSoftFloat }, { } },
{ "strict-align", "Disallow all unaligned memory access", { ARM::FeatureStrictAlign }, { } },
{ "swift", "Swift ARM processors", { ARM::ProcSwift }, { } },
{ "t2xtpk", "Enable Thumb2 extract and pack instructions", { ARM::FeatureT2XtPk }, { } },
{ "thumb-mode", "Thumb mode", { ARM::ModeThumb }, { } },
{ "thumb2", "Enable Thumb2 instructions", { ARM::FeatureThumb2 }, { } },
{ "trustzone", "Enable support for TrustZone security extensions", { ARM::FeatureTrustZone }, { } },
{ "v4t", "Support ARM v4T instructions", { ARM::HasV4TOps }, { } },
{ "v5t", "Support ARM v5T instructions", { ARM::HasV5TOps }, { ARM::HasV4TOps } },
{ "v5te", "Support ARM v5TE, v5TEj, and v5TExp instructions", { ARM::HasV5TEOps }, { ARM::HasV5TOps } },
{ "v6", "Support ARM v6 instructions", { ARM::HasV6Ops }, { ARM::HasV5TEOps } },
{ "v6k", "Support ARM v6k instructions", { ARM::HasV6KOps }, { ARM::HasV6Ops } },
{ "v6m", "Support ARM v6M instructions", { ARM::HasV6MOps }, { ARM::HasV6Ops } },
{ "v6t2", "Support ARM v6t2 instructions", { ARM::HasV6T2Ops }, { ARM::HasV8MBaselineOps, ARM::HasV6KOps, ARM::FeatureThumb2 } },
{ "v7", "Support ARM v7 instructions", { ARM::HasV7Ops }, { ARM::HasV6T2Ops, ARM::FeaturePerfMon, ARM::FeatureV7Clrex } },
{ "v7clrex", "Has v7 clrex instruction", { ARM::FeatureV7Clrex }, { } },
{ "v8", "Support ARM v8 instructions", { ARM::HasV8Ops }, { ARM::HasV7Ops, ARM::FeatureAcquireRelease } },
{ "v8.1a", "Support ARM v8.1a instructions", { ARM::HasV8_1aOps }, { ARM::HasV8Ops } },
{ "v8.2a", "Support ARM v8.2a instructions", { ARM::HasV8_2aOps }, { ARM::HasV8_1aOps } },
{ "v8m", "Support ARM v8M Baseline instructions", { ARM::HasV8MBaselineOps }, { ARM::HasV6MOps } },
{ "v8m.main", "Support ARM v8M Mainline instructions", { ARM::HasV8MMainlineOps }, { ARM::HasV7Ops } },
{ "vfp2", "Enable VFP2 instructions", { ARM::FeatureVFP2 }, { } },
{ "vfp3", "Enable VFP3 instructions", { ARM::FeatureVFP3 }, { ARM::FeatureVFP2 } },
{ "vfp4", "Enable VFP4 instructions", { ARM::FeatureVFP4 }, { ARM::FeatureVFP3, ARM::FeatureFP16 } },
{ "virtualization", "Supports Virtualization extension", { ARM::FeatureVirtualization }, { ARM::FeatureHWDiv, ARM::FeatureHWDivARM } },
{ "vmlx-forwarding", "Has multiplier accumulator forwarding", { ARM::FeatureVMLxForwarding }, { } },
{ "xscale", "ARMv5te architecture", { ARM::XScale }, { ARM::ARMv5te } },
{ "zcz", "Has zero-cycle zeroing instructions", { ARM::FeatureZCZeroing }, { } }
};
// Sorted (by key) array of values for CPU subtype.
extern const llvm_ks::SubtargetFeatureKV ARMSubTypeKV[] = {
{ "arm1020e", "Select the arm1020e processor", { ARM::ARMv5te }, { } },
{ "arm1020t", "Select the arm1020t processor", { ARM::ARMv5t }, { } },
{ "arm1022e", "Select the arm1022e processor", { ARM::ARMv5te }, { } },
{ "arm10e", "Select the arm10e processor", { ARM::ARMv5te }, { } },
{ "arm10tdmi", "Select the arm10tdmi processor", { ARM::ARMv5t }, { } },
{ "arm1136j-s", "Select the arm1136j-s processor", { ARM::ARMv6 }, { } },
{ "arm1136jf-s", "Select the arm1136jf-s processor", { ARM::ARMv6, ARM::FeatureVFP2, ARM::FeatureHasSlowFPVMLx }, { } },
{ "arm1156t2-s", "Select the arm1156t2-s processor", { ARM::ARMv6t2 }, { } },
{ "arm1156t2f-s", "Select the arm1156t2f-s processor", { ARM::ARMv6t2, ARM::FeatureVFP2, ARM::FeatureHasSlowFPVMLx }, { } },
{ "arm1176jz-s", "Select the arm1176jz-s processor", { ARM::ARMv6kz }, { } },
{ "arm1176jzf-s", "Select the arm1176jzf-s processor", { ARM::ARMv6kz, ARM::FeatureVFP2, ARM::FeatureHasSlowFPVMLx }, { } },
{ "arm710t", "Select the arm710t processor", { ARM::ARMv4t }, { } },
{ "arm720t", "Select the arm720t processor", { ARM::ARMv4t }, { } },
{ "arm7tdmi", "Select the arm7tdmi processor", { ARM::ARMv4t }, { } },
{ "arm7tdmi-s", "Select the arm7tdmi-s processor", { ARM::ARMv4t }, { } },
{ "arm8", "Select the arm8 processor", { ARM::ARMv4 }, { } },
{ "arm810", "Select the arm810 processor", { ARM::ARMv4 }, { } },
{ "arm9", "Select the arm9 processor", { ARM::ARMv4t }, { } },
{ "arm920", "Select the arm920 processor", { ARM::ARMv4t }, { } },
{ "arm920t", "Select the arm920t processor", { ARM::ARMv4t }, { } },
{ "arm922t", "Select the arm922t processor", { ARM::ARMv4t }, { } },
{ "arm926ej-s", "Select the arm926ej-s processor", { ARM::ARMv5te }, { } },
{ "arm940t", "Select the arm940t processor", { ARM::ARMv4t }, { } },
{ "arm946e-s", "Select the arm946e-s processor", { ARM::ARMv5te }, { } },
{ "arm966e-s", "Select the arm966e-s processor", { ARM::ARMv5te }, { } },
{ "arm968e-s", "Select the arm968e-s processor", { ARM::ARMv5te }, { } },
{ "arm9e", "Select the arm9e processor", { ARM::ARMv5te }, { } },
{ "arm9tdmi", "Select the arm9tdmi processor", { ARM::ARMv4t }, { } },
{ "cortex-a12", "Select the cortex-a12 processor", { ARM::ARMv7a, ARM::ProcA12, ARM::FeatureHasRAS, ARM::FeatureTrustZone, ARM::FeatureVMLxForwarding, ARM::FeatureT2XtPk, ARM::FeatureVFP4, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureAvoidPartialCPSR, ARM::FeatureVirtualization, ARM::FeatureMP }, { } },
{ "cortex-a15", "Select the cortex-a15 processor", { ARM::ARMv7a, ARM::ProcA15, ARM::FeatureHasRAS, ARM::FeatureTrustZone, ARM::FeatureT2XtPk, ARM::FeatureVFP4, ARM::FeatureMP, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureAvoidPartialCPSR, ARM::FeatureVirtualization }, { } },
{ "cortex-a17", "Select the cortex-a17 processor", { ARM::ARMv7a, ARM::ProcA17, ARM::FeatureHasRAS, ARM::FeatureTrustZone, ARM::FeatureMP, ARM::FeatureVMLxForwarding, ARM::FeatureT2XtPk, ARM::FeatureVFP4, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureAvoidPartialCPSR, ARM::FeatureVirtualization }, { } },
{ "cortex-a35", "Select the cortex-a35 processor", { ARM::ARMv8a, ARM::ProcA35, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureT2XtPk, ARM::FeatureCrypto, ARM::FeatureCRC }, { } },
{ "cortex-a5", "Select the cortex-a5 processor", { ARM::ARMv7a, ARM::ProcA5, ARM::FeatureHasRAS, ARM::FeatureTrustZone, ARM::FeatureSlowFPBrcc, ARM::FeatureHasSlowFPVMLx, ARM::FeatureVMLxForwarding, ARM::FeatureT2XtPk, ARM::FeatureMP, ARM::FeatureVFP4 }, { } },
{ "cortex-a53", "Select the cortex-a53 processor", { ARM::ARMv8a, ARM::ProcA53, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureT2XtPk, ARM::FeatureCrypto, ARM::FeatureCRC }, { } },
{ "cortex-a57", "Select the cortex-a57 processor", { ARM::ARMv8a, ARM::ProcA57, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureT2XtPk, ARM::FeatureCrypto, ARM::FeatureCRC }, { } },
{ "cortex-a7", "Select the cortex-a7 processor", { ARM::ARMv7a, ARM::ProcA7, ARM::FeatureHasRAS, ARM::FeatureTrustZone, ARM::FeatureSlowFPBrcc, ARM::FeatureHasSlowFPVMLx, ARM::FeatureVMLxForwarding, ARM::FeatureT2XtPk, ARM::FeatureMP, ARM::FeatureVFP4, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureVirtualization }, { } },
{ "cortex-a72", "Select the cortex-a72 processor", { ARM::ARMv8a, ARM::ProcA72, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureT2XtPk, ARM::FeatureCrypto, ARM::FeatureCRC }, { } },
{ "cortex-a8", "Select the cortex-a8 processor", { ARM::ARMv7a, ARM::ProcA8, ARM::FeatureHasRAS, ARM::FeatureTrustZone, ARM::FeatureSlowFPBrcc, ARM::FeatureHasSlowFPVMLx, ARM::FeatureVMLxForwarding, ARM::FeatureT2XtPk }, { } },
{ "cortex-a9", "Select the cortex-a9 processor", { ARM::ARMv7a, ARM::ProcA9, ARM::FeatureHasRAS, ARM::FeatureTrustZone, ARM::FeatureVMLxForwarding, ARM::FeatureT2XtPk, ARM::FeatureFP16, ARM::FeatureAvoidPartialCPSR, ARM::FeatureMP }, { } },
{ "cortex-m0", "Select the cortex-m0 processor", { ARM::ARMv6m }, { } },
{ "cortex-m0plus", "Select the cortex-m0plus processor", { ARM::ARMv6m }, { } },
{ "cortex-m1", "Select the cortex-m1 processor", { ARM::ARMv6m }, { } },
{ "cortex-m3", "Select the cortex-m3 processor", { ARM::ARMv7m }, { } },
{ "cortex-m4", "Select the cortex-m4 processor", { ARM::ARMv7em, ARM::FeatureVFP4, ARM::FeatureVFPOnlySP, ARM::FeatureD16 }, { } },
{ "cortex-m7", "Select the cortex-m7 processor", { ARM::ARMv7em, ARM::FeatureFPARMv8, ARM::FeatureD16 }, { } },
{ "cortex-r4", "Select the cortex-r4 processor", { ARM::ARMv7r, ARM::ProcR4, ARM::FeatureHasRAS, ARM::FeatureAvoidPartialCPSR, ARM::FeatureT2XtPk }, { } },
{ "cortex-r4f", "Select the cortex-r4f processor", { ARM::ARMv7r, ARM::ProcR4, ARM::FeatureHasRAS, ARM::FeatureSlowFPBrcc, ARM::FeatureHasSlowFPVMLx, ARM::FeatureVFP3, ARM::FeatureD16, ARM::FeatureAvoidPartialCPSR, ARM::FeatureT2XtPk }, { } },
{ "cortex-r5", "Select the cortex-r5 processor", { ARM::ARMv7r, ARM::ProcR5, ARM::FeatureHasRAS, ARM::FeatureVFP3, ARM::FeatureD16, ARM::FeatureSlowFPBrcc, ARM::FeatureHWDivARM, ARM::FeatureHasSlowFPVMLx, ARM::FeatureAvoidPartialCPSR, ARM::FeatureT2XtPk }, { } },
{ "cortex-r7", "Select the cortex-r7 processor", { ARM::ARMv7r, ARM::ProcR7, ARM::FeatureHasRAS, ARM::FeatureVFP3, ARM::FeatureD16, ARM::FeatureFP16, ARM::FeatureMP, ARM::FeatureSlowFPBrcc, ARM::FeatureHWDivARM, ARM::FeatureHasSlowFPVMLx, ARM::FeatureAvoidPartialCPSR, ARM::FeatureT2XtPk }, { } },
{ "cyclone", "Select the cyclone processor", { ARM::ARMv8a, ARM::ProcSwift, ARM::FeatureHasRAS, ARM::FeatureNEONForFP, ARM::FeatureT2XtPk, ARM::FeatureVFP4, ARM::FeatureMP, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureAvoidPartialCPSR, ARM::FeatureAvoidMOVsShOp, ARM::FeatureHasSlowFPVMLx, ARM::FeatureCrypto, ARM::FeatureZCZeroing }, { } },
{ "ep9312", "Select the ep9312 processor", { ARM::ARMv4t }, { } },
{ "exynos-m1", "Select the exynos-m1 processor", { ARM::ARMv8a, ARM::ProcExynosM1, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureT2XtPk, ARM::FeatureCrypto, ARM::FeatureCRC }, { } },
{ "generic", "Select the generic processor", { }, { } },
{ "iwmmxt", "Select the iwmmxt processor", { ARM::ARMv5te }, { } },
{ "krait", "Select the krait processor", { ARM::ARMv7a, ARM::ProcKrait, ARM::FeatureHasRAS, ARM::FeatureVMLxForwarding, ARM::FeatureT2XtPk, ARM::FeatureFP16, ARM::FeatureAvoidPartialCPSR, ARM::FeatureVFP4, ARM::FeatureHWDiv, ARM::FeatureHWDivARM }, { } },
{ "mpcore", "Select the mpcore processor", { ARM::ARMv6k, ARM::FeatureVFP2, ARM::FeatureHasSlowFPVMLx }, { } },
{ "mpcorenovfp", "Select the mpcorenovfp processor", { ARM::ARMv6k }, { } },
{ "sc000", "Select the sc000 processor", { ARM::ARMv6m }, { } },
{ "sc300", "Select the sc300 processor", { ARM::ARMv7m }, { } },
{ "strongarm", "Select the strongarm processor", { ARM::ARMv4 }, { } },
{ "strongarm110", "Select the strongarm110 processor", { ARM::ARMv4 }, { } },
{ "strongarm1100", "Select the strongarm1100 processor", { ARM::ARMv4 }, { } },
{ "strongarm1110", "Select the strongarm1110 processor", { ARM::ARMv4 }, { } },
{ "swift", "Select the swift processor", { ARM::ARMv7a, ARM::ProcSwift, ARM::FeatureHasRAS, ARM::FeatureNEONForFP, ARM::FeatureT2XtPk, ARM::FeatureVFP4, ARM::FeatureMP, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureAvoidPartialCPSR, ARM::FeatureAvoidMOVsShOp, ARM::FeatureHasSlowFPVMLx }, { } },
{ "xscale", "Select the xscale processor", { ARM::ARMv5te }, { } }
};
#ifdef DBGFIELD
#error "<target>GenSubtargetInfo.inc requires a DBGFIELD macro"
#endif
#ifndef NDEBUG
#define DBGFIELD(x) x,
#else
#define DBGFIELD(x)
#endif
// Functional units for "ARMV6Itineraries"
namespace ARMV6ItinerariesFU {
const unsigned V6_Pipe = 1 << 0;
}
// Functional units for "CortexA9Itineraries"
namespace CortexA9ItinerariesFU {
const unsigned A9_Issue0 = 1 << 0;
const unsigned A9_Issue1 = 1 << 1;
const unsigned A9_Branch = 1 << 2;
const unsigned A9_ALU0 = 1 << 3;
const unsigned A9_ALU1 = 1 << 4;
const unsigned A9_AGU = 1 << 5;
const unsigned A9_NPipe = 1 << 6;
const unsigned A9_MUX0 = 1 << 7;
const unsigned A9_LSUnit = 1 << 8;
const unsigned A9_DRegsVFP = 1 << 9;
const unsigned A9_DRegsN = 1 << 10;
}
// ===============================================================
// Data tables for the new per-operand machine model.
#undef DBGFIELD
static inline MCSubtargetInfo *createARMMCSubtargetInfoImpl(const Triple &TT, StringRef CPU, StringRef FS) {
return new MCSubtargetInfo(TT, CPU, FS, ARMFeatureKV, ARMSubTypeKV, NULL);
}
} // end llvm namespace
#endif // GET_SUBTARGETINFO_MC_DESC
#ifdef GET_SUBTARGETINFO_TARGET_DESC
#undef GET_SUBTARGETINFO_TARGET_DESC
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
// ParseSubtargetFeatures - Parses features string setting specified
// subtarget options.
void llvm_ks::ARMSubtarget::ParseSubtargetFeatures(StringRef CPU, StringRef FS) {
DEBUG(dbgs() << "\nFeatures:" << FS);
DEBUG(dbgs() << "\nCPU:" << CPU << "\n\n");
InitMCProcessorInfo(CPU, FS);
const FeatureBitset& Bits = getFeatureBits();
if (Bits[ARM::ARMv2] && ARMArch < ARMv2) ARMArch = ARMv2;
if (Bits[ARM::ARMv2a] && ARMArch < ARMv2a) ARMArch = ARMv2a;
if (Bits[ARM::ARMv3] && ARMArch < ARMv3) ARMArch = ARMv3;
if (Bits[ARM::ARMv3m] && ARMArch < ARMv3m) ARMArch = ARMv3m;
if (Bits[ARM::ARMv4] && ARMArch < ARMv4) ARMArch = ARMv4;
if (Bits[ARM::ARMv4t] && ARMArch < ARMv4t) ARMArch = ARMv4t;
if (Bits[ARM::ARMv5t] && ARMArch < ARMv5t) ARMArch = ARMv5t;
if (Bits[ARM::ARMv5te] && ARMArch < ARMv5te) ARMArch = ARMv5te;
if (Bits[ARM::ARMv5tej] && ARMArch < ARMv5tej) ARMArch = ARMv5tej;
if (Bits[ARM::ARMv6] && ARMArch < ARMv6) ARMArch = ARMv6;
if (Bits[ARM::ARMv6j] && ARMArch < ARMv7a) ARMArch = ARMv7a;
if (Bits[ARM::ARMv6k] && ARMArch < ARMv6k) ARMArch = ARMv6k;
if (Bits[ARM::ARMv6kz] && ARMArch < ARMv6kz) ARMArch = ARMv6kz;
if (Bits[ARM::ARMv6m] && ARMArch < ARMv6m) ARMArch = ARMv6m;
if (Bits[ARM::ARMv6sm] && ARMArch < ARMv6sm) ARMArch = ARMv6sm;
if (Bits[ARM::ARMv6t2] && ARMArch < ARMv6t2) ARMArch = ARMv6t2;
if (Bits[ARM::ARMv7a] && ARMArch < ARMv7a) ARMArch = ARMv7a;
if (Bits[ARM::ARMv7em] && ARMArch < ARMv7em) ARMArch = ARMv7em;
if (Bits[ARM::ARMv7k] && ARMArch < ARMv7a) ARMArch = ARMv7a;
if (Bits[ARM::ARMv7m] && ARMArch < ARMv7m) ARMArch = ARMv7m;
if (Bits[ARM::ARMv7r] && ARMArch < ARMv7r) ARMArch = ARMv7r;
if (Bits[ARM::ARMv7s] && ARMArch < ARMv7a) ARMArch = ARMv7a;
if (Bits[ARM::ARMv8a] && ARMArch < ARMv8a) ARMArch = ARMv8a;
if (Bits[ARM::ARMv8mBaseline] && ARMArch < ARMv8mBaseline) ARMArch = ARMv8mBaseline;
if (Bits[ARM::ARMv8mMainline] && ARMArch < ARMv8mMainline) ARMArch = ARMv8mMainline;
if (Bits[ARM::ARMv81a] && ARMArch < ARMv81a) ARMArch = ARMv81a;
if (Bits[ARM::ARMv82a] && ARMArch < ARMv82a) ARMArch = ARMv82a;
if (Bits[ARM::Feature8MSecExt]) Has8MSecExt = true;
if (Bits[ARM::FeatureAClass] && ARMProcClass < AClass) ARMProcClass = AClass;
if (Bits[ARM::FeatureAcquireRelease]) HasAcquireRelease = true;
if (Bits[ARM::FeatureAvoidMOVsShOp]) AvoidMOVsShifterOperand = true;
if (Bits[ARM::FeatureAvoidPartialCPSR]) AvoidCPSRPartialUpdate = true;
if (Bits[ARM::FeatureCRC]) HasCRC = true;
if (Bits[ARM::FeatureCrypto]) HasCrypto = true;
if (Bits[ARM::FeatureD16]) HasD16 = true;
if (Bits[ARM::FeatureDB]) HasDataBarrier = true;
if (Bits[ARM::FeatureDSP]) HasDSP = true;
if (Bits[ARM::FeatureFP16]) HasFP16 = true;
if (Bits[ARM::FeatureFPARMv8]) HasFPARMv8 = true;
if (Bits[ARM::FeatureFullFP16]) HasFullFP16 = true;
if (Bits[ARM::FeatureHWDiv]) HasHardwareDivide = true;
if (Bits[ARM::FeatureHWDivARM]) HasHardwareDivideInARM = true;
if (Bits[ARM::FeatureHasRAS]) HasRAS = true;
if (Bits[ARM::FeatureHasSlowFPVMLx]) SlowFPVMLx = true;
if (Bits[ARM::FeatureLongCalls]) GenLongCalls = true;
if (Bits[ARM::FeatureMClass] && ARMProcClass < MClass) ARMProcClass = MClass;
if (Bits[ARM::FeatureMP]) HasMPExtension = true;
if (Bits[ARM::FeatureNEON]) HasNEON = true;
if (Bits[ARM::FeatureNEONForFP]) UseNEONForSinglePrecisionFP = true;
if (Bits[ARM::FeatureNaClTrap]) UseNaClTrap = true;
if (Bits[ARM::FeatureNoARM]) NoARM = true;
if (Bits[ARM::FeatureNoMovt]) NoMovt = true;
if (Bits[ARM::FeaturePerfMon]) HasPerfMon = true;
if (Bits[ARM::FeaturePref32BitThumb]) Pref32BitThumb = true;
if (Bits[ARM::FeatureRClass] && ARMProcClass < RClass) ARMProcClass = RClass;
if (Bits[ARM::FeatureReserveR9]) ReserveR9 = true;
if (Bits[ARM::FeatureSlowFPBrcc]) SlowFPBrcc = true;
if (Bits[ARM::FeatureStrictAlign]) StrictAlign = true;
if (Bits[ARM::FeatureT2XtPk]) HasT2ExtractPack = true;
if (Bits[ARM::FeatureThumb2]) HasThumb2 = true;
if (Bits[ARM::FeatureTrustZone]) HasTrustZone = true;
if (Bits[ARM::FeatureV7Clrex]) HasV7Clrex = true;
if (Bits[ARM::FeatureVFP2]) HasVFPv2 = true;
if (Bits[ARM::FeatureVFP3]) HasVFPv3 = true;
if (Bits[ARM::FeatureVFP4]) HasVFPv4 = true;
if (Bits[ARM::FeatureVFPOnlySP]) FPOnlySP = true;
if (Bits[ARM::FeatureVMLxForwarding]) HasVMLxForwarding = true;
if (Bits[ARM::FeatureVirtualization]) HasVirtualization = true;
if (Bits[ARM::FeatureZCZeroing]) HasZeroCycleZeroing = true;
if (Bits[ARM::HasV4TOps]) HasV4TOps = true;
if (Bits[ARM::HasV5TEOps]) HasV5TEOps = true;
if (Bits[ARM::HasV5TOps]) HasV5TOps = true;
if (Bits[ARM::HasV6KOps]) HasV6KOps = true;
if (Bits[ARM::HasV6MOps]) HasV6MOps = true;
if (Bits[ARM::HasV6Ops]) HasV6Ops = true;
if (Bits[ARM::HasV6T2Ops]) HasV6T2Ops = true;
if (Bits[ARM::HasV7Ops]) HasV7Ops = true;
if (Bits[ARM::HasV8MBaselineOps]) HasV8MBaselineOps = true;
if (Bits[ARM::HasV8MMainlineOps]) HasV8MMainlineOps = true;
if (Bits[ARM::HasV8Ops]) HasV8Ops = true;
if (Bits[ARM::HasV8_1aOps]) HasV8_1aOps = true;
if (Bits[ARM::HasV8_2aOps]) HasV8_2aOps = true;
if (Bits[ARM::IWMMXT] && ARMArch < ARMv5te) ARMArch = ARMv5te;
if (Bits[ARM::IWMMXT2] && ARMArch < ARMv5te) ARMArch = ARMv5te;
if (Bits[ARM::ModeSoftFloat]) UseSoftFloat = true;
if (Bits[ARM::ModeThumb]) InThumbMode = true;
if (Bits[ARM::ProcA5] && ARMProcFamily < CortexA5) ARMProcFamily = CortexA5;
if (Bits[ARM::ProcA7] && ARMProcFamily < CortexA7) ARMProcFamily = CortexA7;
if (Bits[ARM::ProcA8] && ARMProcFamily < CortexA8) ARMProcFamily = CortexA8;
if (Bits[ARM::ProcA9] && ARMProcFamily < CortexA9) ARMProcFamily = CortexA9;
if (Bits[ARM::ProcA12] && ARMProcFamily < CortexA12) ARMProcFamily = CortexA12;
if (Bits[ARM::ProcA15] && ARMProcFamily < CortexA15) ARMProcFamily = CortexA15;
if (Bits[ARM::ProcA17] && ARMProcFamily < CortexA17) ARMProcFamily = CortexA17;
if (Bits[ARM::ProcA35] && ARMProcFamily < CortexA35) ARMProcFamily = CortexA35;
if (Bits[ARM::ProcA53] && ARMProcFamily < CortexA53) ARMProcFamily = CortexA53;
if (Bits[ARM::ProcA57] && ARMProcFamily < CortexA57) ARMProcFamily = CortexA57;
if (Bits[ARM::ProcA72] && ARMProcFamily < CortexA72) ARMProcFamily = CortexA72;
if (Bits[ARM::ProcExynosM1] && ARMProcFamily < ExynosM1) ARMProcFamily = ExynosM1;
if (Bits[ARM::ProcKrait] && ARMProcFamily < Krait) ARMProcFamily = Krait;
if (Bits[ARM::ProcR4] && ARMProcFamily < CortexR4) ARMProcFamily = CortexR4;
if (Bits[ARM::ProcR5] && ARMProcFamily < CortexR5) ARMProcFamily = CortexR5;
if (Bits[ARM::ProcR7] && ARMProcFamily < CortexR7) ARMProcFamily = CortexR7;
if (Bits[ARM::ProcSwift] && ARMProcFamily < Swift) ARMProcFamily = Swift;
if (Bits[ARM::XScale] && ARMArch < ARMv5te) ARMArch = ARMv5te;
}
#endif // GET_SUBTARGETINFO_TARGET_DESC