Signed-off-by: Jia Liu <proljc@xxxxxxxxx> --- .../UniCore/MCTargetDesc/UniCoreMCTargetDesc.cpp | 15 ++++++ .../UniCore/MCTargetDesc/UniCoreMCTargetDesc.h | 3 ++ lib/Target/UniCore/Makefile | 3 +- lib/Target/UniCore/UniCore.td | 5 ++ lib/Target/UniCore/UniCoreSubtarget.cpp | 37 +++++++++++++ lib/Target/UniCore/UniCoreSubtarget.h | 56 ++++++++++++++++++++ 6 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 lib/Target/UniCore/UniCoreSubtarget.cpp create mode 100644 lib/Target/UniCore/UniCoreSubtarget.h diff --git a/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.cpp b/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.cpp index 0e14154..86750e4 100644 --- a/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.cpp +++ b/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.cpp @@ -15,11 +15,15 @@ #include "llvm/MC/MCCodeGenInfo.h" #include "llvm/MC/MCInstrInfo.h" #include "llvm/MC/MCRegisterInfo.h" +#include "llvm/MC/MCSubtargetInfo.h" #include "llvm/Support/TargetRegistry.h" #define GET_INSTRINFO_MC_DESC #include "UniCoreGenInstrInfo.inc" +#define GET_SUBTARGETINFO_MC_DESC +#include "UniCoreGenSubtargetInfo.inc" + #define GET_REGINFO_MC_DESC #include "UniCoreGenRegisterInfo.inc" @@ -37,6 +41,13 @@ static MCRegisterInfo *createUniCoreMCRegisterInfo(StringRef TT) { return X; } +static MCSubtargetInfo *createUniCoreMCSubtargetInfo(StringRef TT, StringRef CPU, + StringRef FS) { + MCSubtargetInfo *X = new MCSubtargetInfo(); + InitUniCoreMCSubtargetInfo(X, TT, CPU, FS); + return X; +} + extern "C" void LLVMInitializeUniCoreTargetMC() { // Register the MC instruction info. TargetRegistry::RegisterMCInstrInfo(TheUniCoreTarget, createUniCoreMCInstrInfo); @@ -44,4 +55,8 @@ extern "C" void LLVMInitializeUniCoreTargetMC() { // Register the MC register info. TargetRegistry::RegisterMCRegInfo(TheUniCoreTarget, createUniCoreMCRegisterInfo); + + // Register the MC subtarget info. + TargetRegistry::RegisterMCSubtargetInfo(TheUniCoreTarget, + createUniCoreMCSubtargetInfo); } diff --git a/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.h b/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.h index a57dcbd..2c03fe0 100644 --- a/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.h +++ b/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.h @@ -31,4 +31,7 @@ extern Target TheUniCoreTarget; #define GET_INSTRINFO_ENUM #include "UniCoreGenInstrInfo.inc" +#define GET_SUBTARGETINFO_ENUM +#include "UniCoreGenSubtargetInfo.inc" + #endif diff --git a/lib/Target/UniCore/Makefile b/lib/Target/UniCore/Makefile index a0e4e1d..388da94 100644 --- a/lib/Target/UniCore/Makefile +++ b/lib/Target/UniCore/Makefile @@ -12,7 +12,8 @@ TARGET = UniCore # Make sure that tblgen is run, first thing. BUILT_SOURCES = UniCoreGenRegisterInfo.inc \ - UniCoreGenInstrInfo.inc + UniCoreGenInstrInfo.inc \ + UniCoreGenSubtargetInfo.inc DIRS = TargetInfo MCTargetDesc diff --git a/lib/Target/UniCore/UniCore.td b/lib/Target/UniCore/UniCore.td index 1b919bc..592de5d 100644 --- a/lib/Target/UniCore/UniCore.td +++ b/lib/Target/UniCore/UniCore.td @@ -24,6 +24,11 @@ include "UniCoreInstrInfo.td" include "UniCoreSchedule.td" //===----------------------------------------------------------------------===// +// UniCore Subtarget features // +//===----------------------------------------------------------------------===// + + +//===----------------------------------------------------------------------===// // UniCore processors supported. //===----------------------------------------------------------------------===// class Proc<string Name, list<SubtargetFeature> Features> diff --git a/lib/Target/UniCore/UniCoreSubtarget.cpp b/lib/Target/UniCore/UniCoreSubtarget.cpp new file mode 100644 index 0000000..0c3de85 --- /dev/null +++ b/lib/Target/UniCore/UniCoreSubtarget.cpp @@ -0,0 +1,37 @@ +//===-- UniCoreSubtarget.cpp - UniCore Subtarget Information --------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements the UniCore specific subclass of TargetSubtargetInfo. +// +//===----------------------------------------------------------------------===// + +#include "UniCoreSubtarget.h" +#include "UniCore.h" +#include "llvm/Support/TargetRegistry.h" + +#define GET_SUBTARGETINFO_TARGET_DESC +#define GET_SUBTARGETINFO_CTOR +#include "UniCoreGenSubtargetInfo.inc" + +using namespace llvm; + +void UniCoreSubtarget::anchor() { } + +UniCoreSubtarget::UniCoreSubtarget(const std::string &TT, + const std::string &CPU, + const std::string &FS) : + UniCoreGenSubtargetInfo(TT, CPU, FS) { + std::string CPUName = "unicore32"; + + // Parse features string. + ParseSubtargetFeatures(CPUName, FS); + + UniCoreABI = O32; + UniCoreArchVersion = UniCore32; +} diff --git a/lib/Target/UniCore/UniCoreSubtarget.h b/lib/Target/UniCore/UniCoreSubtarget.h new file mode 100644 index 0000000..722ded2 --- /dev/null +++ b/lib/Target/UniCore/UniCoreSubtarget.h @@ -0,0 +1,56 @@ +//===-- UniCoreSubtarget.h - Define Subtarget for the UniCore --*- 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 UniCore specific subclass of TargetSubtargetInfo. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_TARGET_UniCore_SUBTARGET_H +#define LLVM_TARGET_UniCore_SUBTARGET_H + +#include "llvm/Target/TargetSubtargetInfo.h" +#include <string> + +#define GET_SUBTARGETINFO_HEADER +#include "UniCoreGenSubtargetInfo.inc" + +namespace llvm { +class StringRef; + +class UniCoreSubtarget : public UniCoreGenSubtargetInfo { + virtual void anchor(); + +public: + enum UniCoreABIEnum { + UnknownABI, O32 + }; + + enum UniCoreArchEnum { + UniCore32 + }; + + // UniCore architecture version + UniCoreArchEnum UniCoreArchVersion; + + // UniCore supported ABIs + UniCoreABIEnum UniCoreABI; + + /// This constructor initializes the data members to match that + /// of the specified triple. + /// + UniCoreSubtarget(const std::string &TT, const std::string &CPU, + const std::string &FS); + + /// ParseSubtargetFeatures - Parses features string setting specified + /// subtarget options. Definition of function is auto generated by tblgen. + void ParseSubtargetFeatures(StringRef CPU, StringRef FS); +}; +} // End llvm namespace + +#endif // LLVM_TARGET_UniCore_SUBTARGET_H -- 1.7.10.2 (Apple Git-33)