mirror of
https://github.com/RPCS3/llvm.git
synced 2025-03-05 17:18:55 +00:00
Move some parts of TargetAsmInfo down to MCAsmInfo. This is not the greatest
solution but it is a small step towards removing the horror that is TargetAsmInfo. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135237 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
833ce06c8f
commit
1be0e271a0
@ -37,6 +37,18 @@ namespace llvm {
|
|||||||
//===------------------------------------------------------------------===//
|
//===------------------------------------------------------------------===//
|
||||||
// Properties to be set by the target writer, used to configure asm printer.
|
// Properties to be set by the target writer, used to configure asm printer.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
/// PointerSize - Pointer size in bytes.
|
||||||
|
/// Default is 4.
|
||||||
|
unsigned PointerSize;
|
||||||
|
|
||||||
|
/// IsLittleEndian - True if target is little endian.
|
||||||
|
/// Default is true.
|
||||||
|
bool IsLittleEndian;
|
||||||
|
|
||||||
|
/// StackGrowsUp - True if target stack grow up.
|
||||||
|
/// Default is false.
|
||||||
|
bool StackGrowsUp;
|
||||||
|
|
||||||
/// HasSubsectionsViaSymbols - True if this target has the MachO
|
/// HasSubsectionsViaSymbols - True if this target has the MachO
|
||||||
/// .subsections_via_symbols directive.
|
/// .subsections_via_symbols directive.
|
||||||
@ -300,6 +312,21 @@ namespace llvm {
|
|||||||
static unsigned getSLEB128Size(int Value);
|
static unsigned getSLEB128Size(int Value);
|
||||||
static unsigned getULEB128Size(unsigned Value);
|
static unsigned getULEB128Size(unsigned Value);
|
||||||
|
|
||||||
|
/// getPointerSize - Get the pointer size in bytes.
|
||||||
|
unsigned getPointerSize() const {
|
||||||
|
return PointerSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// islittleendian - True if the target is little endian.
|
||||||
|
bool isLittleEndian() const {
|
||||||
|
return IsLittleEndian;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// isStackGrowthDirectionUp - True if target stack grow up.
|
||||||
|
bool isStackGrowthDirectionUp() const {
|
||||||
|
return StackGrowsUp;
|
||||||
|
}
|
||||||
|
|
||||||
bool hasSubsectionsViaSymbols() const { return HasSubsectionsViaSymbols; }
|
bool hasSubsectionsViaSymbols() const { return HasSubsectionsViaSymbols; }
|
||||||
|
|
||||||
// Data directive accessors.
|
// Data directive accessors.
|
||||||
|
@ -28,9 +28,6 @@ namespace llvm {
|
|||||||
class TargetLoweringObjectFile;
|
class TargetLoweringObjectFile;
|
||||||
|
|
||||||
class TargetAsmInfo {
|
class TargetAsmInfo {
|
||||||
unsigned PointerSize;
|
|
||||||
bool IsLittleEndian;
|
|
||||||
TargetFrameLowering::StackDirection StackDir;
|
|
||||||
std::vector<MachineMove> InitialFrameState;
|
std::vector<MachineMove> InitialFrameState;
|
||||||
const TargetRegisterInfo *TRI;
|
const TargetRegisterInfo *TRI;
|
||||||
const TargetFrameLowering *TFI;
|
const TargetFrameLowering *TFI;
|
||||||
@ -39,20 +36,6 @@ class TargetAsmInfo {
|
|||||||
public:
|
public:
|
||||||
explicit TargetAsmInfo(const TargetMachine &TM);
|
explicit TargetAsmInfo(const TargetMachine &TM);
|
||||||
|
|
||||||
/// getPointerSize - Get the pointer size in bytes.
|
|
||||||
unsigned getPointerSize() const {
|
|
||||||
return PointerSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// islittleendian - True if the target is little endian.
|
|
||||||
bool isLittleEndian() const {
|
|
||||||
return IsLittleEndian;
|
|
||||||
}
|
|
||||||
|
|
||||||
TargetFrameLowering::StackDirection getStackGrowthDirection() const {
|
|
||||||
return StackDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
const MCSection *getDwarfLineSection() const {
|
const MCSection *getDwarfLineSection() const {
|
||||||
return TLOF->getDwarfLineSection();
|
return TLOF->getDwarfLineSection();
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,9 @@
|
|||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
MCAsmInfo::MCAsmInfo() {
|
MCAsmInfo::MCAsmInfo() {
|
||||||
|
PointerSize = 4;
|
||||||
|
IsLittleEndian = true;
|
||||||
|
StackGrowsUp = false;
|
||||||
HasSubsectionsViaSymbols = false;
|
HasSubsectionsViaSymbols = false;
|
||||||
HasMachoZeroFillDirective = false;
|
HasMachoZeroFillDirective = false;
|
||||||
HasMachoTBSSDirective = false;
|
HasMachoTBSSDirective = false;
|
||||||
|
@ -604,7 +604,7 @@ void MCAsmStreamer::EmitValueImpl(const MCExpr *Value, unsigned Size,
|
|||||||
int64_t IntValue;
|
int64_t IntValue;
|
||||||
if (!Value->EvaluateAsAbsolute(IntValue))
|
if (!Value->EvaluateAsAbsolute(IntValue))
|
||||||
report_fatal_error("Don't know how to emit this value.");
|
report_fatal_error("Don't know how to emit this value.");
|
||||||
if (getContext().getTargetAsmInfo().isLittleEndian()) {
|
if (getContext().getAsmInfo().isLittleEndian()) {
|
||||||
EmitIntValue((uint32_t)(IntValue >> 0 ), 4, AddrSpace);
|
EmitIntValue((uint32_t)(IntValue >> 0 ), 4, AddrSpace);
|
||||||
EmitIntValue((uint32_t)(IntValue >> 32), 4, AddrSpace);
|
EmitIntValue((uint32_t)(IntValue >> 32), 4, AddrSpace);
|
||||||
} else {
|
} else {
|
||||||
@ -827,8 +827,8 @@ void MCAsmStreamer::EmitCFIEndProc() {
|
|||||||
|
|
||||||
void MCAsmStreamer::EmitRegisterName(int64_t Register) {
|
void MCAsmStreamer::EmitRegisterName(int64_t Register) {
|
||||||
if (InstPrinter && !MAI.useDwarfRegNumForCFI()) {
|
if (InstPrinter && !MAI.useDwarfRegNumForCFI()) {
|
||||||
const TargetAsmInfo &asmInfo = getContext().getTargetAsmInfo();
|
const TargetAsmInfo &TAI = getContext().getTargetAsmInfo();
|
||||||
unsigned LLVMRegister = asmInfo.getLLVMRegNum(Register, true);
|
unsigned LLVMRegister = TAI.getLLVMRegNum(Register, true);
|
||||||
InstPrinter->printRegName(OS, LLVMRegister);
|
InstPrinter->printRegName(OS, LLVMRegister);
|
||||||
} else {
|
} else {
|
||||||
OS << Register;
|
OS << Register;
|
||||||
@ -1124,7 +1124,7 @@ void MCAsmStreamer::AddEncodingComment(const MCInst &Inst) {
|
|||||||
unsigned Bit = (Code[i] >> j) & 1;
|
unsigned Bit = (Code[i] >> j) & 1;
|
||||||
|
|
||||||
unsigned FixupBit;
|
unsigned FixupBit;
|
||||||
if (getContext().getTargetAsmInfo().isLittleEndian())
|
if (getContext().getAsmInfo().isLittleEndian())
|
||||||
FixupBit = i * 8 + j;
|
FixupBit = i * 8 + j;
|
||||||
else
|
else
|
||||||
FixupBit = i * 8 + (7-j);
|
FixupBit = i * 8 + (7-j);
|
||||||
|
@ -172,7 +172,7 @@ static inline void EmitDwarfLineTable(MCStreamer *MCOS,
|
|||||||
// At this point we want to emit/create the sequence to encode the delta in
|
// At this point we want to emit/create the sequence to encode the delta in
|
||||||
// line numbers and the increment of the address from the previous Label
|
// line numbers and the increment of the address from the previous Label
|
||||||
// and the current Label.
|
// and the current Label.
|
||||||
const TargetAsmInfo &asmInfo = MCOS->getContext().getTargetAsmInfo();
|
const MCAsmInfo &asmInfo = MCOS->getContext().getAsmInfo();
|
||||||
MCOS->EmitDwarfAdvanceLineAddr(LineDelta, LastLabel, Label,
|
MCOS->EmitDwarfAdvanceLineAddr(LineDelta, LastLabel, Label,
|
||||||
asmInfo.getPointerSize());
|
asmInfo.getPointerSize());
|
||||||
|
|
||||||
@ -198,7 +198,7 @@ static inline void EmitDwarfLineTable(MCStreamer *MCOS,
|
|||||||
// Switch back the the dwarf line section.
|
// Switch back the the dwarf line section.
|
||||||
MCOS->SwitchSection(context.getTargetAsmInfo().getDwarfLineSection());
|
MCOS->SwitchSection(context.getTargetAsmInfo().getDwarfLineSection());
|
||||||
|
|
||||||
const TargetAsmInfo &asmInfo = MCOS->getContext().getTargetAsmInfo();
|
const MCAsmInfo &asmInfo = MCOS->getContext().getAsmInfo();
|
||||||
MCOS->EmitDwarfAdvanceLineAddr(INT64_MAX, LastLabel, SectionEnd,
|
MCOS->EmitDwarfAdvanceLineAddr(INT64_MAX, LastLabel, SectionEnd,
|
||||||
asmInfo.getPointerSize());
|
asmInfo.getPointerSize());
|
||||||
}
|
}
|
||||||
@ -431,25 +431,24 @@ void MCDwarfFile::dump() const {
|
|||||||
|
|
||||||
static int getDataAlignmentFactor(MCStreamer &streamer) {
|
static int getDataAlignmentFactor(MCStreamer &streamer) {
|
||||||
MCContext &context = streamer.getContext();
|
MCContext &context = streamer.getContext();
|
||||||
const TargetAsmInfo &asmInfo = context.getTargetAsmInfo();
|
const MCAsmInfo &asmInfo = context.getAsmInfo();
|
||||||
int size = asmInfo.getPointerSize();
|
int size = asmInfo.getPointerSize();
|
||||||
if (asmInfo.getStackGrowthDirection() == TargetFrameLowering::StackGrowsUp)
|
if (asmInfo.isStackGrowthDirectionUp())
|
||||||
return size;
|
return size;
|
||||||
else
|
else
|
||||||
return -size;
|
return -size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned getSizeForEncoding(MCStreamer &streamer,
|
static unsigned getSizeForEncoding(MCStreamer &streamer,
|
||||||
unsigned symbolEncoding) {
|
unsigned symbolEncoding) {
|
||||||
MCContext &context = streamer.getContext();
|
MCContext &context = streamer.getContext();
|
||||||
const TargetAsmInfo &asmInfo = context.getTargetAsmInfo();
|
|
||||||
unsigned format = symbolEncoding & 0x0f;
|
unsigned format = symbolEncoding & 0x0f;
|
||||||
switch (format) {
|
switch (format) {
|
||||||
default:
|
default:
|
||||||
assert(0 && "Unknown Encoding");
|
assert(0 && "Unknown Encoding");
|
||||||
case dwarf::DW_EH_PE_absptr:
|
case dwarf::DW_EH_PE_absptr:
|
||||||
case dwarf::DW_EH_PE_signed:
|
case dwarf::DW_EH_PE_signed:
|
||||||
return asmInfo.getPointerSize();
|
return context.getAsmInfo().getPointerSize();
|
||||||
case dwarf::DW_EH_PE_udata2:
|
case dwarf::DW_EH_PE_udata2:
|
||||||
case dwarf::DW_EH_PE_sdata2:
|
case dwarf::DW_EH_PE_sdata2:
|
||||||
return 2;
|
return 2;
|
||||||
@ -486,11 +485,11 @@ static void EmitPersonality(MCStreamer &streamer, const MCSymbol &symbol,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const MachineLocation TranslateMachineLocation(
|
static const MachineLocation TranslateMachineLocation(
|
||||||
const TargetAsmInfo &AsmInfo,
|
const TargetAsmInfo &TAI,
|
||||||
const MachineLocation &Loc) {
|
const MachineLocation &Loc) {
|
||||||
unsigned Reg = Loc.getReg() == MachineLocation::VirtualFP ?
|
unsigned Reg = Loc.getReg() == MachineLocation::VirtualFP ?
|
||||||
MachineLocation::VirtualFP :
|
MachineLocation::VirtualFP :
|
||||||
unsigned(AsmInfo.getDwarfRegNum(Loc.getReg(), true));
|
unsigned(TAI.getDwarfRegNum(Loc.getReg(), true));
|
||||||
const MachineLocation &NewLoc = Loc.isReg() ?
|
const MachineLocation &NewLoc = Loc.isReg() ?
|
||||||
MachineLocation(Reg) : MachineLocation(Reg, Loc.getOffset());
|
MachineLocation(Reg) : MachineLocation(Reg, Loc.getOffset());
|
||||||
return NewLoc;
|
return NewLoc;
|
||||||
@ -772,11 +771,11 @@ const MCSymbol &FrameEmitterImpl::EmitCIE(MCStreamer &streamer,
|
|||||||
const MCSymbol *lsda,
|
const MCSymbol *lsda,
|
||||||
unsigned lsdaEncoding) {
|
unsigned lsdaEncoding) {
|
||||||
MCContext &context = streamer.getContext();
|
MCContext &context = streamer.getContext();
|
||||||
const TargetAsmInfo &asmInfo = context.getTargetAsmInfo();
|
const TargetAsmInfo &TAI = context.getTargetAsmInfo();
|
||||||
bool verboseAsm = streamer.isVerboseAsm();
|
bool verboseAsm = streamer.isVerboseAsm();
|
||||||
|
|
||||||
MCSymbol *sectionStart;
|
MCSymbol *sectionStart;
|
||||||
if (asmInfo.isFunctionEHFrameSymbolPrivate() || !IsEH)
|
if (TAI.isFunctionEHFrameSymbolPrivate() || !IsEH)
|
||||||
sectionStart = context.CreateTempSymbol();
|
sectionStart = context.CreateTempSymbol();
|
||||||
else
|
else
|
||||||
sectionStart = context.GetOrCreateSymbol(Twine("EH_frame") + Twine(CIENum));
|
sectionStart = context.GetOrCreateSymbol(Twine("EH_frame") + Twine(CIENum));
|
||||||
@ -825,7 +824,7 @@ const MCSymbol &FrameEmitterImpl::EmitCIE(MCStreamer &streamer,
|
|||||||
|
|
||||||
// Return Address Register
|
// Return Address Register
|
||||||
if (verboseAsm) streamer.AddComment("CIE Return Address Column");
|
if (verboseAsm) streamer.AddComment("CIE Return Address Column");
|
||||||
streamer.EmitULEB128IntValue(asmInfo.getDwarfRARegNum(true));
|
streamer.EmitULEB128IntValue(TAI.getDwarfRARegNum(true));
|
||||||
|
|
||||||
// Augmentation Data Length (optional)
|
// Augmentation Data Length (optional)
|
||||||
|
|
||||||
@ -859,21 +858,21 @@ const MCSymbol &FrameEmitterImpl::EmitCIE(MCStreamer &streamer,
|
|||||||
EmitEncodingByte(streamer, lsdaEncoding, "LSDA Encoding");
|
EmitEncodingByte(streamer, lsdaEncoding, "LSDA Encoding");
|
||||||
|
|
||||||
// Encoding of the FDE pointers
|
// Encoding of the FDE pointers
|
||||||
EmitEncodingByte(streamer, asmInfo.getFDEEncoding(UsingCFI),
|
EmitEncodingByte(streamer, TAI.getFDEEncoding(UsingCFI),
|
||||||
"FDE Encoding");
|
"FDE Encoding");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initial Instructions
|
// Initial Instructions
|
||||||
|
|
||||||
const std::vector<MachineMove> &Moves = asmInfo.getInitialFrameState();
|
const std::vector<MachineMove> &Moves = TAI.getInitialFrameState();
|
||||||
std::vector<MCCFIInstruction> Instructions;
|
std::vector<MCCFIInstruction> Instructions;
|
||||||
|
|
||||||
for (int i = 0, n = Moves.size(); i != n; ++i) {
|
for (int i = 0, n = Moves.size(); i != n; ++i) {
|
||||||
MCSymbol *Label = Moves[i].getLabel();
|
MCSymbol *Label = Moves[i].getLabel();
|
||||||
const MachineLocation &Dst =
|
const MachineLocation &Dst =
|
||||||
TranslateMachineLocation(asmInfo, Moves[i].getDestination());
|
TranslateMachineLocation(TAI, Moves[i].getDestination());
|
||||||
const MachineLocation &Src =
|
const MachineLocation &Src =
|
||||||
TranslateMachineLocation(asmInfo, Moves[i].getSource());
|
TranslateMachineLocation(TAI, Moves[i].getSource());
|
||||||
MCCFIInstruction Inst(Label, Dst, Src);
|
MCCFIInstruction Inst(Label, Dst, Src);
|
||||||
Instructions.push_back(Inst);
|
Instructions.push_back(Inst);
|
||||||
}
|
}
|
||||||
@ -881,7 +880,8 @@ const MCSymbol &FrameEmitterImpl::EmitCIE(MCStreamer &streamer,
|
|||||||
EmitCFIInstructions(streamer, Instructions, NULL);
|
EmitCFIInstructions(streamer, Instructions, NULL);
|
||||||
|
|
||||||
// Padding
|
// Padding
|
||||||
streamer.EmitValueToAlignment(IsEH ? 4 : asmInfo.getPointerSize());
|
streamer.EmitValueToAlignment(IsEH
|
||||||
|
? 4 : context.getAsmInfo().getPointerSize());
|
||||||
|
|
||||||
streamer.EmitLabel(sectionEnd);
|
streamer.EmitLabel(sectionEnd);
|
||||||
return *sectionStart;
|
return *sectionStart;
|
||||||
@ -893,10 +893,10 @@ MCSymbol *FrameEmitterImpl::EmitFDE(MCStreamer &streamer,
|
|||||||
MCContext &context = streamer.getContext();
|
MCContext &context = streamer.getContext();
|
||||||
MCSymbol *fdeStart = context.CreateTempSymbol();
|
MCSymbol *fdeStart = context.CreateTempSymbol();
|
||||||
MCSymbol *fdeEnd = context.CreateTempSymbol();
|
MCSymbol *fdeEnd = context.CreateTempSymbol();
|
||||||
const TargetAsmInfo &TAsmInfo = context.getTargetAsmInfo();
|
const TargetAsmInfo &TAI = context.getTargetAsmInfo();
|
||||||
bool verboseAsm = streamer.isVerboseAsm();
|
bool verboseAsm = streamer.isVerboseAsm();
|
||||||
|
|
||||||
if (!TAsmInfo.isFunctionEHFrameSymbolPrivate() && IsEH) {
|
if (!TAI.isFunctionEHFrameSymbolPrivate() && IsEH) {
|
||||||
MCSymbol *EHSym =
|
MCSymbol *EHSym =
|
||||||
context.GetOrCreateSymbol(frame.Function->getName() + Twine(".eh"));
|
context.GetOrCreateSymbol(frame.Function->getName() + Twine(".eh"));
|
||||||
streamer.EmitEHSymAttributes(frame.Function, EHSym);
|
streamer.EmitEHSymAttributes(frame.Function, EHSym);
|
||||||
@ -925,7 +925,7 @@ MCSymbol *FrameEmitterImpl::EmitFDE(MCStreamer &streamer,
|
|||||||
streamer.EmitSymbolValue(&cieStart, 4);
|
streamer.EmitSymbolValue(&cieStart, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned fdeEncoding = TAsmInfo.getFDEEncoding(UsingCFI);
|
unsigned fdeEncoding = TAI.getFDEEncoding(UsingCFI);
|
||||||
unsigned size = getSizeForEncoding(streamer, fdeEncoding);
|
unsigned size = getSizeForEncoding(streamer, fdeEncoding);
|
||||||
|
|
||||||
// PC Begin
|
// PC Begin
|
||||||
@ -1011,9 +1011,9 @@ void MCDwarfFrameEmitter::Emit(MCStreamer &Streamer,
|
|||||||
bool UsingCFI,
|
bool UsingCFI,
|
||||||
bool IsEH) {
|
bool IsEH) {
|
||||||
MCContext &Context = Streamer.getContext();
|
MCContext &Context = Streamer.getContext();
|
||||||
const TargetAsmInfo &AsmInfo = Context.getTargetAsmInfo();
|
const TargetAsmInfo &TAI = Context.getTargetAsmInfo();
|
||||||
const MCSection &Section = IsEH ? *AsmInfo.getEHFrameSection() :
|
const MCSection &Section = IsEH ? *TAI.getEHFrameSection() :
|
||||||
*AsmInfo.getDwarfFrameSection();
|
*TAI.getDwarfFrameSection();
|
||||||
Streamer.SwitchSection(&Section);
|
Streamer.SwitchSection(&Section);
|
||||||
MCSymbol *SectionStart = Context.CreateTempSymbol();
|
MCSymbol *SectionStart = Context.CreateTempSymbol();
|
||||||
Streamer.EmitLabel(SectionStart);
|
Streamer.EmitLabel(SectionStart);
|
||||||
@ -1025,7 +1025,7 @@ void MCDwarfFrameEmitter::Emit(MCStreamer &Streamer,
|
|||||||
const MCSymbol *DummyDebugKey = NULL;
|
const MCSymbol *DummyDebugKey = NULL;
|
||||||
for (unsigned i = 0, n = Streamer.getNumFrameInfos(); i < n; ++i) {
|
for (unsigned i = 0, n = Streamer.getNumFrameInfos(); i < n; ++i) {
|
||||||
const MCDwarfFrameInfo &Frame = Streamer.getFrameInfo(i);
|
const MCDwarfFrameInfo &Frame = Streamer.getFrameInfo(i);
|
||||||
if (IsEH && AsmInfo.getCompactUnwindSection() &&
|
if (IsEH && TAI.getCompactUnwindSection() &&
|
||||||
Emitter.EmitCompactUnwind(Streamer, Frame)) {
|
Emitter.EmitCompactUnwind(Streamer, Frame)) {
|
||||||
FDEEnd = NULL;
|
FDEEnd = NULL;
|
||||||
continue;
|
continue;
|
||||||
@ -1045,7 +1045,7 @@ void MCDwarfFrameEmitter::Emit(MCStreamer &Streamer,
|
|||||||
Streamer.EmitLabel(FDEEnd);
|
Streamer.EmitLabel(FDEEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
Streamer.EmitValueToAlignment(AsmInfo.getPointerSize());
|
Streamer.EmitValueToAlignment(Context.getAsmInfo().getPointerSize());
|
||||||
if (FDEEnd)
|
if (FDEEnd)
|
||||||
Streamer.EmitLabel(FDEEnd);
|
Streamer.EmitLabel(FDEEnd);
|
||||||
}
|
}
|
||||||
|
@ -401,14 +401,14 @@ bool COFFAsmParser::ParseAtUnwindOrAtExcept(bool &unwind, bool &except) {
|
|||||||
bool COFFAsmParser::ParseSEHRegisterNumber(unsigned &RegNo) {
|
bool COFFAsmParser::ParseSEHRegisterNumber(unsigned &RegNo) {
|
||||||
SMLoc startLoc = getLexer().getLoc();
|
SMLoc startLoc = getLexer().getLoc();
|
||||||
if (getLexer().is(AsmToken::Percent)) {
|
if (getLexer().is(AsmToken::Percent)) {
|
||||||
const TargetAsmInfo &asmInfo = getContext().getTargetAsmInfo();
|
const TargetAsmInfo &TAI = getContext().getTargetAsmInfo();
|
||||||
SMLoc endLoc;
|
SMLoc endLoc;
|
||||||
unsigned LLVMRegNo;
|
unsigned LLVMRegNo;
|
||||||
if (getParser().getTargetParser().ParseRegister(LLVMRegNo,startLoc,endLoc))
|
if (getParser().getTargetParser().ParseRegister(LLVMRegNo,startLoc,endLoc))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Check that this is a non-volatile register.
|
// Check that this is a non-volatile register.
|
||||||
const unsigned *NVRegs = asmInfo.getCalleeSavedRegs();
|
const unsigned *NVRegs = TAI.getCalleeSavedRegs();
|
||||||
unsigned i;
|
unsigned i;
|
||||||
for (i = 0; NVRegs[i] != 0; ++i)
|
for (i = 0; NVRegs[i] != 0; ++i)
|
||||||
if (NVRegs[i] == LLVMRegNo)
|
if (NVRegs[i] == LLVMRegNo)
|
||||||
@ -416,7 +416,7 @@ bool COFFAsmParser::ParseSEHRegisterNumber(unsigned &RegNo) {
|
|||||||
if (NVRegs[i] == 0)
|
if (NVRegs[i] == 0)
|
||||||
return Error(startLoc, "expected non-volatile register");
|
return Error(startLoc, "expected non-volatile register");
|
||||||
|
|
||||||
int SEHRegNo = asmInfo.getSEHRegNum(LLVMRegNo);
|
int SEHRegNo = TAI.getSEHRegNum(LLVMRegNo);
|
||||||
if (SEHRegNo < 0)
|
if (SEHRegNo < 0)
|
||||||
return Error(startLoc,"register can't be represented in SEH unwind info");
|
return Error(startLoc,"register can't be represented in SEH unwind info");
|
||||||
RegNo = SEHRegNo;
|
RegNo = SEHRegNo;
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
#include "llvm/MC/MCSymbol.h"
|
#include "llvm/MC/MCSymbol.h"
|
||||||
#include "llvm/Support/ErrorHandling.h"
|
#include "llvm/Support/ErrorHandling.h"
|
||||||
#include "llvm/Support/raw_ostream.h"
|
#include "llvm/Support/raw_ostream.h"
|
||||||
#include "llvm/Target/TargetAsmInfo.h"
|
|
||||||
#include "llvm/ADT/SmallString.h"
|
#include "llvm/ADT/SmallString.h"
|
||||||
#include "llvm/ADT/Twine.h"
|
#include "llvm/ADT/Twine.h"
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
@ -81,7 +80,7 @@ void MCStreamer::EmitIntValue(uint64_t Value, unsigned Size,
|
|||||||
assert((isUIntN(8 * Size, Value) || isIntN(8 * Size, Value)) &&
|
assert((isUIntN(8 * Size, Value) || isIntN(8 * Size, Value)) &&
|
||||||
"Invalid size");
|
"Invalid size");
|
||||||
char buf[8];
|
char buf[8];
|
||||||
const bool isLittleEndian = Context.getTargetAsmInfo().isLittleEndian();
|
const bool isLittleEndian = Context.getAsmInfo().isLittleEndian();
|
||||||
for (unsigned i = 0; i != Size; ++i) {
|
for (unsigned i = 0; i != Size; ++i) {
|
||||||
unsigned index = isLittleEndian ? i : (Size - i - 1);
|
unsigned index = isLittleEndian ? i : (Size - i - 1);
|
||||||
buf[i] = uint8_t(Value >> (index * 8));
|
buf[i] = uint8_t(Value >> (index * 8));
|
||||||
|
@ -225,9 +225,9 @@ void MCWin64EHUnwindEmitter::EmitUnwindInfo(MCStreamer &streamer,
|
|||||||
// Switch sections (the static function above is meant to be called from
|
// Switch sections (the static function above is meant to be called from
|
||||||
// here and from Emit().
|
// here and from Emit().
|
||||||
MCContext &context = streamer.getContext();
|
MCContext &context = streamer.getContext();
|
||||||
const TargetAsmInfo &asmInfo = context.getTargetAsmInfo();
|
const TargetAsmInfo &TAI = context.getTargetAsmInfo();
|
||||||
const MCSection *xdataSect =
|
const MCSection *xdataSect =
|
||||||
asmInfo.getWin64EHTableSection(GetSectionSuffix(info->Function));
|
TAI.getWin64EHTableSection(GetSectionSuffix(info->Function));
|
||||||
streamer.SwitchSection(xdataSect);
|
streamer.SwitchSection(xdataSect);
|
||||||
|
|
||||||
llvm::EmitUnwindInfo(streamer, info);
|
llvm::EmitUnwindInfo(streamer, info);
|
||||||
@ -236,11 +236,11 @@ void MCWin64EHUnwindEmitter::EmitUnwindInfo(MCStreamer &streamer,
|
|||||||
void MCWin64EHUnwindEmitter::Emit(MCStreamer &streamer) {
|
void MCWin64EHUnwindEmitter::Emit(MCStreamer &streamer) {
|
||||||
MCContext &context = streamer.getContext();
|
MCContext &context = streamer.getContext();
|
||||||
// Emit the unwind info structs first.
|
// Emit the unwind info structs first.
|
||||||
const TargetAsmInfo &asmInfo = context.getTargetAsmInfo();
|
const TargetAsmInfo &TAI = context.getTargetAsmInfo();
|
||||||
for (unsigned i = 0; i < streamer.getNumW64UnwindInfos(); ++i) {
|
for (unsigned i = 0; i < streamer.getNumW64UnwindInfos(); ++i) {
|
||||||
MCWin64EHUnwindInfo &info = streamer.getW64UnwindInfo(i);
|
MCWin64EHUnwindInfo &info = streamer.getW64UnwindInfo(i);
|
||||||
const MCSection *xdataSect =
|
const MCSection *xdataSect =
|
||||||
asmInfo.getWin64EHTableSection(GetSectionSuffix(info.Function));
|
TAI.getWin64EHTableSection(GetSectionSuffix(info.Function));
|
||||||
streamer.SwitchSection(xdataSect);
|
streamer.SwitchSection(xdataSect);
|
||||||
llvm::EmitUnwindInfo(streamer, &info);
|
llvm::EmitUnwindInfo(streamer, &info);
|
||||||
}
|
}
|
||||||
@ -248,7 +248,7 @@ void MCWin64EHUnwindEmitter::Emit(MCStreamer &streamer) {
|
|||||||
for (unsigned i = 0; i < streamer.getNumW64UnwindInfos(); ++i) {
|
for (unsigned i = 0; i < streamer.getNumW64UnwindInfos(); ++i) {
|
||||||
MCWin64EHUnwindInfo &info = streamer.getW64UnwindInfo(i);
|
MCWin64EHUnwindInfo &info = streamer.getW64UnwindInfo(i);
|
||||||
const MCSection *pdataSect =
|
const MCSection *pdataSect =
|
||||||
asmInfo.getWin64EHFuncTableSection(GetSectionSuffix(info.Function));
|
TAI.getWin64EHFuncTableSection(GetSectionSuffix(info.Function));
|
||||||
streamer.SwitchSection(pdataSect);
|
streamer.SwitchSection(pdataSect);
|
||||||
EmitRuntimeFunction(streamer, &info);
|
EmitRuntimeFunction(streamer, &info);
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,7 @@ extern "C" void LLVMInitializeARMMCRegInfo() {
|
|||||||
TargetRegistry::RegisterMCRegInfo(TheThumbTarget, createARMMCRegisterInfo);
|
TargetRegistry::RegisterMCRegInfo(TheThumbTarget, createARMMCRegisterInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
static MCAsmInfo *createMCAsmInfo(const Target &T, StringRef TT) {
|
static MCAsmInfo *createARMMCAsmInfo(const Target &T, StringRef TT) {
|
||||||
Triple TheTriple(TT);
|
Triple TheTriple(TT);
|
||||||
|
|
||||||
if (TheTriple.isOSDarwin())
|
if (TheTriple.isOSDarwin())
|
||||||
@ -139,6 +139,6 @@ static MCAsmInfo *createMCAsmInfo(const Target &T, StringRef TT) {
|
|||||||
|
|
||||||
extern "C" void LLVMInitializeARMMCAsmInfo() {
|
extern "C" void LLVMInitializeARMMCAsmInfo() {
|
||||||
// Register the target asm info.
|
// Register the target asm info.
|
||||||
RegisterMCAsmInfoFn A(TheARMTarget, createMCAsmInfo);
|
RegisterMCAsmInfoFn A(TheARMTarget, createARMMCAsmInfo);
|
||||||
RegisterMCAsmInfoFn B(TheThumbTarget, createMCAsmInfo);
|
RegisterMCAsmInfoFn B(TheThumbTarget, createARMMCAsmInfo);
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,8 @@
|
|||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
SPULinuxMCAsmInfo::SPULinuxMCAsmInfo(const Target &T, StringRef TT) {
|
SPULinuxMCAsmInfo::SPULinuxMCAsmInfo(const Target &T, StringRef TT) {
|
||||||
|
IsLittleEndian = false;
|
||||||
|
|
||||||
ZeroDirective = "\t.space\t";
|
ZeroDirective = "\t.space\t";
|
||||||
Data64bitsDirective = "\t.quad\t";
|
Data64bitsDirective = "\t.quad\t";
|
||||||
AlignmentIsInBytes = false;
|
AlignmentIsInBytes = false;
|
||||||
|
@ -15,6 +15,8 @@
|
|||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
MBlazeMCAsmInfo::MBlazeMCAsmInfo() {
|
MBlazeMCAsmInfo::MBlazeMCAsmInfo() {
|
||||||
|
IsLittleEndian = false;
|
||||||
|
StackGrowsUp = false;
|
||||||
SupportsDebugInformation = true;
|
SupportsDebugInformation = true;
|
||||||
AlignmentIsInBytes = false;
|
AlignmentIsInBytes = false;
|
||||||
PrivateGlobalPrefix = "$";
|
PrivateGlobalPrefix = "$";
|
||||||
|
@ -15,6 +15,8 @@
|
|||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
MSP430MCAsmInfo::MSP430MCAsmInfo(const Target &T, StringRef TT) {
|
MSP430MCAsmInfo::MSP430MCAsmInfo(const Target &T, StringRef TT) {
|
||||||
|
PointerSize = 2;
|
||||||
|
|
||||||
PrivateGlobalPrefix = ".L";
|
PrivateGlobalPrefix = ".L";
|
||||||
WeakRefDirective ="\t.weak\t";
|
WeakRefDirective ="\t.weak\t";
|
||||||
PCSymbol=".";
|
PCSymbol=".";
|
||||||
|
@ -12,9 +12,15 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "MipsMCAsmInfo.h"
|
#include "MipsMCAsmInfo.h"
|
||||||
|
#include "llvm/ADT/Triple.h"
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
MipsMCAsmInfo::MipsMCAsmInfo(const Target &T, StringRef TT) {
|
MipsMCAsmInfo::MipsMCAsmInfo(const Target &T, StringRef TT) {
|
||||||
|
Triple TheTriple(TT);
|
||||||
|
if (TheTriple.getArch() == Triple::mips)
|
||||||
|
IsLittleEndian = false;
|
||||||
|
|
||||||
AlignmentIsInBytes = false;
|
AlignmentIsInBytes = false;
|
||||||
Data16bitsDirective = "\t.2byte\t";
|
Data16bitsDirective = "\t.2byte\t";
|
||||||
Data32bitsDirective = "\t.4byte\t";
|
Data32bitsDirective = "\t.4byte\t";
|
||||||
|
@ -12,10 +12,15 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "PTXMCAsmInfo.h"
|
#include "PTXMCAsmInfo.h"
|
||||||
|
#include "llvm/ADT/Triple.h"
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
PTXMCAsmInfo::PTXMCAsmInfo(const Target &T, const StringRef &TT) {
|
PTXMCAsmInfo::PTXMCAsmInfo(const Target &T, const StringRef &TT) {
|
||||||
|
Triple TheTriple(TT);
|
||||||
|
if (TheTriple.getArch() == Triple::ptx64)
|
||||||
|
PointerSize = 8;
|
||||||
|
|
||||||
CommentString = "//";
|
CommentString = "//";
|
||||||
|
|
||||||
PrivateGlobalPrefix = "$L__";
|
PrivateGlobalPrefix = "$L__";
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
#include "llvm/Support/Format.h"
|
#include "llvm/Support/Format.h"
|
||||||
#include "llvm/Support/FormattedStream.h"
|
#include "llvm/Support/FormattedStream.h"
|
||||||
#include "llvm/Support/raw_ostream.h"
|
#include "llvm/Support/raw_ostream.h"
|
||||||
#include "llvm/Target/TargetAsmInfo.h"
|
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
@ -369,7 +368,7 @@ void PTXMCAsmStreamer::EmitValueImpl(const MCExpr *Value, unsigned Size,
|
|||||||
int64_t IntValue;
|
int64_t IntValue;
|
||||||
if (!Value->EvaluateAsAbsolute(IntValue))
|
if (!Value->EvaluateAsAbsolute(IntValue))
|
||||||
report_fatal_error("Don't know how to emit this value.");
|
report_fatal_error("Don't know how to emit this value.");
|
||||||
if (getContext().getTargetAsmInfo().isLittleEndian()) {
|
if (getContext().getAsmInfo().isLittleEndian()) {
|
||||||
EmitIntValue((uint32_t)(IntValue >> 0 ), 4, AddrSpace);
|
EmitIntValue((uint32_t)(IntValue >> 0 ), 4, AddrSpace);
|
||||||
EmitIntValue((uint32_t)(IntValue >> 32), 4, AddrSpace);
|
EmitIntValue((uint32_t)(IntValue >> 32), 4, AddrSpace);
|
||||||
} else {
|
} else {
|
||||||
|
@ -15,6 +15,10 @@
|
|||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
PPCMCAsmInfoDarwin::PPCMCAsmInfoDarwin(bool is64Bit) {
|
PPCMCAsmInfoDarwin::PPCMCAsmInfoDarwin(bool is64Bit) {
|
||||||
|
if (is64Bit)
|
||||||
|
PointerSize = 8;
|
||||||
|
IsLittleEndian = false;
|
||||||
|
|
||||||
PCSymbol = ".";
|
PCSymbol = ".";
|
||||||
CommentString = ";";
|
CommentString = ";";
|
||||||
ExceptionsType = ExceptionHandling::DwarfCFI;
|
ExceptionsType = ExceptionHandling::DwarfCFI;
|
||||||
|
@ -12,9 +12,16 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "SparcMCAsmInfo.h"
|
#include "SparcMCAsmInfo.h"
|
||||||
|
#include "llvm/ADT/Triple.h"
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
SparcELFMCAsmInfo::SparcELFMCAsmInfo(const Target &T, StringRef TT) {
|
SparcELFMCAsmInfo::SparcELFMCAsmInfo(const Target &T, StringRef TT) {
|
||||||
|
IsLittleEndian = false;
|
||||||
|
Triple TheTriple(TT);
|
||||||
|
if (TheTriple.getArch() == Triple::sparcv9)
|
||||||
|
PointerSize = 8;
|
||||||
|
|
||||||
Data16bitsDirective = "\t.half\t";
|
Data16bitsDirective = "\t.half\t";
|
||||||
Data32bitsDirective = "\t.word\t";
|
Data32bitsDirective = "\t.word\t";
|
||||||
Data64bitsDirective = 0; // .xword is only supported by V9.
|
Data64bitsDirective = 0; // .xword is only supported by V9.
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
SystemZMCAsmInfo::SystemZMCAsmInfo(const Target &T, StringRef TT) {
|
SystemZMCAsmInfo::SystemZMCAsmInfo(const Target &T, StringRef TT) {
|
||||||
|
IsLittleEndian = false;
|
||||||
|
PointerSize = 8;
|
||||||
PrivateGlobalPrefix = ".L";
|
PrivateGlobalPrefix = ".L";
|
||||||
WeakRefDirective = "\t.weak\t";
|
WeakRefDirective = "\t.weak\t";
|
||||||
PCSymbol = ".";
|
PCSymbol = ".";
|
||||||
|
@ -17,12 +17,7 @@ using namespace llvm;
|
|||||||
|
|
||||||
TargetAsmInfo::TargetAsmInfo(const TargetMachine &TM) {
|
TargetAsmInfo::TargetAsmInfo(const TargetMachine &TM) {
|
||||||
TLOF = &TM.getTargetLowering()->getObjFileLowering();
|
TLOF = &TM.getTargetLowering()->getObjFileLowering();
|
||||||
const TargetData &TD = *TM.getTargetData();
|
|
||||||
IsLittleEndian = TD.isLittleEndian();
|
|
||||||
PointerSize = TD.getPointerSize();
|
|
||||||
|
|
||||||
TFI = TM.getFrameLowering();
|
TFI = TM.getFrameLowering();
|
||||||
StackDir = TFI->getStackGrowthDirection();
|
|
||||||
TRI = TM.getRegisterInfo();
|
TRI = TM.getRegisterInfo();
|
||||||
TFI->getInitialFrameState(InitialFrameState);
|
TFI->getInitialFrameState(InitialFrameState);
|
||||||
}
|
}
|
||||||
|
@ -49,12 +49,14 @@ static const char *const x86_asm_table[] = {
|
|||||||
"{cc}", "cc",
|
"{cc}", "cc",
|
||||||
0,0};
|
0,0};
|
||||||
|
|
||||||
X86MCAsmInfoDarwin::X86MCAsmInfoDarwin(const Triple &Triple) {
|
X86MCAsmInfoDarwin::X86MCAsmInfoDarwin(const Triple &T) {
|
||||||
|
bool is64Bit = T.getArch() == Triple::x86_64;
|
||||||
|
if (is64Bit)
|
||||||
|
PointerSize = 8;
|
||||||
|
|
||||||
AsmTransCBE = x86_asm_table;
|
AsmTransCBE = x86_asm_table;
|
||||||
AssemblerDialect = AsmWriterFlavor;
|
AssemblerDialect = AsmWriterFlavor;
|
||||||
|
|
||||||
bool is64Bit = Triple.getArch() == Triple::x86_64;
|
|
||||||
|
|
||||||
TextAlignFillValue = 0x90;
|
TextAlignFillValue = 0x90;
|
||||||
|
|
||||||
if (!is64Bit)
|
if (!is64Bit)
|
||||||
@ -75,22 +77,14 @@ X86MCAsmInfoDarwin::X86MCAsmInfoDarwin(const Triple &Triple) {
|
|||||||
ExceptionsType = ExceptionHandling::DwarfCFI;
|
ExceptionsType = ExceptionHandling::DwarfCFI;
|
||||||
}
|
}
|
||||||
|
|
||||||
const MCExpr *
|
|
||||||
X86_64MCAsmInfoDarwin::getExprForPersonalitySymbol(const MCSymbol *Sym,
|
|
||||||
unsigned Encoding,
|
|
||||||
MCStreamer &Streamer) const {
|
|
||||||
MCContext &Context = Streamer.getContext();
|
|
||||||
const MCExpr *Res =
|
|
||||||
MCSymbolRefExpr::Create(Sym, MCSymbolRefExpr::VK_GOTPCREL, Context);
|
|
||||||
const MCExpr *Four = MCConstantExpr::Create(4, Context);
|
|
||||||
return MCBinaryExpr::CreateAdd(Res, Four, Context);
|
|
||||||
}
|
|
||||||
|
|
||||||
X86_64MCAsmInfoDarwin::X86_64MCAsmInfoDarwin(const Triple &Triple)
|
X86_64MCAsmInfoDarwin::X86_64MCAsmInfoDarwin(const Triple &Triple)
|
||||||
: X86MCAsmInfoDarwin(Triple) {
|
: X86MCAsmInfoDarwin(Triple) {
|
||||||
}
|
}
|
||||||
|
|
||||||
X86ELFMCAsmInfo::X86ELFMCAsmInfo(const Triple &T) {
|
X86ELFMCAsmInfo::X86ELFMCAsmInfo(const Triple &T) {
|
||||||
|
if (T.getArch() == Triple::x86_64)
|
||||||
|
PointerSize = 8;
|
||||||
|
|
||||||
AsmTransCBE = x86_asm_table;
|
AsmTransCBE = x86_asm_table;
|
||||||
AssemblerDialect = AsmWriterFlavor;
|
AssemblerDialect = AsmWriterFlavor;
|
||||||
|
|
||||||
@ -115,6 +109,17 @@ X86ELFMCAsmInfo::X86ELFMCAsmInfo(const Triple &T) {
|
|||||||
Data64bitsDirective = 0;
|
Data64bitsDirective = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const MCExpr *
|
||||||
|
X86_64MCAsmInfoDarwin::getExprForPersonalitySymbol(const MCSymbol *Sym,
|
||||||
|
unsigned Encoding,
|
||||||
|
MCStreamer &Streamer) const {
|
||||||
|
MCContext &Context = Streamer.getContext();
|
||||||
|
const MCExpr *Res =
|
||||||
|
MCSymbolRefExpr::Create(Sym, MCSymbolRefExpr::VK_GOTPCREL, Context);
|
||||||
|
const MCExpr *Four = MCConstantExpr::Create(4, Context);
|
||||||
|
return MCBinaryExpr::CreateAdd(Res, Four, Context);
|
||||||
|
}
|
||||||
|
|
||||||
const MCSection *X86ELFMCAsmInfo::
|
const MCSection *X86ELFMCAsmInfo::
|
||||||
getNonexecutableStackSection(MCContext &Ctx) const {
|
getNonexecutableStackSection(MCContext &Ctx) const {
|
||||||
return Ctx.getELFSection(".note.GNU-stack", ELF::SHT_PROGBITS,
|
return Ctx.getELFSection(".note.GNU-stack", ELF::SHT_PROGBITS,
|
||||||
|
@ -162,7 +162,7 @@ extern "C" void LLVMInitializeX86MCRegInfo() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static MCAsmInfo *createMCAsmInfo(const Target &T, StringRef TT) {
|
static MCAsmInfo *createX86MCAsmInfo(const Target &T, StringRef TT) {
|
||||||
Triple TheTriple(TT);
|
Triple TheTriple(TT);
|
||||||
|
|
||||||
if (TheTriple.isOSDarwin() || TheTriple.getEnvironment() == Triple::MachO) {
|
if (TheTriple.isOSDarwin() || TheTriple.getEnvironment() == Triple::MachO) {
|
||||||
@ -180,6 +180,6 @@ static MCAsmInfo *createMCAsmInfo(const Target &T, StringRef TT) {
|
|||||||
|
|
||||||
extern "C" void LLVMInitializeX86MCAsmInfo() {
|
extern "C" void LLVMInitializeX86MCAsmInfo() {
|
||||||
// Register the target asm info.
|
// Register the target asm info.
|
||||||
RegisterMCAsmInfoFn A(TheX86_32Target, createMCAsmInfo);
|
RegisterMCAsmInfoFn A(TheX86_32Target, createX86MCAsmInfo);
|
||||||
RegisterMCAsmInfoFn B(TheX86_64Target, createMCAsmInfo);
|
RegisterMCAsmInfoFn B(TheX86_64Target, createX86MCAsmInfo);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user