forked from OSchip/llvm-project
parent
81d577c5c9
commit
ad5f485957
|
@ -29,7 +29,7 @@
|
|||
#include "llvm/ADT/Statistic.h"
|
||||
|
||||
#include "../Target/X86/X86FixupKinds.h"
|
||||
#include "../Target/ARM/ARMFixupKinds.h"
|
||||
#include "../Target/ARM/MCTargetDesc/ARMFixupKinds.h"
|
||||
|
||||
#include <vector>
|
||||
using namespace llvm;
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#ifndef TARGET_ARM_H
|
||||
#define TARGET_ARM_H
|
||||
|
||||
#include "ARMBaseInfo.h"
|
||||
#include "MCTargetDesc/ARMBaseInfo.h"
|
||||
#include "MCTargetDesc/ARMMCTargetDesc.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
|
@ -37,12 +37,6 @@ class MCSubtargetInfo;
|
|||
class TargetAsmBackend;
|
||||
class formatted_raw_ostream;
|
||||
|
||||
MCCodeEmitter *createARMMCCodeEmitter(const MCInstrInfo &MCII,
|
||||
const MCSubtargetInfo &STI,
|
||||
MCContext &Ctx);
|
||||
|
||||
TargetAsmBackend *createARMAsmBackend(const Target &, const std::string &);
|
||||
|
||||
FunctionPass *createARMISelDag(ARMBaseTargetMachine &TM,
|
||||
CodeGenOpt::Level OptLevel);
|
||||
|
||||
|
@ -61,12 +55,6 @@ FunctionPass *createThumb2SizeReductionPass();
|
|||
void LowerARMMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI,
|
||||
ARMAsmPrinter &AP);
|
||||
|
||||
/// createARMMachObjectWriter - Construct an ARM Mach-O object writer.
|
||||
MCObjectWriter *createARMMachObjectWriter(raw_ostream &OS,
|
||||
bool Is64Bit,
|
||||
uint32_t CPUType,
|
||||
uint32_t CPUSubtype);
|
||||
|
||||
} // end namespace llvm;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -21,43 +21,10 @@
|
|||
#include "llvm/Target/TargetRegistry.h"
|
||||
using namespace llvm;
|
||||
|
||||
// This is duplicated code. Refactor this.
|
||||
static MCStreamer *createMCStreamer(const Target &T, const std::string &TT,
|
||||
MCContext &Ctx, TargetAsmBackend &TAB,
|
||||
raw_ostream &OS,
|
||||
MCCodeEmitter *Emitter,
|
||||
bool RelaxAll,
|
||||
bool NoExecStack) {
|
||||
Triple TheTriple(TT);
|
||||
|
||||
if (TheTriple.isOSDarwin())
|
||||
return createMachOStreamer(Ctx, TAB, OS, Emitter, RelaxAll);
|
||||
|
||||
if (TheTriple.isOSWindows()) {
|
||||
llvm_unreachable("ARM does not support Windows COFF format");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return createELFStreamer(Ctx, TAB, OS, Emitter, RelaxAll, NoExecStack);
|
||||
}
|
||||
|
||||
extern "C" void LLVMInitializeARMTarget() {
|
||||
// Register the target.
|
||||
RegisterTargetMachine<ARMTargetMachine> X(TheARMTarget);
|
||||
RegisterTargetMachine<ThumbTargetMachine> Y(TheThumbTarget);
|
||||
|
||||
// Register the MC Code Emitter
|
||||
TargetRegistry::RegisterCodeEmitter(TheARMTarget, createARMMCCodeEmitter);
|
||||
TargetRegistry::RegisterCodeEmitter(TheThumbTarget, createARMMCCodeEmitter);
|
||||
|
||||
// Register the asm backend.
|
||||
TargetRegistry::RegisterAsmBackend(TheARMTarget, createARMAsmBackend);
|
||||
TargetRegistry::RegisterAsmBackend(TheThumbTarget, createARMAsmBackend);
|
||||
|
||||
// Register the object streamer.
|
||||
TargetRegistry::RegisterObjectStreamer(TheARMTarget, createMCStreamer);
|
||||
TargetRegistry::RegisterObjectStreamer(TheThumbTarget, createMCStreamer);
|
||||
|
||||
}
|
||||
|
||||
/// TargetMachine ctor - Create an ARM architecture model.
|
||||
|
|
|
@ -15,7 +15,6 @@ tablegen(ARMGenEDInfo.inc -gen-enhanced-disassembly-info)
|
|||
tablegen(ARMGenDecoderTables.inc -gen-arm-decoder)
|
||||
|
||||
add_llvm_target(ARMCodeGen
|
||||
ARMAsmBackend.cpp
|
||||
ARMAsmPrinter.cpp
|
||||
ARMBaseInstrInfo.cpp
|
||||
ARMBaseRegisterInfo.cpp
|
||||
|
@ -32,8 +31,6 @@ add_llvm_target(ARMCodeGen
|
|||
ARMISelLowering.cpp
|
||||
ARMInstrInfo.cpp
|
||||
ARMJITInfo.cpp
|
||||
ARMMachObjectWriter.cpp
|
||||
ARMMCCodeEmitter.cpp
|
||||
ARMLoadStoreOptimizer.cpp
|
||||
ARMMCInstLower.cpp
|
||||
ARMRegisterInfo.cpp
|
||||
|
|
|
@ -12,8 +12,8 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#define DEBUG_TYPE "asm-printer"
|
||||
#include "ARMBaseInfo.h"
|
||||
#include "ARMInstPrinter.h"
|
||||
#include "MCTargetDesc/ARMBaseInfo.h"
|
||||
#include "MCTargetDesc/ARMAddressingModes.h"
|
||||
#include "llvm/MC/MCInst.h"
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "ARM.h"
|
||||
#include "ARMFixupKinds.h"
|
||||
#include "MCTargetDesc/ARMBaseInfo.h"
|
||||
#include "MCTargetDesc/ARMFixupKinds.h"
|
||||
#include "MCTargetDesc/ARMAddressingModes.h"
|
||||
#include "llvm/ADT/Twine.h"
|
||||
#include "llvm/MC/MCAssembler.h"
|
||||
|
@ -24,7 +24,6 @@
|
|||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/Target/TargetAsmBackend.h"
|
||||
#include "llvm/Target/TargetRegistry.h"
|
||||
using namespace llvm;
|
||||
|
||||
namespace {
|
|
@ -17,7 +17,7 @@
|
|||
#ifndef ARMBASEINFO_H
|
||||
#define ARMBASEINFO_H
|
||||
|
||||
#include "MCTargetDesc/ARMMCTargetDesc.h"
|
||||
#include "ARMMCTargetDesc.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
|
||||
// Note that the following auto-generated files only defined enum types, and
|
|
@ -12,15 +12,16 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#define DEBUG_TYPE "mccodeemitter"
|
||||
#include "ARM.h"
|
||||
#include "ARMFixupKinds.h"
|
||||
#include "ARMInstrInfo.h"
|
||||
#include "MCTargetDesc/ARMAddressingModes.h"
|
||||
#include "MCTargetDesc/ARMBaseInfo.h"
|
||||
#include "MCTargetDesc/ARMFixupKinds.h"
|
||||
#include "MCTargetDesc/ARMMCExpr.h"
|
||||
#include "MCTargetDesc/ARMMCTargetDesc.h"
|
||||
#include "llvm/MC/MCCodeEmitter.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCInst.h"
|
||||
#include "llvm/MC/MCInstrInfo.h"
|
||||
#include "llvm/MC/MCRegisterInfo.h"
|
||||
#include "llvm/MC/MCSubtargetInfo.h"
|
||||
#include "llvm/ADT/APFloat.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
|
@ -285,9 +286,6 @@ public:
|
|||
unsigned getMsbOpValue(const MCInst &MI, unsigned Op,
|
||||
SmallVectorImpl<MCFixup> &Fixups) const;
|
||||
|
||||
unsigned getSsatBitPosValue(const MCInst &MI, unsigned Op,
|
||||
SmallVectorImpl<MCFixup> &Fixups) const;
|
||||
|
||||
unsigned getRegisterListOpValue(const MCInst &MI, unsigned Op,
|
||||
SmallVectorImpl<MCFixup> &Fixups) const;
|
||||
unsigned getAddrMode6AddressOpValue(const MCInst &MI, unsigned Op,
|
||||
|
@ -1170,6 +1168,11 @@ getMsbOpValue(const MCInst &MI, unsigned Op,
|
|||
return msb;
|
||||
}
|
||||
|
||||
namespace llvm {
|
||||
// FIXME: TableGen this?
|
||||
extern MCRegisterClass ARMMCRegisterClasses[]; // In ARMGenRegisterInfo.inc.
|
||||
}
|
||||
|
||||
unsigned ARMMCCodeEmitter::
|
||||
getRegisterListOpValue(const MCInst &MI, unsigned Op,
|
||||
SmallVectorImpl<MCFixup> &Fixups) const {
|
||||
|
@ -1180,8 +1183,8 @@ getRegisterListOpValue(const MCInst &MI, unsigned Op,
|
|||
// LDM/STM:
|
||||
// {15-0} = Bitfield of GPRs.
|
||||
unsigned Reg = MI.getOperand(Op).getReg();
|
||||
bool SPRRegs = ARM::SPRRegClass.contains(Reg);
|
||||
bool DPRRegs = ARM::DPRRegClass.contains(Reg);
|
||||
bool SPRRegs = llvm::ARMMCRegisterClasses[ARM::SPRRegClassID].contains(Reg);
|
||||
bool DPRRegs = llvm::ARMMCRegisterClasses[ARM::DPRRegClassID].contains(Reg);
|
||||
|
||||
unsigned Binary = 0;
|
||||
|
|
@ -15,8 +15,10 @@
|
|||
#include "ARMMCAsmInfo.h"
|
||||
#include "llvm/MC/MCInstrInfo.h"
|
||||
#include "llvm/MC/MCRegisterInfo.h"
|
||||
#include "llvm/MC/MCStreamer.h"
|
||||
#include "llvm/MC/MCSubtargetInfo.h"
|
||||
#include "llvm/Target/TargetRegistry.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
|
||||
#define GET_REGINFO_MC_DESC
|
||||
#include "ARMGenRegisterInfo.inc"
|
||||
|
@ -119,8 +121,8 @@ static MCAsmInfo *createARMMCAsmInfo(const Target &T, StringRef TT) {
|
|||
return new ARMELFMCAsmInfo();
|
||||
}
|
||||
|
||||
MCCodeGenInfo *createARMMCCodeGenInfo(StringRef TT, Reloc::Model RM,
|
||||
CodeModel::Model CM) {
|
||||
static MCCodeGenInfo *createARMMCCodeGenInfo(StringRef TT, Reloc::Model RM,
|
||||
CodeModel::Model CM) {
|
||||
MCCodeGenInfo *X = new MCCodeGenInfo();
|
||||
if (RM == Reloc::Default)
|
||||
RM = Reloc::DynamicNoPIC;
|
||||
|
@ -128,6 +130,27 @@ MCCodeGenInfo *createARMMCCodeGenInfo(StringRef TT, Reloc::Model RM,
|
|||
return X;
|
||||
}
|
||||
|
||||
// This is duplicated code. Refactor this.
|
||||
static MCStreamer *createMCStreamer(const Target &T, const std::string &TT,
|
||||
MCContext &Ctx, TargetAsmBackend &TAB,
|
||||
raw_ostream &OS,
|
||||
MCCodeEmitter *Emitter,
|
||||
bool RelaxAll,
|
||||
bool NoExecStack) {
|
||||
Triple TheTriple(TT);
|
||||
|
||||
if (TheTriple.isOSDarwin())
|
||||
return createMachOStreamer(Ctx, TAB, OS, Emitter, RelaxAll);
|
||||
|
||||
if (TheTriple.isOSWindows()) {
|
||||
llvm_unreachable("ARM does not support Windows COFF format");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return createELFStreamer(Ctx, TAB, OS, Emitter, RelaxAll, NoExecStack);
|
||||
}
|
||||
|
||||
|
||||
// Force static initialization.
|
||||
extern "C" void LLVMInitializeARMTargetMC() {
|
||||
// Register the MC asm info.
|
||||
|
@ -151,4 +174,16 @@ extern "C" void LLVMInitializeARMTargetMC() {
|
|||
ARM_MC::createARMMCSubtargetInfo);
|
||||
TargetRegistry::RegisterMCSubtargetInfo(TheThumbTarget,
|
||||
ARM_MC::createARMMCSubtargetInfo);
|
||||
|
||||
// Register the MC Code Emitter
|
||||
TargetRegistry::RegisterCodeEmitter(TheARMTarget, createARMMCCodeEmitter);
|
||||
TargetRegistry::RegisterCodeEmitter(TheThumbTarget, createARMMCCodeEmitter);
|
||||
|
||||
// Register the asm backend.
|
||||
TargetRegistry::RegisterAsmBackend(TheARMTarget, createARMAsmBackend);
|
||||
TargetRegistry::RegisterAsmBackend(TheThumbTarget, createARMAsmBackend);
|
||||
|
||||
// Register the object streamer.
|
||||
TargetRegistry::RegisterObjectStreamer(TheARMTarget, createMCStreamer);
|
||||
TargetRegistry::RegisterObjectStreamer(TheThumbTarget, createMCStreamer);
|
||||
}
|
||||
|
|
|
@ -17,9 +17,15 @@
|
|||
#include <string>
|
||||
|
||||
namespace llvm {
|
||||
class MCCodeEmitter;
|
||||
class MCContext;
|
||||
class MCInstrInfo;
|
||||
class MCObjectWriter;
|
||||
class MCSubtargetInfo;
|
||||
class Target;
|
||||
class StringRef;
|
||||
class Target;
|
||||
class TargetAsmBackend;
|
||||
class raw_ostream;
|
||||
|
||||
extern Target TheARMTarget, TheThumbTarget;
|
||||
|
||||
|
@ -33,6 +39,18 @@ namespace ARM_MC {
|
|||
StringRef FS);
|
||||
}
|
||||
|
||||
MCCodeEmitter *createARMMCCodeEmitter(const MCInstrInfo &MCII,
|
||||
const MCSubtargetInfo &STI,
|
||||
MCContext &Ctx);
|
||||
|
||||
TargetAsmBackend *createARMAsmBackend(const Target&, const std::string &);
|
||||
|
||||
/// createARMMachObjectWriter - Construct an ARM Mach-O object writer.
|
||||
MCObjectWriter *createARMMachObjectWriter(raw_ostream &OS,
|
||||
bool Is64Bit,
|
||||
uint32_t CPUType,
|
||||
uint32_t CPUSubtype);
|
||||
|
||||
} // End llvm namespace
|
||||
|
||||
// Defines symbolic names for ARM registers. This defines a mapping from
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "ARM.h"
|
||||
#include "ARMFixupKinds.h"
|
||||
#include "MCTargetDesc/ARMBaseInfo.h"
|
||||
#include "MCTargetDesc/ARMFixupKinds.h"
|
||||
#include "llvm/ADT/Twine.h"
|
||||
#include "llvm/MC/MCAssembler.h"
|
||||
#include "llvm/MC/MCAsmLayout.h"
|
|
@ -1,7 +1,10 @@
|
|||
add_llvm_library(LLVMARMDesc
|
||||
ARMAsmBackend.cpp
|
||||
ARMMCTargetDesc.cpp
|
||||
ARMMCAsmInfo.cpp
|
||||
ARMMCCodeEmitter.cpp
|
||||
ARMMCExpr.cpp
|
||||
ARMMachObjectWriter.cpp
|
||||
)
|
||||
|
||||
# Hack: we need to include 'main' target directory to grab private headers
|
||||
|
|
Loading…
Reference in New Issue