LLVM 20.0.0git
AArch64MCAsmInfo.cpp
Go to the documentation of this file.
1//===-- AArch64MCAsmInfo.cpp - AArch64 asm properties ---------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file contains the declarations of the AArch64MCAsmInfo properties.
10//
11//===----------------------------------------------------------------------===//
12
13#include "AArch64MCAsmInfo.h"
14#include "llvm/MC/MCContext.h"
15#include "llvm/MC/MCExpr.h"
16#include "llvm/MC/MCStreamer.h"
19using namespace llvm;
20
22 Default = -1,
24 Apple = 1
25};
26
28 "aarch64-neon-syntax", cl::init(Default),
29 cl::desc("Choose style of NEON code to emit from AArch64 backend:"),
30 cl::values(clEnumValN(Generic, "generic", "Emit generic NEON assembly"),
31 clEnumValN(Apple, "apple", "Emit Apple-style NEON assembly")));
32
34 // We prefer NEON instructions to be printed in the short, Apple-specific
35 // form when targeting Darwin.
37
40 SeparatorString = "%%";
41 CommentString = ";";
43 CodePointerSize = IsILP32 ? 4 : 8;
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 = T.getEnvironment() == Triple::GNUILP32 ? 4 : 8;
77
78 // ".comm align is in bytes but .align is pow-2."
79 AlignmentIsInBytes = false;
80
81 CommentString = "//";
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
99 HasIdentDirective = true;
100}
101
103 PrivateGlobalPrefix = ".L";
104 PrivateLabelPrefix = ".L";
105
106 Data16bitsDirective = "\t.hword\t";
107 Data32bitsDirective = "\t.word\t";
108 Data64bitsDirective = "\t.xword\t";
109
110 AlignmentIsInBytes = false;
112 CodePointerSize = 8;
113
114 CommentString = "//";
117}
118
120 PrivateGlobalPrefix = ".L";
121 PrivateLabelPrefix = ".L";
122
123 Data16bitsDirective = "\t.hword\t";
124 Data32bitsDirective = "\t.word\t";
125 Data64bitsDirective = "\t.xword\t";
126
127 AlignmentIsInBytes = false;
129 CodePointerSize = 8;
130
131 CommentString = "//";
134}
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")))
AsmWriterVariantTy
@ Default
@ Generic
@ Apple
#define clEnumValN(ENUMVAL, FLAGNAME, DESC)
Definition: CommandLine.h:686
Symbol * Sym
Definition: ELF_riscv.cpp:479
const char * Data16bitsDirective
Definition: MCAsmInfo.h:281
const char * Code32Directive
Definition: MCAsmInfo.h:181
const char * Data64bitsDirective
Definition: MCAsmInfo.h:283
ExceptionHandling ExceptionsType
Exception handling format for the target. Defaults to None.
Definition: MCAsmInfo.h:426
StringRef PrivateGlobalPrefix
This prefix is used for globals like constant pool entries that are completely private to the ....
Definition: MCAsmInfo.h:160
const char * Data32bitsDirective
Definition: MCAsmInfo.h:282
WinEH::EncodingType WinEHEncodingType
Windows exception handling data (.pdata) encoding. Defaults to Invalid.
Definition: MCAsmInfo.h:433
const char * WeakRefDirective
This directive, if non-null, is used to declare a global as being a weak undefined symbol.
Definition: MCAsmInfo.h:390
StringRef PrivateLabelPrefix
This prefix is used for labels for basic blocks.
Definition: MCAsmInfo.h:164
bool UsesELFSectionDirectiveForBSS
This is true if this target uses ELF '.section' directive before the '.bss' one.
Definition: MCAsmInfo.h:314
bool SupportsDebugInformation
True if target supports emission of debugging information.
Definition: MCAsmInfo.h:423
unsigned AssemblerDialect
Which dialect of an assembler variant to use. Defaults to 0.
Definition: MCAsmInfo.h:185
const char * SeparatorString
This string, if specified, is used to separate instructions from each other when on the same line.
Definition: MCAsmInfo.h:123
bool HasIdentDirective
True if the target has a .ident directive, this is true for ELF targets.
Definition: MCAsmInfo.h:379
bool AlignmentIsInBytes
If this is true (the default) then the asmprinter emits ".align N" directives, where N is the number ...
Definition: MCAsmInfo.h:324
bool UseDataRegionDirectives
This is true if data region markers should be printed as ".data_region/.end_data_region" directives.
Definition: MCAsmInfo.h:226
bool IsLittleEndian
True if target is little endian. Default is true.
Definition: MCAsmInfo.h:79
unsigned CodePointerSize
Code pointer size in bytes. Default is 4.
Definition: MCAsmInfo.h:72
unsigned CalleeSaveStackSlotSize
Size of the stack slot reserved for callee-saved registers, in bytes.
Definition: MCAsmInfo.h:76
StringRef CommentString
This indicates the comment string used by the assembler.
Definition: MCAsmInfo.h:127
static const MCBinaryExpr * createSub(const MCExpr *LHS, const MCExpr *RHS, MCContext &Ctx)
Definition: MCExpr.h:617
Context object for machine code objects.
Definition: MCContext.h:83
MCSymbol * createTempSymbol()
Create a temporary symbol with a unique name.
Definition: MCContext.cpp:346
Base class for the full range of assembler expressions which are needed for parsing.
Definition: MCExpr.h:34
Streaming machine code generation interface.
Definition: MCStreamer.h:213
MCContext & getContext() const
Definition: MCStreamer.h:300
virtual void emitLabel(MCSymbol *Symbol, SMLoc Loc=SMLoc())
Emit a label for Symbol into the current section.
Definition: MCStreamer.cpp:414
static const MCSymbolRefExpr * create(const MCSymbol *Symbol, MCContext &Ctx)
Definition: MCExpr.h:393
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:41
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
@ aarch64_be
Definition: Triple.h:52
@ Itanium
Windows CE ARM, PowerPC, SH3, SH4.
ValuesClass values(OptsTy... Options)
Helper to build a ValuesClass by forwarding a variable number of arguments as an initializer list to ...
Definition: CommandLine.h:711
initializer< Ty > init(const Ty &Val)
Definition: CommandLine.h:443
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
@ DwarfCFI
DWARF-like instruction based exceptions.
@ WinEH
Windows Exception Handling.
@ Apple
.apple_names, .apple_namespaces, .apple_types, .apple_objc.
@ Default
The result values are uniform if and only if all operands are uniform.
const MCExpr * getExprForPersonalitySymbol(const MCSymbol *Sym, unsigned Encoding, MCStreamer &Streamer) const override
AArch64MCAsmInfoELF(const Triple &T)