1235633Sdim//===-- MSP430MCTargetDesc.cpp - MSP430 Target Descriptions ---------------===//
2224133Sdim//
3224133Sdim//                     The LLVM Compiler Infrastructure
4224133Sdim//
5224133Sdim// This file is distributed under the University of Illinois Open Source
6224133Sdim// License. See LICENSE.TXT for details.
7224133Sdim//
8224133Sdim//===----------------------------------------------------------------------===//
9224133Sdim//
10224133Sdim// This file provides MSP430 specific target descriptions.
11224133Sdim//
12224133Sdim//===----------------------------------------------------------------------===//
13224133Sdim
14224133Sdim#include "MSP430MCTargetDesc.h"
15252723Sdim#include "InstPrinter/MSP430InstPrinter.h"
16224133Sdim#include "MSP430MCAsmInfo.h"
17226890Sdim#include "llvm/MC/MCCodeGenInfo.h"
18224133Sdim#include "llvm/MC/MCInstrInfo.h"
19224133Sdim#include "llvm/MC/MCRegisterInfo.h"
20224133Sdim#include "llvm/MC/MCSubtargetInfo.h"
21226890Sdim#include "llvm/Support/TargetRegistry.h"
22224133Sdim
23224133Sdim#define GET_INSTRINFO_MC_DESC
24224133Sdim#include "MSP430GenInstrInfo.inc"
25224133Sdim
26224133Sdim#define GET_SUBTARGETINFO_MC_DESC
27224133Sdim#include "MSP430GenSubtargetInfo.inc"
28224133Sdim
29224133Sdim#define GET_REGINFO_MC_DESC
30224133Sdim#include "MSP430GenRegisterInfo.inc"
31224133Sdim
32224133Sdimusing namespace llvm;
33224133Sdim
34224133Sdimstatic MCInstrInfo *createMSP430MCInstrInfo() {
35224133Sdim  MCInstrInfo *X = new MCInstrInfo();
36224133Sdim  InitMSP430MCInstrInfo(X);
37224133Sdim  return X;
38224133Sdim}
39224133Sdim
40226890Sdimstatic MCRegisterInfo *createMSP430MCRegisterInfo(StringRef TT) {
41226890Sdim  MCRegisterInfo *X = new MCRegisterInfo();
42226890Sdim  InitMSP430MCRegisterInfo(X, MSP430::PCW);
43226890Sdim  return X;
44224133Sdim}
45224133Sdim
46224133Sdimstatic MCSubtargetInfo *createMSP430MCSubtargetInfo(StringRef TT, StringRef CPU,
47224133Sdim                                                    StringRef FS) {
48224133Sdim  MCSubtargetInfo *X = new MCSubtargetInfo();
49224133Sdim  InitMSP430MCSubtargetInfo(X, TT, CPU, FS);
50224133Sdim  return X;
51224133Sdim}
52224133Sdim
53226890Sdimstatic MCCodeGenInfo *createMSP430MCCodeGenInfo(StringRef TT, Reloc::Model RM,
54235633Sdim                                                CodeModel::Model CM,
55235633Sdim                                                CodeGenOpt::Level OL) {
56226890Sdim  MCCodeGenInfo *X = new MCCodeGenInfo();
57235633Sdim  X->InitMCCodeGenInfo(RM, CM, OL);
58226890Sdim  return X;
59226890Sdim}
60226890Sdim
61226890Sdimstatic MCInstPrinter *createMSP430MCInstPrinter(const Target &T,
62226890Sdim                                                unsigned SyntaxVariant,
63226890Sdim                                                const MCAsmInfo &MAI,
64235633Sdim                                                const MCInstrInfo &MII,
65235633Sdim                                                const MCRegisterInfo &MRI,
66226890Sdim                                                const MCSubtargetInfo &STI) {
67226890Sdim  if (SyntaxVariant == 0)
68235633Sdim    return new MSP430InstPrinter(MAI, MII, MRI);
69226890Sdim  return 0;
70226890Sdim}
71226890Sdim
72226890Sdimextern "C" void LLVMInitializeMSP430TargetMC() {
73226890Sdim  // Register the MC asm info.
74226890Sdim  RegisterMCAsmInfo<MSP430MCAsmInfo> X(TheMSP430Target);
75226890Sdim
76226890Sdim  // Register the MC codegen info.
77226890Sdim  TargetRegistry::RegisterMCCodeGenInfo(TheMSP430Target,
78226890Sdim                                        createMSP430MCCodeGenInfo);
79226890Sdim
80226890Sdim  // Register the MC instruction info.
81226890Sdim  TargetRegistry::RegisterMCInstrInfo(TheMSP430Target, createMSP430MCInstrInfo);
82226890Sdim
83226890Sdim  // Register the MC register info.
84226890Sdim  TargetRegistry::RegisterMCRegInfo(TheMSP430Target,
85226890Sdim                                    createMSP430MCRegisterInfo);
86226890Sdim
87226890Sdim  // Register the MC subtarget info.
88224133Sdim  TargetRegistry::RegisterMCSubtargetInfo(TheMSP430Target,
89224133Sdim                                          createMSP430MCSubtargetInfo);
90224133Sdim
91226890Sdim  // Register the MCInstPrinter.
92226890Sdim  TargetRegistry::RegisterMCInstPrinter(TheMSP430Target,
93226890Sdim                                        createMSP430MCInstPrinter);
94224133Sdim}
95