xref: /aosp_15_r20/external/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===-- ARMMCAsmInfo.cpp - ARM asm properties -----------------------------===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker //
10*9880d681SAndroid Build Coastguard Worker // This file contains the declarations of the ARMMCAsmInfo properties.
11*9880d681SAndroid Build Coastguard Worker //
12*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
13*9880d681SAndroid Build Coastguard Worker 
14*9880d681SAndroid Build Coastguard Worker #include "ARMMCAsmInfo.h"
15*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/Triple.h"
16*9880d681SAndroid Build Coastguard Worker 
17*9880d681SAndroid Build Coastguard Worker using namespace llvm;
18*9880d681SAndroid Build Coastguard Worker 
anchor()19*9880d681SAndroid Build Coastguard Worker void ARMMCAsmInfoDarwin::anchor() { }
20*9880d681SAndroid Build Coastguard Worker 
ARMMCAsmInfoDarwin(const Triple & TheTriple)21*9880d681SAndroid Build Coastguard Worker ARMMCAsmInfoDarwin::ARMMCAsmInfoDarwin(const Triple &TheTriple) {
22*9880d681SAndroid Build Coastguard Worker   if ((TheTriple.getArch() == Triple::armeb) ||
23*9880d681SAndroid Build Coastguard Worker       (TheTriple.getArch() == Triple::thumbeb))
24*9880d681SAndroid Build Coastguard Worker     IsLittleEndian = false;
25*9880d681SAndroid Build Coastguard Worker 
26*9880d681SAndroid Build Coastguard Worker   Data64bitsDirective = nullptr;
27*9880d681SAndroid Build Coastguard Worker   CommentString = "@";
28*9880d681SAndroid Build Coastguard Worker   Code16Directive = ".code\t16";
29*9880d681SAndroid Build Coastguard Worker   Code32Directive = ".code\t32";
30*9880d681SAndroid Build Coastguard Worker   UseDataRegionDirectives = true;
31*9880d681SAndroid Build Coastguard Worker 
32*9880d681SAndroid Build Coastguard Worker   SupportsDebugInformation = true;
33*9880d681SAndroid Build Coastguard Worker 
34*9880d681SAndroid Build Coastguard Worker   // Exceptions handling
35*9880d681SAndroid Build Coastguard Worker   ExceptionsType = (TheTriple.isOSDarwin() && !TheTriple.isWatchABI())
36*9880d681SAndroid Build Coastguard Worker                        ? ExceptionHandling::SjLj
37*9880d681SAndroid Build Coastguard Worker                        : ExceptionHandling::DwarfCFI;
38*9880d681SAndroid Build Coastguard Worker 
39*9880d681SAndroid Build Coastguard Worker   UseIntegratedAssembler = true;
40*9880d681SAndroid Build Coastguard Worker }
41*9880d681SAndroid Build Coastguard Worker 
anchor()42*9880d681SAndroid Build Coastguard Worker void ARMELFMCAsmInfo::anchor() { }
43*9880d681SAndroid Build Coastguard Worker 
ARMELFMCAsmInfo(const Triple & TheTriple)44*9880d681SAndroid Build Coastguard Worker ARMELFMCAsmInfo::ARMELFMCAsmInfo(const Triple &TheTriple) {
45*9880d681SAndroid Build Coastguard Worker   if ((TheTriple.getArch() == Triple::armeb) ||
46*9880d681SAndroid Build Coastguard Worker       (TheTriple.getArch() == Triple::thumbeb))
47*9880d681SAndroid Build Coastguard Worker     IsLittleEndian = false;
48*9880d681SAndroid Build Coastguard Worker 
49*9880d681SAndroid Build Coastguard Worker   // ".comm align is in bytes but .align is pow-2."
50*9880d681SAndroid Build Coastguard Worker   AlignmentIsInBytes = false;
51*9880d681SAndroid Build Coastguard Worker 
52*9880d681SAndroid Build Coastguard Worker   Data64bitsDirective = nullptr;
53*9880d681SAndroid Build Coastguard Worker   CommentString = "@";
54*9880d681SAndroid Build Coastguard Worker   Code16Directive = ".code\t16";
55*9880d681SAndroid Build Coastguard Worker   Code32Directive = ".code\t32";
56*9880d681SAndroid Build Coastguard Worker 
57*9880d681SAndroid Build Coastguard Worker   SupportsDebugInformation = true;
58*9880d681SAndroid Build Coastguard Worker 
59*9880d681SAndroid Build Coastguard Worker   // Exceptions handling
60*9880d681SAndroid Build Coastguard Worker   switch (TheTriple.getOS()) {
61*9880d681SAndroid Build Coastguard Worker   case Triple::Bitrig:
62*9880d681SAndroid Build Coastguard Worker   case Triple::NetBSD:
63*9880d681SAndroid Build Coastguard Worker     ExceptionsType = ExceptionHandling::DwarfCFI;
64*9880d681SAndroid Build Coastguard Worker     break;
65*9880d681SAndroid Build Coastguard Worker   default:
66*9880d681SAndroid Build Coastguard Worker     ExceptionsType = ExceptionHandling::ARM;
67*9880d681SAndroid Build Coastguard Worker     break;
68*9880d681SAndroid Build Coastguard Worker   }
69*9880d681SAndroid Build Coastguard Worker 
70*9880d681SAndroid Build Coastguard Worker   // foo(plt) instead of foo@plt
71*9880d681SAndroid Build Coastguard Worker   UseParensForSymbolVariant = true;
72*9880d681SAndroid Build Coastguard Worker 
73*9880d681SAndroid Build Coastguard Worker   UseIntegratedAssembler = true;
74*9880d681SAndroid Build Coastguard Worker }
75*9880d681SAndroid Build Coastguard Worker 
setUseIntegratedAssembler(bool Value)76*9880d681SAndroid Build Coastguard Worker void ARMELFMCAsmInfo::setUseIntegratedAssembler(bool Value) {
77*9880d681SAndroid Build Coastguard Worker   UseIntegratedAssembler = Value;
78*9880d681SAndroid Build Coastguard Worker   if (!UseIntegratedAssembler) {
79*9880d681SAndroid Build Coastguard Worker     // gas doesn't handle VFP register names in cfi directives,
80*9880d681SAndroid Build Coastguard Worker     // so don't use register names with external assembler.
81*9880d681SAndroid Build Coastguard Worker     // See https://sourceware.org/bugzilla/show_bug.cgi?id=16694
82*9880d681SAndroid Build Coastguard Worker     DwarfRegNumForCFI = true;
83*9880d681SAndroid Build Coastguard Worker   }
84*9880d681SAndroid Build Coastguard Worker }
85*9880d681SAndroid Build Coastguard Worker 
anchor()86*9880d681SAndroid Build Coastguard Worker void ARMCOFFMCAsmInfoMicrosoft::anchor() { }
87*9880d681SAndroid Build Coastguard Worker 
ARMCOFFMCAsmInfoMicrosoft()88*9880d681SAndroid Build Coastguard Worker ARMCOFFMCAsmInfoMicrosoft::ARMCOFFMCAsmInfoMicrosoft() {
89*9880d681SAndroid Build Coastguard Worker   AlignmentIsInBytes = false;
90*9880d681SAndroid Build Coastguard Worker 
91*9880d681SAndroid Build Coastguard Worker   PrivateGlobalPrefix = "$M";
92*9880d681SAndroid Build Coastguard Worker   PrivateLabelPrefix = "$M";
93*9880d681SAndroid Build Coastguard Worker }
94*9880d681SAndroid Build Coastguard Worker 
anchor()95*9880d681SAndroid Build Coastguard Worker void ARMCOFFMCAsmInfoGNU::anchor() { }
96*9880d681SAndroid Build Coastguard Worker 
ARMCOFFMCAsmInfoGNU()97*9880d681SAndroid Build Coastguard Worker ARMCOFFMCAsmInfoGNU::ARMCOFFMCAsmInfoGNU() {
98*9880d681SAndroid Build Coastguard Worker   AlignmentIsInBytes = false;
99*9880d681SAndroid Build Coastguard Worker   HasSingleParameterDotFile = true;
100*9880d681SAndroid Build Coastguard Worker 
101*9880d681SAndroid Build Coastguard Worker   CommentString = "@";
102*9880d681SAndroid Build Coastguard Worker   Code16Directive = ".code\t16";
103*9880d681SAndroid Build Coastguard Worker   Code32Directive = ".code\t32";
104*9880d681SAndroid Build Coastguard Worker   PrivateGlobalPrefix = ".L";
105*9880d681SAndroid Build Coastguard Worker   PrivateLabelPrefix = ".L";
106*9880d681SAndroid Build Coastguard Worker 
107*9880d681SAndroid Build Coastguard Worker   SupportsDebugInformation = true;
108*9880d681SAndroid Build Coastguard Worker   ExceptionsType = ExceptionHandling::None;
109*9880d681SAndroid Build Coastguard Worker   UseParensForSymbolVariant = true;
110*9880d681SAndroid Build Coastguard Worker 
111*9880d681SAndroid Build Coastguard Worker   UseIntegratedAssembler = false;
112*9880d681SAndroid Build Coastguard Worker   DwarfRegNumForCFI = true;
113*9880d681SAndroid Build Coastguard Worker }
114*9880d681SAndroid Build Coastguard Worker 
115