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.
127 lines
6.4 KiB
127 lines
6.4 KiB
3 years ago
|
/*===- 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 AArch64 {
|
||
|
enum : uint64_t {
|
||
|
FeatureCRC = 0,
|
||
|
FeatureCrypto = 1,
|
||
|
FeatureFPARMv8 = 2,
|
||
|
FeatureFullFP16 = 3,
|
||
|
FeatureNEON = 4,
|
||
|
FeaturePerfMon = 5,
|
||
|
FeatureReserveX18 = 6,
|
||
|
FeatureSPE = 7,
|
||
|
FeatureStrictAlign = 8,
|
||
|
FeatureZCRegMove = 9,
|
||
|
FeatureZCZeroing = 10,
|
||
|
HasV8_1aOps = 11,
|
||
|
HasV8_2aOps = 12,
|
||
|
ProcA35 = 13,
|
||
|
ProcA53 = 14,
|
||
|
ProcA57 = 15,
|
||
|
ProcCyclone = 16,
|
||
|
ProcExynosM1 = 17
|
||
|
};
|
||
|
}
|
||
|
} // 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 AArch64FeatureKV[] = {
|
||
|
{ "a35", "Cortex-A35 ARM processors", { AArch64::ProcA35 }, { AArch64::FeatureFPARMv8, AArch64::FeatureNEON, AArch64::FeatureCrypto, AArch64::FeatureCRC, AArch64::FeaturePerfMon } },
|
||
|
{ "a53", "Cortex-A53 ARM processors", { AArch64::ProcA53 }, { AArch64::FeatureFPARMv8, AArch64::FeatureNEON, AArch64::FeatureCrypto, AArch64::FeatureCRC, AArch64::FeaturePerfMon } },
|
||
|
{ "a57", "Cortex-A57 ARM processors", { AArch64::ProcA57 }, { AArch64::FeatureFPARMv8, AArch64::FeatureNEON, AArch64::FeatureCrypto, AArch64::FeatureCRC, AArch64::FeaturePerfMon } },
|
||
|
{ "crc", "Enable ARMv8 CRC-32 checksum instructions", { AArch64::FeatureCRC }, { } },
|
||
|
{ "crypto", "Enable cryptographic instructions", { AArch64::FeatureCrypto }, { } },
|
||
|
{ "cyclone", "Cyclone", { AArch64::ProcCyclone }, { AArch64::FeatureFPARMv8, AArch64::FeatureNEON, AArch64::FeatureCrypto, AArch64::FeatureCRC, AArch64::FeaturePerfMon, AArch64::FeatureZCRegMove, AArch64::FeatureZCZeroing } },
|
||
|
{ "exynosm1", "Samsung Exynos-M1 processors", { AArch64::ProcExynosM1 }, { AArch64::FeatureFPARMv8, AArch64::FeatureNEON, AArch64::FeatureCrypto, AArch64::FeatureCRC, AArch64::FeaturePerfMon } },
|
||
|
{ "fp-armv8", "Enable ARMv8 FP", { AArch64::FeatureFPARMv8 }, { } },
|
||
|
{ "fullfp16", "Full FP16", { AArch64::FeatureFullFP16 }, { AArch64::FeatureFPARMv8 } },
|
||
|
{ "neon", "Enable Advanced SIMD instructions", { AArch64::FeatureNEON }, { AArch64::FeatureFPARMv8 } },
|
||
|
{ "perfmon", "Enable ARMv8 PMUv3 Performance Monitors extension", { AArch64::FeaturePerfMon }, { } },
|
||
|
{ "reserve-x18", "Reserve X18, making it unavailable as a GPR", { AArch64::FeatureReserveX18 }, { } },
|
||
|
{ "spe", "Enable Statistical Profiling extension", { AArch64::FeatureSPE }, { } },
|
||
|
{ "strict-align", "Disallow all unaligned memory access", { AArch64::FeatureStrictAlign }, { } },
|
||
|
{ "v8.1a", "Support ARM v8.1a instructions", { AArch64::HasV8_1aOps }, { AArch64::FeatureCRC } },
|
||
|
{ "v8.2a", "Support ARM v8.2a instructions", { AArch64::HasV8_2aOps }, { AArch64::HasV8_1aOps } },
|
||
|
{ "zcm", "Has zero-cycle register moves", { AArch64::FeatureZCRegMove }, { } },
|
||
|
{ "zcz", "Has zero-cycle zeroing instructions", { AArch64::FeatureZCZeroing }, { } }
|
||
|
};
|
||
|
|
||
|
// Sorted (by key) array of values for CPU subtype.
|
||
|
extern const llvm_ks::SubtargetFeatureKV AArch64SubTypeKV[] = {
|
||
|
{ "cortex-a35", "Select the cortex-a35 processor", { AArch64::ProcA35 }, { } },
|
||
|
{ "cortex-a53", "Select the cortex-a53 processor", { AArch64::ProcA53 }, { } },
|
||
|
{ "cortex-a57", "Select the cortex-a57 processor", { AArch64::ProcA57 }, { } },
|
||
|
{ "cortex-a72", "Select the cortex-a72 processor", { AArch64::ProcA57 }, { } },
|
||
|
{ "cyclone", "Select the cyclone processor", { AArch64::ProcCyclone }, { } },
|
||
|
{ "exynos-m1", "Select the exynos-m1 processor", { AArch64::ProcExynosM1 }, { } },
|
||
|
{ "generic", "Select the generic processor", { AArch64::FeatureFPARMv8, AArch64::FeatureNEON, AArch64::FeatureCRC, AArch64::FeaturePerfMon }, { } }
|
||
|
};
|
||
|
|
||
|
#ifdef DBGFIELD
|
||
|
#error "<target>GenSubtargetInfo.inc requires a DBGFIELD macro"
|
||
|
#endif
|
||
|
#ifndef NDEBUG
|
||
|
#define DBGFIELD(x) x,
|
||
|
#else
|
||
|
#define DBGFIELD(x)
|
||
|
#endif
|
||
|
|
||
|
// ===============================================================
|
||
|
// Data tables for the new per-operand machine model.
|
||
|
|
||
|
#undef DBGFIELD
|
||
|
static inline MCSubtargetInfo *createAArch64MCSubtargetInfoImpl(const Triple &TT, StringRef CPU, StringRef FS) {
|
||
|
return new MCSubtargetInfo(TT, CPU, FS, AArch64FeatureKV, AArch64SubTypeKV, 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::AArch64Subtarget::ParseSubtargetFeatures(StringRef CPU, StringRef FS) {
|
||
|
DEBUG(dbgs() << "\nFeatures:" << FS);
|
||
|
DEBUG(dbgs() << "\nCPU:" << CPU << "\n\n");
|
||
|
InitMCProcessorInfo(CPU, FS);
|
||
|
const FeatureBitset& Bits = getFeatureBits();
|
||
|
if (Bits[AArch64::FeatureCRC]) HasCRC = true;
|
||
|
if (Bits[AArch64::FeatureCrypto]) HasCrypto = true;
|
||
|
if (Bits[AArch64::FeatureFPARMv8]) HasFPARMv8 = true;
|
||
|
if (Bits[AArch64::FeatureFullFP16]) HasFullFP16 = true;
|
||
|
if (Bits[AArch64::FeatureNEON]) HasNEON = true;
|
||
|
if (Bits[AArch64::FeaturePerfMon]) HasPerfMon = true;
|
||
|
if (Bits[AArch64::FeatureReserveX18]) ReserveX18 = true;
|
||
|
if (Bits[AArch64::FeatureSPE]) HasSPE = true;
|
||
|
if (Bits[AArch64::FeatureStrictAlign]) StrictAlign = true;
|
||
|
if (Bits[AArch64::FeatureZCRegMove]) HasZeroCycleRegMove = true;
|
||
|
if (Bits[AArch64::FeatureZCZeroing]) HasZeroCycleZeroing = true;
|
||
|
if (Bits[AArch64::HasV8_1aOps]) HasV8_1aOps = true;
|
||
|
if (Bits[AArch64::HasV8_2aOps]) HasV8_2aOps = true;
|
||
|
if (Bits[AArch64::ProcA35] && ARMProcFamily < CortexA35) ARMProcFamily = CortexA35;
|
||
|
if (Bits[AArch64::ProcA53] && ARMProcFamily < CortexA53) ARMProcFamily = CortexA53;
|
||
|
if (Bits[AArch64::ProcA57] && ARMProcFamily < CortexA57) ARMProcFamily = CortexA57;
|
||
|
if (Bits[AArch64::ProcCyclone] && ARMProcFamily < Cyclone) ARMProcFamily = Cyclone;
|
||
|
if (Bits[AArch64::ProcExynosM1] && ARMProcFamily < ExynosM1) ARMProcFamily = ExynosM1;
|
||
|
}
|
||
|
#endif // GET_SUBTARGETINFO_TARGET_DESC
|