LLVM  8.0.1
AArch64MCAsmInfo.cpp
Go to the documentation of this file.
1 //===-- AArch64MCAsmInfo.cpp - AArch64 asm properties ---------------------===//
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 contains the declarations of the AArch64MCAsmInfo properties.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "AArch64MCAsmInfo.h"
15 #include "llvm/ADT/Triple.h"
16 #include "llvm/MC/MCContext.h"
17 #include "llvm/MC/MCExpr.h"
18 #include "llvm/MC/MCStreamer.h"
20 using namespace llvm;
21 
23  Default = -1,
24  Generic = 0,
25  Apple = 1
26 };
27 
29  "aarch64-neon-syntax", cl::init(Default),
30  cl::desc("Choose style of NEON code to emit from AArch64 backend:"),
31  cl::values(clEnumValN(Generic, "generic", "Emit generic NEON assembly"),
32  clEnumValN(Apple, "apple", "Emit Apple-style NEON assembly")));
33 
35  // We prefer NEON instructions to be printed in the short, Apple-specific
36  // form when targeting Darwin.
38 
39  PrivateGlobalPrefix = "L";
40  PrivateLabelPrefix = "L";
41  SeparatorString = "%%";
42  CommentString = ";";
44 
45  AlignmentIsInBytes = false;
49 
51 }
52 
54  const MCSymbol *Sym, unsigned Encoding, MCStreamer &Streamer) const {
55  // On Darwin, we can reference dwarf symbols with foo@GOT-., which
56  // is an indirect pc-relative reference. The default implementation
57  // won't reference using the GOT, so we need this target-specific
58  // version.
59  MCContext &Context = Streamer.getContext();
60  const MCExpr *Res =
62  MCSymbol *PCSym = Context.createTempSymbol();
63  Streamer.EmitLabel(PCSym);
64  const MCExpr *PC = MCSymbolRefExpr::create(PCSym, Context);
65  return MCBinaryExpr::createSub(Res, PC, Context);
66 }
67 
69  if (T.getArch() == Triple::aarch64_be)
70  IsLittleEndian = false;
71 
72  // We prefer NEON instructions to be printed in the generic form when
73  // targeting ELF.
75 
76  CodePointerSize = 8;
77 
78  // ".comm align is in bytes but .align is pow-2."
79  AlignmentIsInBytes = false;
80 
81  CommentString = "//";
82  PrivateGlobalPrefix = ".L";
83  PrivateLabelPrefix = ".L";
84  Code32Directive = ".code\t32";
85 
86  Data16bitsDirective = "\t.hword\t";
87  Data32bitsDirective = "\t.word\t";
88  Data64bitsDirective = "\t.xword\t";
89 
91 
92  WeakRefDirective = "\t.weak\t";
93 
95 
96  // Exceptions handling
98 
100 
101  HasIdentDirective = true;
102 }
103 
105  PrivateGlobalPrefix = ".L";
106  PrivateLabelPrefix = ".L";
107 
108  Data16bitsDirective = "\t.hword\t";
109  Data32bitsDirective = "\t.word\t";
110  Data64bitsDirective = "\t.xword\t";
111 
112  AlignmentIsInBytes = false;
114  CodePointerSize = 8;
115 
116  CommentString = ";";
119 }
120 
122  PrivateGlobalPrefix = ".L";
123  PrivateLabelPrefix = ".L";
124 
125  Data16bitsDirective = "\t.hword\t";
126  Data32bitsDirective = "\t.word\t";
127  Data64bitsDirective = "\t.xword\t";
128 
129  AlignmentIsInBytes = false;
131  CodePointerSize = 8;
132 
133  CommentString = "//";
135  // The default is dwarf, but WinEH can be enabled optionally, which requires
136  // WinEHEncodingType to be set.
138 }
LLVMContext & Context
bool UseIntegratedAssembler
Should we use the integrated assembler? The integrated assembler should be enabled by default (by the...
Definition: MCAsmInfo.h:371
StringRef PrivateLabelPrefix
This prefix is used for labels for basic blocks.
Definition: MCAsmInfo.h:132
static const MCSymbolRefExpr * create(const MCSymbol *Symbol, MCContext &Ctx)
Definition: MCExpr.h:323
This class represents lattice values for constants.
Definition: AllocatorList.h:24
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:42
const char * Data64bitsDirective
Definition: MCAsmInfo.h:193
bool IsLittleEndian
True if target is little endian. Default is true.
Definition: MCAsmInfo.h:70
unsigned CalleeSaveStackSlotSize
Size of the stack slot reserved for callee-saved registers, in bytes.
Definition: MCAsmInfo.h:67
unsigned AssemblerDialect
Which dialect of an assembler variant to use. Defaults to 0.
Definition: MCAsmInfo.h:153
bool AlignmentIsInBytes
If this is true (the default) then the asmprinter emits ".align N" directives, where N is the number ...
Definition: MCAsmInfo.h:231
const char * SeparatorString
This string, if specified, is used to separate instructions from each other when on the same line...
Definition: MCAsmInfo.h:110
MCContext & getContext() const
Definition: MCStreamer.h:251
AArch64MCAsmInfoELF(const Triple &T)
StringRef CommentString
This indicates the comment character used by the assembler.
Definition: MCAsmInfo.h:114
bool UsesELFSectionDirectiveForBSS
This is true if this target uses ELF '.section' directive before the '.bss' one.
Definition: MCAsmInfo.h:221
Base class for the full range of assembler expressions which are needed for parsing.
Definition: MCExpr.h:36
Context object for machine code objects.
Definition: MCContext.h:63
static const MCBinaryExpr * createSub(const MCExpr *LHS, const MCExpr *RHS, MCContext &Ctx)
Definition: MCExpr.h:546
ArchType getArch() const
getArch - Get the parsed architecture type of this triple.
Definition: Triple.h:290
const char * Code32Directive
Definition: MCAsmInfo.h:149
.apple_names, .apple_namespaces, .apple_types, .apple_objc.
bool HasIdentDirective
True if the target has a .ident directive, this is true for ELF targets.
Definition: MCAsmInfo.h:287
initializer< Ty > init(const Ty &Val)
Definition: CommandLine.h:423
Streaming machine code generation interface.
Definition: MCStreamer.h:189
MCSymbol * createTempSymbol(bool CanBeUnnamed=true)
Create and return a new assembler temporary symbol with a unique but unspecified name.
Definition: MCContext.cpp:217
ValuesClass values(OptsTy... Options)
Helper to build a ValuesClass by forwarding a variable number of arguments as an initializer list to ...
Definition: CommandLine.h:643
bool SupportsDebugInformation
True if target supports emission of debugging information.
Definition: MCAsmInfo.h:332
WinEH::EncodingType WinEHEncodingType
Windows exception handling data (.pdata) encoding. Defaults to Invalid.
Definition: MCAsmInfo.h:338
const char * WeakRefDirective
This directive, if non-null, is used to declare a global as being a weak undefined symbol...
Definition: MCAsmInfo.h:302
const char * Data16bitsDirective
Definition: MCAsmInfo.h:191
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
AsmWriterVariantTy
const char * Data32bitsDirective
Definition: MCAsmInfo.h:192
unsigned CodePointerSize
Code pointer size in bytes. Default is 4.
Definition: MCAsmInfo.h:63
static cl::opt< AsmWriterVariantTy > AsmWriterVariant("aarch64-neon-syntax", cl::init(Default), cl::desc("Choose style of NEON code to emit from AArch64 backend:"), cl::values(clEnumValN(Generic, "generic", "Emit generic NEON assembly"), clEnumValN(Apple, "apple", "Emit Apple-style NEON assembly")))
#define clEnumValN(ENUMVAL, FLAGNAME, DESC)
Definition: CommandLine.h:618
ExceptionHandling ExceptionsType
Exception handling format for the target. Defaults to None.
Definition: MCAsmInfo.h:335
bool UseDataRegionDirectives
This is true if data region markers should be printed as ".data_region/.end_data_region" directives...
Definition: MCAsmInfo.h:166
const MCExpr * getExprForPersonalitySymbol(const MCSymbol *Sym, unsigned Encoding, MCStreamer &Streamer) const override
Windows CE ARM, PowerPC, SH3, SH4.
virtual void EmitLabel(MCSymbol *Symbol, SMLoc Loc=SMLoc())
Emit a label for Symbol into the current section.
Definition: MCStreamer.cpp:347
No exception support.
StringRef PrivateGlobalPrefix
This prefix is used for globals like constant pool entries that are completely private to the ...
Definition: MCAsmInfo.h:128