diff options
Diffstat (limited to 'llvm/lib/Target/Nios2/Nios2Subtarget.h')
| -rw-r--r-- | llvm/lib/Target/Nios2/Nios2Subtarget.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/llvm/lib/Target/Nios2/Nios2Subtarget.h b/llvm/lib/Target/Nios2/Nios2Subtarget.h new file mode 100644 index 00000000000..07ff8d957cb --- /dev/null +++ b/llvm/lib/Target/Nios2/Nios2Subtarget.h @@ -0,0 +1,88 @@ +//===-- Nios2Subtarget.h - Define Subtarget for the Nios2 -------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file declares the Nios2 specific subclass of TargetSubtargetInfo. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIB_TARGET_NIOS2_NIOS2SUBTARGET_H +#define LLVM_LIB_TARGET_NIOS2_NIOS2SUBTARGET_H + +#include "Nios2FrameLowering.h" +#include "Nios2InstrInfo.h" +#include "llvm/Target/TargetSubtargetInfo.h" + +#define GET_SUBTARGETINFO_HEADER +#include "Nios2GenSubtargetInfo.inc" + +namespace llvm { +class StringRef; + +class Nios2TargetMachine; + +class Nios2Subtarget : public Nios2GenSubtargetInfo { + virtual void anchor(); + +public: + // Nios2 R2 features + // Bit manipulation instructions extension + bool HasBMX; + // Code Density instructions extension + bool HasCDX; + // Multi-Processor instructions extension + bool HasMPX; + // New mandatory instructions + bool HasR2Mandatory; + +protected: + enum Nios2ArchEnum { + // Nios2 R1 ISA + Nios2r1, + // Nios2 R2 ISA + Nios2r2 + }; + + // Nios2 architecture version + Nios2ArchEnum Nios2ArchVersion; + + const Nios2TargetMachine &TM; + + Triple TargetTriple; + + std::unique_ptr<const Nios2InstrInfo> InstrInfo; + std::unique_ptr<const Nios2FrameLowering> FrameLowering; + +public: + /// This constructor initializes the data members to match that + /// of the specified triple. + Nios2Subtarget(const Triple &TT, const std::string &CPU, + const std::string &FS, const Nios2TargetMachine &_TM); + + /// ParseSubtargetFeatures - Parses features string setting specified + /// subtarget options. Definition of function is auto generated by tblgen. + void ParseSubtargetFeatures(StringRef CPU, StringRef FS); + + bool hasNios2r1() const { return Nios2ArchVersion >= Nios2r1; } + bool isNios2r1() const { return Nios2ArchVersion == Nios2r1; } + bool hasNios2r2() const { return Nios2ArchVersion >= Nios2r2; } + bool isNios2r2() const { return Nios2ArchVersion == Nios2r2; } + + Nios2Subtarget &initializeSubtargetDependencies(StringRef CPU, StringRef FS, + const TargetMachine &TM); + + const TargetFrameLowering *getFrameLowering() const override { + return FrameLowering.get(); + } + const Nios2RegisterInfo *getRegisterInfo() const override { + return &InstrInfo->getRegisterInfo(); + } +}; +} // namespace llvm + +#endif |

