MCAsmInfo.h revision eb2fde2c939892f620de93f56dc21ec0c36824ef
182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//===-- llvm/MC/MCAsmInfo.h - Asm info --------------------------*- C++ -*-===//
282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//
382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//                     The LLVM Compiler Infrastructure
482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//
582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner// This file is distributed under the University of Illinois Open Source
682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner// License. See LICENSE.TXT for details.
782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//
882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//===----------------------------------------------------------------------===//
982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//
1082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner// This file contains a class to be used as the basis for target specific
1182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner// asm writers.  This class primarily takes care of global printing constants,
1282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner// which are used in very similar ways across all targets.
1382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//
1482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//===----------------------------------------------------------------------===//
15af76e592c7f9deff0e55c13dbb4a34f07f1c7f64Chris Lattner
1682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner#ifndef LLVM_TARGET_ASM_INFO_H
1782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner#define LLVM_TARGET_ASM_INFO_H
18af76e592c7f9deff0e55c13dbb4a34f07f1c7f64Chris Lattner
1982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner#include <cassert>
2082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
2182d748d55c549dd055528ed10dbb534618ca8115Chris Lattnernamespace llvm {
2282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner  /// MCAsmInfo - This class is intended to be used as a base class for asm
2382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner  /// properties and features specific to the target.
2482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner  namespace ExceptionHandling { enum ExceptionsType { None, Dwarf, SjLj }; }
2582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
2682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner  class MCAsmInfo {
2782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner  protected:
2882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //===------------------------------------------------------------------===//
2982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    // Properties to be set by the target writer, used to configure asm printer.
3082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //
3182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
3282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// ZeroFillDirective - Directive for emitting a global to the ZeroFill
3382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// section on this target.  Null if this target doesn't support zerofill.
34eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *ZeroFillDirective;           // Default is null.
3582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
3682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// NonexecutableStackDirective - Directive for declaring to the
3782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// linker and beyond that the emitted code does not require stack
3882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// memory to be executable.
3982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *NonexecutableStackDirective; // Default is null.
4082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
4182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// NeedsSet - True if target asm treats expressions in data directives
4282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// as linktime-relocatable.  For assembly-time computation, we need to
4382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// use a .set.  Thus:
4482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// .set w, x-y
4582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// .long w
4682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// is computed at assembly time, while
4782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// .long x-y
4882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// is relocated if the relative locations of x and y change at linktime.
4982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// We want both these things in different places.
50eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool NeedsSet;                           // Defaults to false.
5182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
5282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// MaxInstLength - This is the maximum possible length of an instruction,
5382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// which is needed to compute the size of an inline asm.
54eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    unsigned MaxInstLength;                  // Defaults to 4.
5582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
5682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// PCSymbol - The symbol used to represent the current PC.  Used in PC
5782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// relative expressions.
58eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *PCSymbol;                    // Defaults to "$".
5982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
6082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// SeparatorChar - This character, if specified, is used to separate
6182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// instructions from each other when on the same line.  This is used to
6282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// measure inline asm instructions.
63eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    char SeparatorChar;                      // Defaults to ';'
6482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
6582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// CommentColumn - This indicates the comment num (zero-based) at
6682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// which asm comments should be printed.
67eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    unsigned CommentColumn;                  // Defaults to 60
6882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
6982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// CommentString - This indicates the comment character used by the
7082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// assembler.
71eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *CommentString;               // Defaults to "#"
7282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
7382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// GlobalPrefix - If this is set to a non-empty string, it is prepended
7482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// onto all global symbols.  This is often used for "_" or ".".
75eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *GlobalPrefix;                // Defaults to ""
7682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
7782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// PrivateGlobalPrefix - This prefix is used for globals like constant
7882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// pool entries that are completely private to the .s file and should not
7982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// have names in the .o file.  This is often "." or "L".
80eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *PrivateGlobalPrefix;         // Defaults to "."
8182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
8282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// LinkerPrivateGlobalPrefix - This prefix is used for symbols that should
8382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// be passed through the assembler but be removed by the linker.  This
8482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// is "l" on Darwin, currently used for some ObjC metadata.
85eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *LinkerPrivateGlobalPrefix;   // Defaults to ""
8682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
8782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// JumpTableSpecialLabelPrefix - If not null, a extra (dead) label is
8882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// emitted before jump tables with the specified prefix.
89eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *JumpTableSpecialLabelPrefix; // Default to null.
9082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
9182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// GlobalVarAddrPrefix/Suffix - If these are nonempty, these strings
9282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// will enclose any GlobalVariable (that isn't a function)
9382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    ///
94eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *GlobalVarAddrPrefix;         // Defaults to ""
95eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *GlobalVarAddrSuffix;         // Defaults to ""
9682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
9782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// FunctionAddrPrefix/Suffix - If these are nonempty, these strings
9882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// will enclose any GlobalVariable that points to a function.
9982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    ///
100eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *FunctionAddrPrefix;          // Defaults to ""
101eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *FunctionAddrSuffix;          // Defaults to ""
10282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
10382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// PersonalityPrefix/Suffix - If these are nonempty, these strings will
10482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// enclose any personality function in the common frame section.
10582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    ///
106eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *PersonalityPrefix;           // Defaults to ""
107eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *PersonalitySuffix;           // Defaults to ""
10882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
10982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// NeedsIndirectEncoding - If set, we need to set the indirect encoding bit
11082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// for EH in Dwarf.
11182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    ///
112eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool NeedsIndirectEncoding;              // Defaults to false
11382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
11482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// InlineAsmStart/End - If these are nonempty, they contain a directive to
11582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// emit before and after an inline assembly statement.
116eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *InlineAsmStart;              // Defaults to "#APP\n"
117eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *InlineAsmEnd;                // Defaults to "#NO_APP\n"
11882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
11982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AssemblerDialect - Which dialect of an assembler variant to use.
120eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    unsigned AssemblerDialect;               // Defaults to 0
12182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
12282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AllowQuotesInName - This is true if the assembler allows for complex
12382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// symbol names to be surrounded in quotes.  This defaults to false.
12482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool AllowQuotesInName;
12582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
12682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //===--- Data Emission Directives -------------------------------------===//
12782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
12882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// ZeroDirective - this should be set to the directive used to get some
12982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// number of zero bytes emitted to the current section.  Common cases are
13082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// "\t.zero\t" and "\t.space\t".  If this is set to null, the
13182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// Data*bitsDirective's will be used to emit zero bytes.
132eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *ZeroDirective;               // Defaults to "\t.zero\t"
133eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *ZeroDirectiveSuffix;         // Defaults to ""
13482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
13582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AsciiDirective - This directive allows emission of an ascii string with
13682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// the standard C escape characters embedded into it.
137eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *AsciiDirective;              // Defaults to "\t.ascii\t"
13882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
13982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AscizDirective - If not null, this allows for special handling of
14082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// zero terminated strings on this target.  This is commonly supported as
14182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// ".asciz".  If a target doesn't support this, it can be set to null.
142eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *AscizDirective;              // Defaults to "\t.asciz\t"
14382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
14482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// DataDirectives - These directives are used to output some unit of
14582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// integer data to the current section.  If a data directive is set to
14682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// null, smaller data directives will be used to emit the large sizes.
147eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *Data8bitsDirective;          // Defaults to "\t.byte\t"
148eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *Data16bitsDirective;         // Defaults to "\t.short\t"
149eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *Data32bitsDirective;         // Defaults to "\t.long\t"
150eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *Data64bitsDirective;         // Defaults to "\t.quad\t"
15182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
15282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// getDataASDirective - Return the directive that should be used to emit
15382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// data of the specified size to the specified numeric address space.
15482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    virtual const char *getDataASDirective(unsigned Size, unsigned AS) const {
15582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      assert(AS != 0 && "Don't know the directives for default addr space");
1565ec2e6b586bf4029763711d6860b57d312eb2d2eChris Lattner      return 0;
15782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
15882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
15982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// SunStyleELFSectionSwitchSyntax - This is true if this target uses "Sun
16082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// Style" syntax for section switching ("#alloc,#write" etc) instead of the
16182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// normal ELF syntax (,"a,w") in .section directives.
162eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool SunStyleELFSectionSwitchSyntax;     // Defaults to false.
16382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
16482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// UsesELFSectionDirectiveForBSS - This is true if this target uses ELF
16582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// '.section' directive before the '.bss' one. It's used for PPC/Linux
16682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// which doesn't support the '.bss' directive only.
167eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool UsesELFSectionDirectiveForBSS;      // Defaults to false.
16882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
16982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //===--- Alignment Information ----------------------------------------===//
17082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
17182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AlignDirective - The directive used to emit round up to an alignment
17282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// boundary.
17382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    ///
174eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *AlignDirective;              // Defaults to "\t.align\t"
17582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
17682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AlignmentIsInBytes - If this is true (the default) then the asmprinter
17782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// emits ".align N" directives, where N is the number of bytes to align to.
17882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// Otherwise, it emits ".align log2(N)", e.g. 3 to align to an 8 byte
17982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// boundary.
180eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool AlignmentIsInBytes;                 // Defaults to true
18182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
18282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// TextAlignFillValue - If non-zero, this is used to fill the executable
18382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// space created as the result of a alignment directive.
184eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    unsigned TextAlignFillValue;             // Defaults to 0
18582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
18682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //===--- Section Switching Directives ---------------------------------===//
18782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
18882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// JumpTableDirective - if non-null, the directive to emit before jump
18982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// table entries.  FIXME: REMOVE THIS.
190eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *JumpTableDirective;          // Defaults to NULL.
191eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *PICJumpTableDirective;       // Defaults to NULL.
19282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
19382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
19482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //===--- Global Variable Emission Directives --------------------------===//
19582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
19682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// GlobalDirective - This is the directive used to declare a global entity.
19782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    ///
198eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *GlobalDirective;             // Defaults to NULL.
19982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
20082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// ExternDirective - This is the directive used to declare external
20182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// globals.
20282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    ///
203eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *ExternDirective;             // Defaults to NULL.
20482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
20582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// SetDirective - This is the name of a directive that can be used to tell
20682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// the assembler to set the value of a variable to some expression.
207eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *SetDirective;                // Defaults to null.
20882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
20982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// LCOMMDirective - This is the name of a directive (if supported) that can
21082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// be used to efficiently declare a local (internal) block of zero
21182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// initialized data in the .bss/.data section.  The syntax expected is:
21282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// @verbatim <LCOMMDirective> SYMBOLNAME LENGTHINBYTES, ALIGNMENT
21382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// @endverbatim
214eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *LCOMMDirective;              // Defaults to null.
21582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
216eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *COMMDirective;               // Defaults to "\t.comm\t".
21782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
21882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// COMMDirectiveTakesAlignment - True if COMMDirective take a third
21982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// argument that specifies the alignment of the declaration.
220eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool COMMDirectiveTakesAlignment;        // Defaults to true.
22182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
22282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// HasDotTypeDotSizeDirective - True if the target has .type and .size
22382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// directives, this is true for most ELF targets.
224eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool HasDotTypeDotSizeDirective;         // Defaults to true.
22582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
22682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// HasSingleParameterDotFile - True if the target has a single parameter
22782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// .file directive, this is true for ELF targets.
228eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool HasSingleParameterDotFile;          // Defaults to true.
22982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
23082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// UsedDirective - This directive, if non-null, is used to declare a global
23182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// as being used somehow that the assembler can't see.  This prevents dead
23282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// code elimination on some targets.
233eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *UsedDirective;               // Defaults to NULL.
23482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
23582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// WeakRefDirective - This directive, if non-null, is used to declare a
23682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// global as being a weak undefined symbol.
237eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *WeakRefDirective;            // Defaults to NULL.
23882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
23982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// WeakDefDirective - This directive, if non-null, is used to declare a
24082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// global as being a weak defined symbol.
241eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *WeakDefDirective;            // Defaults to NULL.
24282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
24382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// HiddenDirective - This directive, if non-null, is used to declare a
24482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// global or function as having hidden visibility.
245eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *HiddenDirective;             // Defaults to "\t.hidden\t".
24682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
24782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// ProtectedDirective - This directive, if non-null, is used to declare a
24882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// global or function as having protected visibility.
249eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *ProtectedDirective;          // Defaults to "\t.protected\t".
25082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
25182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //===--- Dwarf Emission Directives -----------------------------------===//
25282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
25382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AbsoluteDebugSectionOffsets - True if we should emit abolute section
254b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    /// offsets for debug information.
255b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool AbsoluteDebugSectionOffsets;        // Defaults to false.
25682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
25782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AbsoluteEHSectionOffsets - True if we should emit abolute section
25882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// offsets for EH information. Defaults to false.
25982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool AbsoluteEHSectionOffsets;
26082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
26182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// HasLEB128 - True if target asm supports leb128 directives.
262b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool HasLEB128;                          // Defaults to false.
26382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
26482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// hasDotLocAndDotFile - True if target asm supports .loc and .file
26582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// directives for emitting debugging information.
266b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool HasDotLocAndDotFile;                // Defaults to false.
26782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
26882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// SupportsDebugInformation - True if target supports emission of debugging
26982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// information.
270b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool SupportsDebugInformation;           // Defaults to false.
27182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
272b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    /// SupportsExceptionHandling - True if target supports exception handling.
273b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    ExceptionHandling::ExceptionsType ExceptionsType; // Defaults to None
27482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
27582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// RequiresFrameSection - true if the Dwarf2 output needs a frame section
276b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool DwarfRequiresFrameSection;          // Defaults to true.
27782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
27882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// DwarfUsesInlineInfoSection - True if DwarfDebugInlineSection is used to
27982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// encode inline subroutine information.
280b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool DwarfUsesInlineInfoSection;         // Defaults to false.
28182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
28282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// Is_EHSymbolPrivate - If set, the "_foo.eh" is made private so that it
28382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// doesn't show up in the symbol table of the object file.
284b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool Is_EHSymbolPrivate;                 // Defaults to true.
285b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling
286b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    /// ForceEncodingOfFDETo32Bits - If set, the encoding of some of the FDE
287b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    /// data is forced to 32-bit.
288b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool ForceEncodingOfFDETo32Bits;         // Defaults to true.
28982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
29082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// GlobalEHDirective - This is the directive used to make exception frame
29182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// tables globally visible.
292b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    const char *GlobalEHDirective;           // Defaults to NULL.
29382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
29482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// SupportsWeakEmptyEHFrame - True if target assembler and linker will
29582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// handle a weak_definition of constant 0 for an omitted EH frame.
296b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool SupportsWeakOmittedEHFrame;         // Defaults to true.
29782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
29882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// DwarfSectionOffsetDirective - Special section offset directive.
29982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char* DwarfSectionOffsetDirective; // Defaults to NULL
30082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
30182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //===--- CBE Asm Translation Table -----------------------------------===//
30282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
303eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *const *AsmTransCBE;          // Defaults to empty
30482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
30582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner  public:
30682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    explicit MCAsmInfo();
30782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    virtual ~MCAsmInfo();
30882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
30982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// getSLEB128Size - Compute the number of bytes required for a signed
31082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// leb128 value.
31182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    static unsigned getSLEB128Size(int Value);
31282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
31382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// getULEB128Size - Compute the number of bytes required for an unsigned
31482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// leb128 value.
31582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    static unsigned getULEB128Size(unsigned Value);
31682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
31782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    // Data directive accessors.
31882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //
31982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getData8bitsDirective(unsigned AS = 0) const {
32082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AS == 0 ? Data8bitsDirective : getDataASDirective(8, AS);
32182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
32282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getData16bitsDirective(unsigned AS = 0) const {
32382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AS == 0 ? Data16bitsDirective : getDataASDirective(16, AS);
32482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
32582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getData32bitsDirective(unsigned AS = 0) const {
32682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AS == 0 ? Data32bitsDirective : getDataASDirective(32, AS);
32782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
32882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getData64bitsDirective(unsigned AS = 0) const {
32982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AS == 0 ? Data64bitsDirective : getDataASDirective(64, AS);
33082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
33182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
33282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
33382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool usesSunStyleELFSectionSwitchSyntax() const {
33482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return SunStyleELFSectionSwitchSyntax;
33582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
33682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
33782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool usesELFSectionDirectiveForBSS() const {
33882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return UsesELFSectionDirectiveForBSS;
33982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
34082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
34182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    // Accessors.
34282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //
34382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getZeroFillDirective() const {
34482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return ZeroFillDirective;
34582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
34682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getNonexecutableStackDirective() const {
34782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return NonexecutableStackDirective;
34882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
34982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool needsSet() const {
35082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return NeedsSet;
35182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
35282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    unsigned getMaxInstLength() const {
35382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return MaxInstLength;
35482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
35582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getPCSymbol() const {
35682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return PCSymbol;
35782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
35882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    char getSeparatorChar() const {
35982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return SeparatorChar;
36082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
36182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    unsigned getCommentColumn() const {
36282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return CommentColumn;
36382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
36482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getCommentString() const {
36582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return CommentString;
36682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
36782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getGlobalPrefix() const {
36882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return GlobalPrefix;
36982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
37082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getPrivateGlobalPrefix() const {
37182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return PrivateGlobalPrefix;
37282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
37382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getLinkerPrivateGlobalPrefix() const {
37482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return LinkerPrivateGlobalPrefix;
37582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
37682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getJumpTableSpecialLabelPrefix() const {
37782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return JumpTableSpecialLabelPrefix;
37882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
37982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getGlobalVarAddrPrefix() const {
38082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return GlobalVarAddrPrefix;
38182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
38282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getGlobalVarAddrSuffix() const {
38382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return GlobalVarAddrSuffix;
38482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
38582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getFunctionAddrPrefix() const {
38682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return FunctionAddrPrefix;
38782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
38882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getFunctionAddrSuffix() const {
38982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return FunctionAddrSuffix;
39082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
39182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getPersonalityPrefix() const {
39282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return PersonalityPrefix;
39382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
39482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getPersonalitySuffix() const {
39582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return PersonalitySuffix;
39682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
39782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool getNeedsIndirectEncoding() const {
39882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return NeedsIndirectEncoding;
39982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
40082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getInlineAsmStart() const {
40182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return InlineAsmStart;
40282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
40382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getInlineAsmEnd() const {
40482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return InlineAsmEnd;
40582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
40682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    unsigned getAssemblerDialect() const {
40782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AssemblerDialect;
40882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
40982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool doesAllowQuotesInName() const {
41082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AllowQuotesInName;
41182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
41282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getZeroDirective() const {
41382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return ZeroDirective;
41482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
41582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getZeroDirectiveSuffix() const {
41682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return ZeroDirectiveSuffix;
41782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
41882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getAsciiDirective() const {
41982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AsciiDirective;
42082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
42182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getAscizDirective() const {
42282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AscizDirective;
42382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
42482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getJumpTableDirective(bool isPIC) const {
42582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return isPIC ? PICJumpTableDirective : JumpTableDirective;
42682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
42782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getAlignDirective() const {
42882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AlignDirective;
42982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
43082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool getAlignmentIsInBytes() const {
43182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AlignmentIsInBytes;
43282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
43382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    unsigned getTextAlignFillValue() const {
43482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return TextAlignFillValue;
43582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
43682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getGlobalDirective() const {
43782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return GlobalDirective;
43882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
43982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getExternDirective() const {
44082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return ExternDirective;
44182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
44282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getSetDirective() const {
44382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return SetDirective;
44482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
44582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getLCOMMDirective() const {
44682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return LCOMMDirective;
44782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
44882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getCOMMDirective() const {
44982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return COMMDirective;
45082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
45182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool getCOMMDirectiveTakesAlignment() const {
45282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return COMMDirectiveTakesAlignment;
45382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
45482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool hasDotTypeDotSizeDirective() const {
45582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return HasDotTypeDotSizeDirective;
45682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
45782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool hasSingleParameterDotFile() const {
45882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return HasSingleParameterDotFile;
45982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
46082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getUsedDirective() const {
46182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return UsedDirective;
46282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
46382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getWeakRefDirective() const {
46482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return WeakRefDirective;
46582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
46682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getWeakDefDirective() const {
46782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return WeakDefDirective;
46882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
46982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getHiddenDirective() const {
47082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return HiddenDirective;
47182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
47282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getProtectedDirective() const {
47382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return ProtectedDirective;
47482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
47582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool isAbsoluteDebugSectionOffsets() const {
47682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AbsoluteDebugSectionOffsets;
47782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
47882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool isAbsoluteEHSectionOffsets() const {
47982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AbsoluteEHSectionOffsets;
48082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
48182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool hasLEB128() const {
48282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return HasLEB128;
48382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
48482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool hasDotLocAndDotFile() const {
48582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return HasDotLocAndDotFile;
48682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
48782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool doesSupportDebugInformation() const {
48882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return SupportsDebugInformation;
48982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
49082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool doesSupportExceptionHandling() const {
49182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return ExceptionsType != ExceptionHandling::None;
49282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
49382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    ExceptionHandling::ExceptionsType getExceptionHandlingType() const {
49482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return ExceptionsType;
49582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
49682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool doesDwarfRequireFrameSection() const {
49782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return DwarfRequiresFrameSection;
49882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
49982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool doesDwarfUsesInlineInfoSection() const {
50082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return DwarfUsesInlineInfoSection;
50182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
50282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool is_EHSymbolPrivate() const {
50382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return Is_EHSymbolPrivate;
50482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
505b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool forceEncodingOfFDETo32Bits() const {
506b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling      return ForceEncodingOfFDETo32Bits;
507b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    }
50882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getGlobalEHDirective() const {
50982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return GlobalEHDirective;
51082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
51182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool getSupportsWeakOmittedEHFrame() const {
51282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return SupportsWeakOmittedEHFrame;
51382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
51482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getDwarfSectionOffsetDirective() const {
51582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return DwarfSectionOffsetDirective;
51682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
51782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *const *getAsmCBE() const {
51882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AsmTransCBE;
51982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
52082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner  };
52182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner}
52282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
52382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner#endif
524