X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FTargetAsmInfo.cpp;h=6fa5420120f517ef042d85b63792079a7548b4f7;hb=ad70f6d2b1eacdc2c85e7cfec24e4c470325ef4e;hp=1fb656329592d86d58ea061e91857b0513b88acc;hpb=b80610cd13e7accf6db0924c75d0914bf566922b;p=oota-llvm.git diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp index 1fb65632959..6fa5420120f 100644 --- a/lib/Target/TargetAsmInfo.cpp +++ b/lib/Target/TargetAsmInfo.cpp @@ -1,4 +1,4 @@ -//===-- TargetAsmInfo.cpp - Asm Info ---------------------------------------==// +//===-- llvm/Target/TargetAsmInfo.cpp - Target Assembly Info --------------===// // // The LLVM Compiler Infrastructure // @@ -6,168 +6,22 @@ // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// -// -// This file defines target asm properties related what form asm statements -// should take. -// -//===----------------------------------------------------------------------===// -#include "llvm/Constants.h" -#include "llvm/DerivedTypes.h" -#include "llvm/GlobalVariable.h" -#include "llvm/Function.h" -#include "llvm/Module.h" -#include "llvm/Type.h" #include "llvm/Target/TargetAsmInfo.h" #include "llvm/Target/TargetData.h" +#include "llvm/Target/TargetLowering.h" +#include "llvm/Target/TargetLoweringObjectFile.h" #include "llvm/Target/TargetMachine.h" -#include "llvm/Target/TargetOptions.h" -#include "llvm/Support/Dwarf.h" -#include "llvm/Support/ErrorHandling.h" -#include -#include +#include "llvm/Target/TargetRegisterInfo.h" using namespace llvm; -TargetAsmInfo::TargetAsmInfo(const TargetMachine &tm) : TM(tm) { - ZeroFillDirective = 0; - NonexecutableStackDirective = 0; - NeedsSet = false; - MaxInstLength = 4; - PCSymbol = "$"; - SeparatorChar = ';'; - CommentColumn = 60; - CommentString = "#"; - FirstOperandColumn = 0; - MaxOperandLength = 0; - GlobalPrefix = ""; - PrivateGlobalPrefix = "."; - LinkerPrivateGlobalPrefix = ""; - JumpTableSpecialLabelPrefix = 0; - GlobalVarAddrPrefix = ""; - GlobalVarAddrSuffix = ""; - FunctionAddrPrefix = ""; - FunctionAddrSuffix = ""; - PersonalityPrefix = ""; - PersonalitySuffix = ""; - NeedsIndirectEncoding = false; - InlineAsmStart = "#APP"; - InlineAsmEnd = "#NO_APP"; - AssemblerDialect = 0; - AllowQuotesInName = false; - ZeroDirective = "\t.zero\t"; - ZeroDirectiveSuffix = 0; - AsciiDirective = "\t.ascii\t"; - AscizDirective = "\t.asciz\t"; - Data8bitsDirective = "\t.byte\t"; - Data16bitsDirective = "\t.short\t"; - Data32bitsDirective = "\t.long\t"; - Data64bitsDirective = "\t.quad\t"; - AlignDirective = "\t.align\t"; - AlignmentIsInBytes = true; - TextAlignFillValue = 0; - SwitchToSectionDirective = "\t.section\t"; - TextSectionStartSuffix = ""; - DataSectionStartSuffix = ""; - SectionEndDirectiveSuffix = 0; - JumpTableDataSection = "\t.section .rodata"; - JumpTableDirective = 0; - // FIXME: Flags are ELFish - replace with normal section stuff. - StaticCtorsSection = "\t.section .ctors,\"aw\",@progbits"; - StaticDtorsSection = "\t.section .dtors,\"aw\",@progbits"; - GlobalDirective = "\t.globl\t"; - SetDirective = 0; - LCOMMDirective = 0; - COMMDirective = "\t.comm\t"; - COMMDirectiveTakesAlignment = true; - HasDotTypeDotSizeDirective = true; - HasSingleParameterDotFile = true; - UsedDirective = 0; - WeakRefDirective = 0; - WeakDefDirective = 0; - // FIXME: These are ELFish - move to ELFTAI. - HiddenDirective = "\t.hidden\t"; - ProtectedDirective = "\t.protected\t"; - AbsoluteDebugSectionOffsets = false; - AbsoluteEHSectionOffsets = false; - HasLEB128 = false; - HasDotLocAndDotFile = false; - SupportsDebugInformation = false; - SupportsExceptionHandling = false; - DwarfRequiresFrameSection = true; - DwarfUsesInlineInfoSection = false; - Is_EHSymbolPrivate = true; - GlobalEHDirective = 0; - SupportsWeakOmittedEHFrame = true; - DwarfSectionOffsetDirective = 0; - DwarfAbbrevSection = ".debug_abbrev"; - DwarfInfoSection = ".debug_info"; - DwarfLineSection = ".debug_line"; - DwarfFrameSection = ".debug_frame"; - DwarfPubNamesSection = ".debug_pubnames"; - DwarfPubTypesSection = ".debug_pubtypes"; - DwarfDebugInlineSection = ".debug_inlined"; - DwarfStrSection = ".debug_str"; - DwarfLocSection = ".debug_loc"; - DwarfARangesSection = ".debug_aranges"; - DwarfRangesSection = ".debug_ranges"; - DwarfMacroInfoSection = ".debug_macinfo"; - DwarfEHFrameSection = ".eh_frame"; - DwarfExceptionSection = ".gcc_except_table"; - AsmTransCBE = 0; -} - -TargetAsmInfo::~TargetAsmInfo() { -} - -/// Measure the specified inline asm to determine an approximation of its -/// length. -/// Comments (which run till the next SeparatorChar or newline) do not -/// count as an instruction. -/// Any other non-whitespace text is considered an instruction, with -/// multiple instructions separated by SeparatorChar or newlines. -/// Variable-length instructions are not handled here; this function -/// may be overloaded in the target code to do that. -unsigned TargetAsmInfo::getInlineAsmLength(const char *Str) const { - // Count the number of instructions in the asm. - bool atInsnStart = true; - unsigned Length = 0; - for (; *Str; ++Str) { - if (*Str == '\n' || *Str == SeparatorChar) - atInsnStart = true; - if (atInsnStart && !isspace(*Str)) { - Length += MaxInstLength; - atInsnStart = false; - } - if (atInsnStart && strncmp(Str, CommentString, strlen(CommentString))==0) - atInsnStart = false; - } - - return Length; -} - -unsigned TargetAsmInfo::PreferredEHDataFormat() const { - return dwarf::DW_EH_PE_absptr; -} - -unsigned TargetAsmInfo::getULEB128Size(unsigned Value) { - unsigned Size = 0; - do { - Value >>= 7; - Size += sizeof(int8_t); - } while (Value); - return Size; -} - -unsigned TargetAsmInfo::getSLEB128Size(int Value) { - unsigned Size = 0; - int Sign = Value >> (8 * sizeof(Value) - 1); - bool IsMore; - - do { - unsigned Byte = Value & 0x7f; - Value >>= 7; - IsMore = Value != Sign || ((Byte ^ Sign) & 0x40) != 0; - Size += sizeof(int8_t); - } while (IsMore); - return Size; +TargetAsmInfo::TargetAsmInfo(const TargetMachine &TM) { + TLOF = &TM.getTargetLowering()->getObjFileLowering(); + const TargetData &TD = *TM.getTargetData(); + IsLittleEndian = TD.isLittleEndian(); + PointerSize = TD.getPointerSize(); + const TargetFrameLowering &TFI = *TM.getFrameLowering(); + StackDir = TFI.getStackGrowthDirection(); + TRI = TM.getRegisterInfo(); + TFI.getInitialFrameState(InitialFrameState); }