172062f5744557e270a38192554c3126ea5f97434Tim Northover//==-- AArch64Subtarget.h - Define Subtarget for the AArch64 ---*- C++ -*--===// 272062f5744557e270a38192554c3126ea5f97434Tim Northover// 372062f5744557e270a38192554c3126ea5f97434Tim Northover// The LLVM Compiler Infrastructure 472062f5744557e270a38192554c3126ea5f97434Tim Northover// 572062f5744557e270a38192554c3126ea5f97434Tim Northover// This file is distributed under the University of Illinois Open Source 672062f5744557e270a38192554c3126ea5f97434Tim Northover// License. See LICENSE.TXT for details. 772062f5744557e270a38192554c3126ea5f97434Tim Northover// 872062f5744557e270a38192554c3126ea5f97434Tim Northover//===----------------------------------------------------------------------===// 972062f5744557e270a38192554c3126ea5f97434Tim Northover// 1072062f5744557e270a38192554c3126ea5f97434Tim Northover// This file declares the AArch64 specific subclass of TargetSubtargetInfo. 1172062f5744557e270a38192554c3126ea5f97434Tim Northover// 1272062f5744557e270a38192554c3126ea5f97434Tim Northover//===----------------------------------------------------------------------===// 1372062f5744557e270a38192554c3126ea5f97434Tim Northover 1472062f5744557e270a38192554c3126ea5f97434Tim Northover#ifndef LLVM_TARGET_AARCH64_SUBTARGET_H 1572062f5744557e270a38192554c3126ea5f97434Tim Northover#define LLVM_TARGET_AARCH64_SUBTARGET_H 1672062f5744557e270a38192554c3126ea5f97434Tim Northover 1772062f5744557e270a38192554c3126ea5f97434Tim Northover#include "llvm/ADT/Triple.h" 1872062f5744557e270a38192554c3126ea5f97434Tim Northover#include "llvm/Target/TargetSubtargetInfo.h" 1972062f5744557e270a38192554c3126ea5f97434Tim Northover 2072062f5744557e270a38192554c3126ea5f97434Tim Northover#define GET_SUBTARGETINFO_HEADER 2172062f5744557e270a38192554c3126ea5f97434Tim Northover#include "AArch64GenSubtargetInfo.inc" 2272062f5744557e270a38192554c3126ea5f97434Tim Northover 2372062f5744557e270a38192554c3126ea5f97434Tim Northover#include <string> 2472062f5744557e270a38192554c3126ea5f97434Tim Northover 2572062f5744557e270a38192554c3126ea5f97434Tim Northovernamespace llvm { 2672062f5744557e270a38192554c3126ea5f97434Tim Northoverclass StringRef; 2772062f5744557e270a38192554c3126ea5f97434Tim Northoverclass GlobalValue; 2872062f5744557e270a38192554c3126ea5f97434Tim Northover 2972062f5744557e270a38192554c3126ea5f97434Tim Northoverclass AArch64Subtarget : public AArch64GenSubtargetInfo { 3072062f5744557e270a38192554c3126ea5f97434Tim Northoverprotected: 3172062f5744557e270a38192554c3126ea5f97434Tim Northover bool HasNEON; 3272062f5744557e270a38192554c3126ea5f97434Tim Northover bool HasCrypto; 3372062f5744557e270a38192554c3126ea5f97434Tim Northover 3472062f5744557e270a38192554c3126ea5f97434Tim Northover /// TargetTriple - What processor and OS we're targeting. 3572062f5744557e270a38192554c3126ea5f97434Tim Northover Triple TargetTriple; 3672062f5744557e270a38192554c3126ea5f97434Tim Northoverpublic: 3772062f5744557e270a38192554c3126ea5f97434Tim Northover /// This constructor initializes the data members to match that 3872062f5744557e270a38192554c3126ea5f97434Tim Northover /// of the specified triple. 3972062f5744557e270a38192554c3126ea5f97434Tim Northover /// 4072062f5744557e270a38192554c3126ea5f97434Tim Northover AArch64Subtarget(StringRef TT, StringRef CPU, StringRef FS); 4172062f5744557e270a38192554c3126ea5f97434Tim Northover 4272062f5744557e270a38192554c3126ea5f97434Tim Northover /// ParseSubtargetFeatures - Parses features string setting specified 4372062f5744557e270a38192554c3126ea5f97434Tim Northover /// subtarget options. Definition of function is auto generated by tblgen. 4472062f5744557e270a38192554c3126ea5f97434Tim Northover void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 4572062f5744557e270a38192554c3126ea5f97434Tim Northover 4672062f5744557e270a38192554c3126ea5f97434Tim Northover bool GVIsIndirectSymbol(const GlobalValue *GV, Reloc::Model RelocM) const; 4772062f5744557e270a38192554c3126ea5f97434Tim Northover 4872062f5744557e270a38192554c3126ea5f97434Tim Northover bool isTargetELF() const { return TargetTriple.isOSBinFormatELF(); } 4972062f5744557e270a38192554c3126ea5f97434Tim Northover bool isTargetLinux() const { return TargetTriple.getOS() == Triple::Linux; } 5072062f5744557e270a38192554c3126ea5f97434Tim Northover 5187773c318fcee853fb34a80a10c4347d523bdafbTim Northover bool hasNEON() const { return HasNEON; } 5287773c318fcee853fb34a80a10c4347d523bdafbTim Northover 5387773c318fcee853fb34a80a10c4347d523bdafbTim Northover bool hasCrypto() const { return HasCrypto; } 5472062f5744557e270a38192554c3126ea5f97434Tim Northover}; 5572062f5744557e270a38192554c3126ea5f97434Tim Northover} // End llvm namespace 5672062f5744557e270a38192554c3126ea5f97434Tim Northover 5772062f5744557e270a38192554c3126ea5f97434Tim Northover#endif // LLVM_TARGET_AARCH64_SUBTARGET_H 58