MCAsmInfo.cpp revision 415c8cf837439401f2df75d992d7e296d1d6746a
1//===-- MCAsmInfo.cpp - Asm Info -------------------------------------------==//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines target asm properties related what form asm statements
11// should take.
12//
13//===----------------------------------------------------------------------===//
14
15#include "llvm/MC/MCAsmInfo.h"
16#include "llvm/Support/DataTypes.h"
17#include <cctype>
18#include <cstring>
19using namespace llvm;
20
21MCAsmInfo::MCAsmInfo() {
22  ZeroFillDirective = 0;
23  NonexecutableStackDirective = 0;
24  NeedsSet = false;
25  MaxInstLength = 4;
26  PCSymbol = "$";
27  SeparatorChar = ';';
28  CommentColumn = 60;
29  CommentString = "#";
30  GlobalPrefix = "";
31  PrivateGlobalPrefix = ".";
32  LinkerPrivateGlobalPrefix = "";
33  JumpTableSpecialLabelPrefix = 0;
34  GlobalVarAddrPrefix = "";
35  GlobalVarAddrSuffix = "";
36  FunctionAddrPrefix = "";
37  FunctionAddrSuffix = "";
38  PersonalityPrefix = "";
39  PersonalitySuffix = "";
40  NeedsIndirectEncoding = false;
41  InlineAsmStart = "APP";
42  InlineAsmEnd = "NO_APP";
43  AssemblerDialect = 0;
44  AllowQuotesInName = false;
45  ZeroDirective = "\t.zero\t";
46  ZeroDirectiveSuffix = 0;
47  AsciiDirective = "\t.ascii\t";
48  AscizDirective = "\t.asciz\t";
49  Data8bitsDirective = "\t.byte\t";
50  Data16bitsDirective = "\t.short\t";
51  Data32bitsDirective = "\t.long\t";
52  Data64bitsDirective = "\t.quad\t";
53  SunStyleELFSectionSwitchSyntax = false;
54  UsesELFSectionDirectiveForBSS = false;
55  AlignDirective = "\t.align\t";
56  AlignmentIsInBytes = true;
57  TextAlignFillValue = 0;
58  JumpTableDirective = 0;
59  PICJumpTableDirective = 0;
60  GlobalDirective = "\t.globl\t";
61  SetDirective = 0;
62  LCOMMDirective = 0;
63  COMMDirective = "\t.comm\t";
64  COMMDirectiveTakesAlignment = true;
65  HasDotTypeDotSizeDirective = true;
66  HasSingleParameterDotFile = true;
67  UsedDirective = 0;
68  WeakRefDirective = 0;
69  WeakDefDirective = 0;
70  // FIXME: These are ELFish - move to ELFMAI.
71  HiddenDirective = "\t.hidden\t";
72  ProtectedDirective = "\t.protected\t";
73  AbsoluteDebugSectionOffsets = false;
74  AbsoluteEHSectionOffsets = false;
75  HasLEB128 = false;
76  HasDotLocAndDotFile = false;
77  SupportsDebugInformation = false;
78  ExceptionsType = ExceptionHandling::None;
79  DwarfRequiresFrameSection = true;
80  DwarfUsesInlineInfoSection = false;
81  Is_EHSymbolPrivate = true;
82  GlobalEHDirective = 0;
83  SupportsWeakOmittedEHFrame = true;
84  DwarfSectionOffsetDirective = 0;
85
86  AsmTransCBE = 0;
87}
88
89MCAsmInfo::~MCAsmInfo() {
90}
91
92
93unsigned MCAsmInfo::getULEB128Size(unsigned Value) {
94  unsigned Size = 0;
95  do {
96    Value >>= 7;
97    Size += sizeof(int8_t);
98  } while (Value);
99  return Size;
100}
101
102unsigned MCAsmInfo::getSLEB128Size(int Value) {
103  unsigned Size = 0;
104  int Sign = Value >> (8 * sizeof(Value) - 1);
105  bool IsMore;
106
107  do {
108    unsigned Byte = Value & 0x7f;
109    Value >>= 7;
110    IsMore = Value != Sign || ((Byte ^ Sign) & 0x40) != 0;
111    Size += sizeof(int8_t);
112  } while (IsMore);
113  return Size;
114}
115