diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 21:25:48 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 21:25:48 +0000 |
commit | d88c1a5a572cdb661c111098831fa526e933756f (patch) | |
tree | 97b32c3372106ac47ded3d1a99f9c023a8530073 /contrib/llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.cpp | |
parent | 715652a404ee99f10c09c0a5edbb5883961b8c25 (diff) | |
parent | b915e9e0fc85ba6f398b3fab0db6a81a8913af94 (diff) |
Update llvm to trunk r290819 and resolve conflicts.
Notes
Notes:
svn path=/projects/clang400-import/; revision=311142
Diffstat (limited to 'contrib/llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.cpp')
-rw-r--r-- | contrib/llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.cpp | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/contrib/llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.cpp b/contrib/llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.cpp new file mode 100644 index 000000000000..a4fa5c0a9310 --- /dev/null +++ b/contrib/llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.cpp @@ -0,0 +1,121 @@ +//===-- 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 "InstPrinter/AVRInstPrinter.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" + +using namespace llvm; + +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 MCInstPrinter *createAVRMCInstPrinter(const Triple &T, + unsigned SyntaxVariant, + const MCAsmInfo &MAI, + const MCInstrInfo &MII, + const MCRegisterInfo &MRI) { + if (SyntaxVariant == 0) { + return new AVRInstPrinter(MAI, MII, MRI); + } + + return nullptr; +} + +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(getTheAVRTarget()); + + // Register the MC instruction info. + TargetRegistry::RegisterMCInstrInfo(getTheAVRTarget(), createAVRMCInstrInfo); + + // Register the MC register info. + TargetRegistry::RegisterMCRegInfo(getTheAVRTarget(), createAVRMCRegisterInfo); + + // Register the MC subtarget info. + TargetRegistry::RegisterMCSubtargetInfo(getTheAVRTarget(), + createAVRMCSubtargetInfo); + + // Register the MCInstPrinter. + TargetRegistry::RegisterMCInstPrinter(getTheAVRTarget(), + createAVRMCInstPrinter); + + // Register the MC Code Emitter + TargetRegistry::RegisterMCCodeEmitter(getTheAVRTarget(), createAVRMCCodeEmitter); + + // Register the ELF streamer + TargetRegistry::RegisterELFStreamer(getTheAVRTarget(), createMCStreamer); + + // Register the obj target streamer. + TargetRegistry::RegisterObjectTargetStreamer(getTheAVRTarget(), + createAVRObjectTargetStreamer); + + // Register the asm target streamer. + TargetRegistry::RegisterAsmTargetStreamer(getTheAVRTarget(), + createMCAsmTargetStreamer); + + // Register the asm backend (as little endian). + TargetRegistry::RegisterMCAsmBackend(getTheAVRTarget(), createAVRAsmBackend); +} + |