mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-10 02:36:06 +00:00
d90183d25d
the only real caller (GetFunctionSizeInBytes) uses it. The custom ARM implementation of this is basically reimplementing an assembler poorly for negligible gain. It should be removed IMNSHO, but I'll leave that to ARMish folks to decide. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77877 91177308-0d34-0410-b5e6-96231b3b80d8
129 lines
3.6 KiB
C++
129 lines
3.6 KiB
C++
//===-- TargetAsmInfo.cpp - Asm Info ---------------------------------------==//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines target asm properties related what form asm statements
|
|
// should take.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Target/TargetAsmInfo.h"
|
|
#include <cctype>
|
|
#include <cstring>
|
|
using namespace llvm;
|
|
|
|
TargetAsmInfo::TargetAsmInfo() {
|
|
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;
|
|
JumpTableDirective = 0;
|
|
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";
|
|
AsmTransCBE = 0;
|
|
}
|
|
|
|
TargetAsmInfo::~TargetAsmInfo() {
|
|
}
|
|
|
|
|
|
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;
|
|
}
|