diff options
author | Dylan McKay <dylanmckay34@gmail.com> | 2016-09-28 15:31:12 +0000 |
---|---|---|
committer | Dylan McKay <dylanmckay34@gmail.com> | 2016-09-28 15:31:12 +0000 |
commit | e762094864995d86e1dd3040322fca1e7d96fe05 (patch) | |
tree | f9a38f263c364db9a31d6284fe977511993ef0d4 /llvm/lib | |
parent | 997f8838e5ee5e10548de9cdb50322a7ace99c34 (diff) | |
download | bcm5719-llvm-e762094864995d86e1dd3040322fca1e7d96fe05.tar.gz bcm5719-llvm-e762094864995d86e1dd3040322fca1e7d96fe05.zip |
[AVR] Add AVRMCTargetDesc.cpp
Summary:
This adds the AVRMCTargetDesc file in tree. It allows creation of the
core classes used in the backend.
Reviewers: arsenm, kparzysz
Subscribers: wdng, beanz, mgorny
Differential Revision: https://reviews.llvm.org/D25023
llvm-svn: 282597
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.cpp | 96 | ||||
-rw-r--r-- | llvm/lib/Target/AVR/MCTargetDesc/CMakeLists.txt | 1 | ||||
-rw-r--r-- | llvm/lib/Target/AVR/TargetInfo/AVRTargetInfo.cpp | 4 |
3 files changed, 97 insertions, 4 deletions
diff --git a/llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.cpp b/llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.cpp new file mode 100644 index 00000000000..0cc5cd3e5b9 --- /dev/null +++ b/llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.cpp @@ -0,0 +1,96 @@ +//===-- AVRMCTargetDesc.cpp - AVR Target Descriptions ---------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file provides AVR specific target descriptions. +// +//===----------------------------------------------------------------------===// + +#include "AVRELFStreamer.h" +#include "AVRMCAsmInfo.h" +#include "AVRMCTargetDesc.h" +#include "AVRTargetStreamer.h" + +#include "llvm/MC/MCELFStreamer.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 "AVRGenInstrInfo.inc" + +#define GET_SUBTARGETINFO_MC_DESC +#include "AVRGenSubtargetInfo.inc" + +#define GET_REGINFO_MC_DESC +#include "AVRGenRegisterInfo.inc" + +static MCInstrInfo *createAVRMCInstrInfo() { + MCInstrInfo *X = new MCInstrInfo(); + InitAVRMCInstrInfo(X); + + return X; +} + +static MCRegisterInfo *createAVRMCRegisterInfo(const Triple &TT) { + MCRegisterInfo *X = new MCRegisterInfo(); + InitAVRMCRegisterInfo(X, 0); + + return X; +} + +static MCSubtargetInfo *createAVRMCSubtargetInfo(const Triple &TT, + StringRef CPU, StringRef FS) { + return createAVRMCSubtargetInfoImpl(TT, CPU, FS); +} + +static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context, + MCAsmBackend &MAB, raw_pwrite_stream &OS, + MCCodeEmitter *Emitter, bool RelaxAll) { + return createELFStreamer(Context, MAB, OS, Emitter, RelaxAll); +} + +static MCTargetStreamer * +createAVRObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI) { + return new AVRELFStreamer(S, STI); +} + +static MCTargetStreamer *createMCAsmTargetStreamer(MCStreamer &S, + formatted_raw_ostream &OS, + MCInstPrinter *InstPrint, + bool isVerboseAsm) { + return new AVRTargetAsmStreamer(S); +} + +extern "C" void LLVMInitializeAVRTargetMC() { + // Register the MC asm info. + RegisterMCAsmInfo<AVRMCAsmInfo> X(TheAVRTarget); + + // Register the MC instruction info. + TargetRegistry::RegisterMCInstrInfo(TheAVRTarget, createAVRMCInstrInfo); + + // Register the MC register info. + TargetRegistry::RegisterMCRegInfo(TheAVRTarget, createAVRMCRegisterInfo); + + // Register the MC subtarget info. + TargetRegistry::RegisterMCSubtargetInfo(TheAVRTarget, + createAVRMCSubtargetInfo); + + // Register the ELF streamer + TargetRegistry::RegisterELFStreamer(TheAVRTarget, createMCStreamer); + + // Register the obj target streamer. + TargetRegistry::RegisterObjectTargetStreamer(TheAVRTarget, + createAVRObjectTargetStreamer); + + // Register the asm target streamer. + TargetRegistry::RegisterAsmTargetStreamer(TheAVRTarget, + createMCAsmTargetStreamer); +} + diff --git a/llvm/lib/Target/AVR/MCTargetDesc/CMakeLists.txt b/llvm/lib/Target/AVR/MCTargetDesc/CMakeLists.txt index 9764653a4dc..b8ec65db0db 100644 --- a/llvm/lib/Target/AVR/MCTargetDesc/CMakeLists.txt +++ b/llvm/lib/Target/AVR/MCTargetDesc/CMakeLists.txt @@ -2,6 +2,7 @@ add_llvm_library(LLVMAVRDesc AVRELFStreamer.cpp AVRMCAsmInfo.cpp AVRMCExpr.cpp + AVRMCTargetDesc.cpp AVRTargetStreamer.cpp ) diff --git a/llvm/lib/Target/AVR/TargetInfo/AVRTargetInfo.cpp b/llvm/lib/Target/AVR/TargetInfo/AVRTargetInfo.cpp index c0e0d20029c..0dffdf4c289 100644 --- a/llvm/lib/Target/AVR/TargetInfo/AVRTargetInfo.cpp +++ b/llvm/lib/Target/AVR/TargetInfo/AVRTargetInfo.cpp @@ -19,7 +19,3 @@ extern "C" void LLVMInitializeAVRTargetInfo() { llvm::TheAVRTarget, "avr", "Atmel AVR Microcontroller"); } -// FIXME: Temporary stub - this function must be defined for linking -// to succeed. Remove once this function is properly implemented. -extern "C" void LLVMInitializeAVRTargetMC() { -} |