LLVM  4.0.0
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 form.
37 
38  PrivateGlobalPrefix = "L";
39  PrivateLabelPrefix = "L";
40  SeparatorString = "%%";
41  CommentString = ";";
43 
44  AlignmentIsInBytes = false;
48 
50 }
51 
53  const MCSymbol *Sym, unsigned Encoding, MCStreamer &Streamer) const {
54  // On Darwin, we can reference dwarf symbols with foo@GOT-., which
55  // is an indirect pc-relative reference. The default implementation
56  // won't reference using the GOT, so we need this target-specific
57  // version.
58  MCContext &Context = Streamer.getContext();
59  const MCExpr *Res =
61  MCSymbol *PCSym = Context.createTempSymbol();
62  Streamer.EmitLabel(PCSym);
63  const MCExpr *PC = MCSymbolRefExpr::create(PCSym, Context);
64  return MCBinaryExpr::createSub(Res, PC, Context);
65 }
66 
68  if (T.getArch() == Triple::aarch64_be)
69  IsLittleEndian = false;
70 
71  // We prefer NEON instructions to be printed in the short form.
73 
74  PointerSize = 8;
75 
76  // ".comm align is in bytes but .align is pow-2."
77  AlignmentIsInBytes = false;
78 
79  CommentString = "//";
80  PrivateGlobalPrefix = ".L";
81  PrivateLabelPrefix = ".L";
82  Code32Directive = ".code\t32";
83 
84  Data16bitsDirective = "\t.hword\t";
85  Data32bitsDirective = "\t.word\t";
86  Data64bitsDirective = "\t.xword\t";
87 
89 
90  WeakRefDirective = "\t.weak\t";
91 
93 
94  // Exceptions handling
96 
98 
99  HasIdentDirective = true;
100 }
LLVMContext & Context
bool UseIntegratedAssembler
Should we use the integrated assembler? The integrated assembler should be enabled by default (by the...
Definition: MCAsmInfo.h:358
StringRef PrivateLabelPrefix
This prefix is used for labels for basic blocks.
Definition: MCAsmInfo.h:124
static const MCSymbolRefExpr * create(const MCSymbol *Symbol, MCContext &Ctx)
Definition: MCExpr.h:298
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:39
const char * Data64bitsDirective
Definition: MCAsmInfo.h:184
bool IsLittleEndian
True if target is little endian. Default is true.
Definition: MCAsmInfo.h:71
unsigned CalleeSaveStackSlotSize
Size of the stack slot reserved for callee-saved registers, in bytes.
Definition: MCAsmInfo.h:68
unsigned AssemblerDialect
Which dialect of an assembler variant to use. Defaults to 0.
Definition: MCAsmInfo.h:145
bool AlignmentIsInBytes
If this is true (the default) then the asmprinter emits ".align N" directives, where N is the number ...
Definition: MCAsmInfo.h:222
const char * SeparatorString
This string, if specified, is used to separate instructions from each other when on the same line...
Definition: MCAsmInfo.h:102
AArch64MCAsmInfoELF(const Triple &T)
StringRef CommentString
This indicates the comment character used by the assembler.
Definition: MCAsmInfo.h:106
bool UsesELFSectionDirectiveForBSS
This is true if this target uses ELF '.section' directive before the '.bss' one.
Definition: MCAsmInfo.h:212
Base class for the full range of assembler expressions which are needed for parsing.
Definition: MCExpr.h:34
MCContext & getContext() const
Definition: MCStreamer.h:221
Context object for machine code objects.
Definition: MCContext.h:51
static const MCBinaryExpr * createSub(const MCExpr *LHS, const MCExpr *RHS, MCContext &Ctx)
Definition: MCExpr.h:497
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")))
const char * Code32Directive
Definition: MCAsmInfo.h:141
ArchType getArch() const
getArch - Get the parsed architecture type of this triple.
Definition: Triple.h:270
ValuesClass values(OptsTy...Options)
Helper to build a ValuesClass by forwarding a variable number of arguments as an initializer list to ...
Definition: CommandLine.h:615
bool HasIdentDirective
True if the target has a .ident directive, this is true for ELF targets.
Definition: MCAsmInfo.h:278
initializer< Ty > init(const Ty &Val)
Definition: CommandLine.h:395
Streaming machine code generation interface.
Definition: MCStreamer.h:161
MCSymbol * createTempSymbol(bool CanBeUnnamed=true)
Create and return a new assembler temporary symbol with a unique but unspecified name.
Definition: MCContext.cpp:218
unsigned PointerSize
Pointer size in bytes. Default is 4.
Definition: MCAsmInfo.h:64
bool SupportsDebugInformation
True if target supports emission of debugging information.
Definition: MCAsmInfo.h:323
const char * WeakRefDirective
This directive, if non-null, is used to declare a global as being a weak undefined symbol...
Definition: MCAsmInfo.h:293
const char * Data16bitsDirective
Definition: MCAsmInfo.h:182
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
virtual void EmitLabel(MCSymbol *Symbol)
Emit a label for Symbol into the current section.
Definition: MCStreamer.cpp:293
AsmWriterVariantTy
const char * Data32bitsDirective
Definition: MCAsmInfo.h:183
#define clEnumValN(ENUMVAL, FLAGNAME, DESC)
Definition: CommandLine.h:590
ExceptionHandling ExceptionsType
Exception handling format for the target. Defaults to None.
Definition: MCAsmInfo.h:326
bool UseDataRegionDirectives
This is true if data region markers should be printed as ".data_region/.end_data_region" directives...
Definition: MCAsmInfo.h:158
const MCExpr * getExprForPersonalitySymbol(const MCSymbol *Sym, unsigned Encoding, MCStreamer &Streamer) const override
No exception support.
StringRef PrivateGlobalPrefix
This prefix is used for globals like constant pool entries that are completely private to the ...
Definition: MCAsmInfo.h:120
char * PC