PPCMCTargetDesc.cpp revision 224133
1224133Sdim//===-- PPCMCTargetDesc.cpp - PowerPC Target Descriptions -------*- C++ -*-===//
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 PowerPC specific target descriptions.
11224133Sdim//
12224133Sdim//===----------------------------------------------------------------------===//
13224133Sdim
14224133Sdim#include "PPCMCTargetDesc.h"
15224133Sdim#include "PPCMCAsmInfo.h"
16224133Sdim#include "llvm/MC/MCInstrInfo.h"
17224133Sdim#include "llvm/MC/MCRegisterInfo.h"
18224133Sdim#include "llvm/MC/MCSubtargetInfo.h"
19224133Sdim#include "llvm/Target/TargetRegistry.h"
20224133Sdim
21224133Sdim#define GET_INSTRINFO_MC_DESC
22224133Sdim#include "PPCGenInstrInfo.inc"
23224133Sdim
24224133Sdim#define GET_SUBTARGETINFO_MC_DESC
25224133Sdim#include "PPCGenSubtargetInfo.inc"
26224133Sdim
27224133Sdim#define GET_REGINFO_MC_DESC
28224133Sdim#include "PPCGenRegisterInfo.inc"
29224133Sdim
30224133Sdimusing namespace llvm;
31224133Sdim
32224133Sdimstatic MCInstrInfo *createPPCMCInstrInfo() {
33224133Sdim  MCInstrInfo *X = new MCInstrInfo();
34224133Sdim  InitPPCMCInstrInfo(X);
35224133Sdim  return X;
36224133Sdim}
37224133Sdim
38224133Sdimextern "C" void LLVMInitializePowerPCMCInstrInfo() {
39224133Sdim  TargetRegistry::RegisterMCInstrInfo(ThePPC32Target, createPPCMCInstrInfo);
40224133Sdim  TargetRegistry::RegisterMCInstrInfo(ThePPC64Target, createPPCMCInstrInfo);
41224133Sdim}
42224133Sdim
43224133Sdim
44224133Sdimstatic MCSubtargetInfo *createPPCMCSubtargetInfo(StringRef TT, StringRef CPU,
45224133Sdim                                                 StringRef FS) {
46224133Sdim  MCSubtargetInfo *X = new MCSubtargetInfo();
47224133Sdim  InitPPCMCSubtargetInfo(X, TT, CPU, FS);
48224133Sdim  return X;
49224133Sdim}
50224133Sdim
51224133Sdimextern "C" void LLVMInitializePowerPCMCSubtargetInfo() {
52224133Sdim  TargetRegistry::RegisterMCSubtargetInfo(ThePPC32Target,
53224133Sdim                                          createPPCMCSubtargetInfo);
54224133Sdim  TargetRegistry::RegisterMCSubtargetInfo(ThePPC64Target,
55224133Sdim                                          createPPCMCSubtargetInfo);
56224133Sdim}
57224133Sdim
58224133Sdimstatic MCAsmInfo *createMCAsmInfo(const Target &T, StringRef TT) {
59224133Sdim  Triple TheTriple(TT);
60224133Sdim  bool isPPC64 = TheTriple.getArch() == Triple::ppc64;
61224133Sdim  if (TheTriple.isOSDarwin())
62224133Sdim    return new PPCMCAsmInfoDarwin(isPPC64);
63224133Sdim  return new PPCLinuxMCAsmInfo(isPPC64);
64224133Sdim
65224133Sdim}
66224133Sdim
67224133Sdimextern "C" void LLVMInitializePowerPCMCAsmInfo() {
68224133Sdim  RegisterMCAsmInfoFn C(ThePPC32Target, createMCAsmInfo);
69224133Sdim  RegisterMCAsmInfoFn D(ThePPC64Target, createMCAsmInfo);
70224133Sdim}
71