1
//===-- TargetParser - Parser for target features ---------------*- C++ -*-===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// This file implements a target parser to recognise hardware features such as
11
// FPU/CPU/ARCH names as well as specific support such as HDIV, etc.
13
//===----------------------------------------------------------------------===//
15
#ifndef LLVM_SUPPORT_TARGETPARSER_H
16
#define LLVM_SUPPORT_TARGETPARSER_H
18
// FIXME: vector is used because that's what clang uses for subtarget feature
19
// lists, but SmallVector would probably be better
25
// Target specific information into their own namespaces. These should be
26
// generated from TableGen because the information is already there, and there
27
// is where new information about targets will be added.
28
// FIXME: To TableGen this we need to make some table generated files available
29
// even if the back-end is not compiled with LLVM, plus we need to create a new
30
// back-end to TableGen to create these clean tables.
54
FK_CRYPTO_NEON_FP_ARMV8,
69
// An FPU name implies one of three levels of Neon support:
70
enum NeonSupportLevel {
71
NS_None = 0, ///< No Neon
73
NS_Crypto ///< Neon with Crypto
76
// An FPU name restricts the FPU in one of three ways:
78
FR_None = 0, ///< No restriction
79
FR_D16, ///< Only 16 D registers
80
FR_SP_D16 ///< Only single-precision instructions, with 16 D registers
108
// Non-standard Arch names.
123
// Arch extension modifiers for CPUs.
134
// Unsupported extensions.
152
// FIXME: BE8 vs. BE32?
168
// Target Parsers, one per architecture.
169
class ARMTargetParser {
170
static StringRef getFPUSynonym(StringRef FPU);
171
static StringRef getArchSynonym(StringRef Arch);
174
static StringRef getCanonicalArchName(StringRef Arch);
177
static const char * getFPUName(unsigned FPUKind);
178
static unsigned getFPUVersion(unsigned FPUKind);
179
static unsigned getFPUNeonSupportLevel(unsigned FPUKind);
180
static unsigned getFPURestriction(unsigned FPUKind);
181
// FIXME: This should be moved to TargetTuple once it exists
182
static bool getFPUFeatures(unsigned FPUKind,
183
std::vector<const char*> &Features);
184
static const char * getArchName(unsigned ArchKind);
185
static unsigned getArchAttr(unsigned ArchKind);
186
static const char * getCPUAttr(unsigned ArchKind);
187
static const char * getSubArch(unsigned ArchKind);
188
static const char * getArchExtName(unsigned ArchExtKind);
189
static const char * getDefaultCPU(StringRef Arch);
192
static unsigned parseFPU(StringRef FPU);
193
static unsigned parseArch(StringRef Arch);
194
static unsigned parseArchExt(StringRef ArchExt);
195
static unsigned parseCPUArch(StringRef CPU);
196
static unsigned parseArchISA(StringRef Arch);
197
static unsigned parseArchEndian(StringRef Arch);
198
static unsigned parseArchProfile(StringRef Arch);
199
static unsigned parseArchVersion(StringRef Arch);