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