1 //===-- ARMMCAsmInfo.cpp - ARM asm properties -----------------------------===//
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
7 //===----------------------------------------------------------------------===//
9 // This file contains the declarations of the ARMMCAsmInfo properties.
11 //===----------------------------------------------------------------------===//
13 #include "ARMMCAsmInfo.h"
14 #include "llvm/ADT/Triple.h"
18 void ARMMCAsmInfoDarwin::anchor() { }
20 ARMMCAsmInfoDarwin::ARMMCAsmInfoDarwin(const Triple
&TheTriple
) {
21 if ((TheTriple
.getArch() == Triple::armeb
) ||
22 (TheTriple
.getArch() == Triple::thumbeb
))
23 IsLittleEndian
= false;
25 Data64bitsDirective
= nullptr;
27 Code16Directive
= ".code\t16";
28 Code32Directive
= ".code\t32";
29 UseDataRegionDirectives
= true;
31 SupportsDebugInformation
= true;
33 // Conditional Thumb 4-byte instructions can have an implicit IT.
36 // Exceptions handling
37 ExceptionsType
= (TheTriple
.isOSDarwin() && !TheTriple
.isWatchABI())
38 ? ExceptionHandling::SjLj
39 : ExceptionHandling::DwarfCFI
;
41 UseIntegratedAssembler
= true;
44 void ARMELFMCAsmInfo::anchor() { }
46 ARMELFMCAsmInfo::ARMELFMCAsmInfo(const Triple
&TheTriple
) {
47 if ((TheTriple
.getArch() == Triple::armeb
) ||
48 (TheTriple
.getArch() == Triple::thumbeb
))
49 IsLittleEndian
= false;
51 // ".comm align is in bytes but .align is pow-2."
52 AlignmentIsInBytes
= false;
54 Data64bitsDirective
= nullptr;
56 Code16Directive
= ".code\t16";
57 Code32Directive
= ".code\t32";
59 SupportsDebugInformation
= true;
61 // Conditional Thumb 4-byte instructions can have an implicit IT.
64 // Exceptions handling
65 switch (TheTriple
.getOS()) {
67 ExceptionsType
= ExceptionHandling::DwarfCFI
;
70 ExceptionsType
= ExceptionHandling::ARM
;
74 // foo(plt) instead of foo@plt
75 UseParensForSymbolVariant
= true;
77 UseIntegratedAssembler
= true;
80 void ARMELFMCAsmInfo::setUseIntegratedAssembler(bool Value
) {
81 UseIntegratedAssembler
= Value
;
82 if (!UseIntegratedAssembler
) {
83 // gas doesn't handle VFP register names in cfi directives,
84 // so don't use register names with external assembler.
85 // See https://sourceware.org/bugzilla/show_bug.cgi?id=16694
86 DwarfRegNumForCFI
= true;
90 void ARMCOFFMCAsmInfoMicrosoft::anchor() { }
92 ARMCOFFMCAsmInfoMicrosoft::ARMCOFFMCAsmInfoMicrosoft() {
93 AlignmentIsInBytes
= false;
94 ExceptionsType
= ExceptionHandling::WinEH
;
95 PrivateGlobalPrefix
= "$M";
96 PrivateLabelPrefix
= "$M";
99 // Conditional Thumb 4-byte instructions can have an implicit IT.
103 void ARMCOFFMCAsmInfoGNU::anchor() { }
105 ARMCOFFMCAsmInfoGNU::ARMCOFFMCAsmInfoGNU() {
106 AlignmentIsInBytes
= false;
107 HasSingleParameterDotFile
= true;
110 Code16Directive
= ".code\t16";
111 Code32Directive
= ".code\t32";
112 PrivateGlobalPrefix
= ".L";
113 PrivateLabelPrefix
= ".L";
115 SupportsDebugInformation
= true;
116 ExceptionsType
= ExceptionHandling::DwarfCFI
;
117 UseParensForSymbolVariant
= true;
119 UseIntegratedAssembler
= true;
120 DwarfRegNumForCFI
= false;
122 // Conditional Thumb 4-byte instructions can have an implicit IT.