Skip to content

Commit e762094

Browse files
author
Dylan McKay
committed
[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
1 parent 997f883 commit e762094

File tree

3 files changed

+97
-4
lines changed

3 files changed

+97
-4
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
//===-- AVRMCTargetDesc.cpp - AVR Target Descriptions ---------------------===//
2+
//
3+
// The LLVM Compiler Infrastructure
4+
//
5+
// This file is distributed under the University of Illinois Open Source
6+
// License. See LICENSE.TXT for details.
7+
//
8+
//===----------------------------------------------------------------------===//
9+
//
10+
// This file provides AVR specific target descriptions.
11+
//
12+
//===----------------------------------------------------------------------===//
13+
14+
#include "AVRELFStreamer.h"
15+
#include "AVRMCAsmInfo.h"
16+
#include "AVRMCTargetDesc.h"
17+
#include "AVRTargetStreamer.h"
18+
19+
#include "llvm/MC/MCELFStreamer.h"
20+
#include "llvm/MC/MCInstrInfo.h"
21+
#include "llvm/MC/MCRegisterInfo.h"
22+
#include "llvm/MC/MCSubtargetInfo.h"
23+
#include "llvm/Support/TargetRegistry.h"
24+
25+
#define GET_INSTRINFO_MC_DESC
26+
#include "AVRGenInstrInfo.inc"
27+
28+
#define GET_SUBTARGETINFO_MC_DESC
29+
#include "AVRGenSubtargetInfo.inc"
30+
31+
#define GET_REGINFO_MC_DESC
32+
#include "AVRGenRegisterInfo.inc"
33+
34+
static MCInstrInfo *createAVRMCInstrInfo() {
35+
MCInstrInfo *X = new MCInstrInfo();
36+
InitAVRMCInstrInfo(X);
37+
38+
return X;
39+
}
40+
41+
static MCRegisterInfo *createAVRMCRegisterInfo(const Triple &TT) {
42+
MCRegisterInfo *X = new MCRegisterInfo();
43+
InitAVRMCRegisterInfo(X, 0);
44+
45+
return X;
46+
}
47+
48+
static MCSubtargetInfo *createAVRMCSubtargetInfo(const Triple &TT,
49+
StringRef CPU, StringRef FS) {
50+
return createAVRMCSubtargetInfoImpl(TT, CPU, FS);
51+
}
52+
53+
static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context,
54+
MCAsmBackend &MAB, raw_pwrite_stream &OS,
55+
MCCodeEmitter *Emitter, bool RelaxAll) {
56+
return createELFStreamer(Context, MAB, OS, Emitter, RelaxAll);
57+
}
58+
59+
static MCTargetStreamer *
60+
createAVRObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI) {
61+
return new AVRELFStreamer(S, STI);
62+
}
63+
64+
static MCTargetStreamer *createMCAsmTargetStreamer(MCStreamer &S,
65+
formatted_raw_ostream &OS,
66+
MCInstPrinter *InstPrint,
67+
bool isVerboseAsm) {
68+
return new AVRTargetAsmStreamer(S);
69+
}
70+
71+
extern "C" void LLVMInitializeAVRTargetMC() {
72+
// Register the MC asm info.
73+
RegisterMCAsmInfo<AVRMCAsmInfo> X(TheAVRTarget);
74+
75+
// Register the MC instruction info.
76+
TargetRegistry::RegisterMCInstrInfo(TheAVRTarget, createAVRMCInstrInfo);
77+
78+
// Register the MC register info.
79+
TargetRegistry::RegisterMCRegInfo(TheAVRTarget, createAVRMCRegisterInfo);
80+
81+
// Register the MC subtarget info.
82+
TargetRegistry::RegisterMCSubtargetInfo(TheAVRTarget,
83+
createAVRMCSubtargetInfo);
84+
85+
// Register the ELF streamer
86+
TargetRegistry::RegisterELFStreamer(TheAVRTarget, createMCStreamer);
87+
88+
// Register the obj target streamer.
89+
TargetRegistry::RegisterObjectTargetStreamer(TheAVRTarget,
90+
createAVRObjectTargetStreamer);
91+
92+
// Register the asm target streamer.
93+
TargetRegistry::RegisterAsmTargetStreamer(TheAVRTarget,
94+
createMCAsmTargetStreamer);
95+
}
96+

llvm/lib/Target/AVR/MCTargetDesc/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ add_llvm_library(LLVMAVRDesc
22
AVRELFStreamer.cpp
33
AVRMCAsmInfo.cpp
44
AVRMCExpr.cpp
5+
AVRMCTargetDesc.cpp
56
AVRTargetStreamer.cpp
67
)
78

llvm/lib/Target/AVR/TargetInfo/AVRTargetInfo.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,3 @@ extern "C" void LLVMInitializeAVRTargetInfo() {
1919
llvm::TheAVRTarget, "avr", "Atmel AVR Microcontroller");
2020
}
2121

22-
// FIXME: Temporary stub - this function must be defined for linking
23-
// to succeed. Remove once this function is properly implemented.
24-
extern "C" void LLVMInitializeAVRTargetMC() {
25-
}

0 commit comments

Comments
 (0)