1234353Sdim//===-- ARMMCAsmInfo.cpp - ARM asm properties -----------------------------===// 2224133Sdim// 3224133Sdim// The LLVM Compiler Infrastructure 4224133Sdim// 5224133Sdim// This file is distributed under the University of Illinois Open Source 6224133Sdim// License. See LICENSE.TXT for details. 7224133Sdim// 8224133Sdim//===----------------------------------------------------------------------===// 9224133Sdim// 10224133Sdim// This file contains the declarations of the ARMMCAsmInfo properties. 11224133Sdim// 12224133Sdim//===----------------------------------------------------------------------===// 13224133Sdim 14224133Sdim#include "ARMMCAsmInfo.h" 15280031Sdim#include "llvm/ADT/Triple.h" 16224133Sdim#include "llvm/Support/CommandLine.h" 17224133Sdim 18224133Sdimusing namespace llvm; 19224133Sdim 20276479Sdimvoid ARMMCAsmInfoDarwin::anchor() { } 21224133Sdim 22288943SdimARMMCAsmInfoDarwin::ARMMCAsmInfoDarwin(const Triple &TheTriple) { 23276479Sdim if ((TheTriple.getArch() == Triple::armeb) || 24276479Sdim (TheTriple.getArch() == Triple::thumbeb)) 25276479Sdim IsLittleEndian = false; 26224133Sdim 27276479Sdim Data64bitsDirective = nullptr; 28224133Sdim CommentString = "@"; 29226633Sdim Code16Directive = ".code\t16"; 30226633Sdim Code32Directive = ".code\t32"; 31239462Sdim UseDataRegionDirectives = true; 32226633Sdim 33224133Sdim SupportsDebugInformation = true; 34224133Sdim 35224133Sdim // Exceptions handling 36296417Sdim ExceptionsType = TheTriple.isOSDarwin() && !TheTriple.isWatchOS() 37296417Sdim ? ExceptionHandling::SjLj 38296417Sdim : ExceptionHandling::DwarfCFI; 39276479Sdim 40276479Sdim UseIntegratedAssembler = true; 41224133Sdim} 42224133Sdim 43234353Sdimvoid ARMELFMCAsmInfo::anchor() { } 44234353Sdim 45288943SdimARMELFMCAsmInfo::ARMELFMCAsmInfo(const Triple &TheTriple) { 46276479Sdim if ((TheTriple.getArch() == Triple::armeb) || 47276479Sdim (TheTriple.getArch() == Triple::thumbeb)) 48276479Sdim IsLittleEndian = false; 49276479Sdim 50224133Sdim // ".comm align is in bytes but .align is pow-2." 51224133Sdim AlignmentIsInBytes = false; 52224133Sdim 53276479Sdim Data64bitsDirective = nullptr; 54224133Sdim CommentString = "@"; 55226633Sdim Code16Directive = ".code\t16"; 56226633Sdim Code32Directive = ".code\t32"; 57224133Sdim 58224133Sdim SupportsDebugInformation = true; 59224133Sdim 60224133Sdim // Exceptions handling 61276479Sdim switch (TheTriple.getOS()) { 62288943Sdim case Triple::Bitrig: 63276479Sdim case Triple::NetBSD: 64276479Sdim ExceptionsType = ExceptionHandling::DwarfCFI; 65276479Sdim break; 66276479Sdim default: 67224133Sdim ExceptionsType = ExceptionHandling::ARM; 68276479Sdim break; 69276479Sdim } 70276479Sdim 71276479Sdim // foo(plt) instead of foo@plt 72276479Sdim UseParensForSymbolVariant = true; 73276479Sdim 74276479Sdim UseIntegratedAssembler = true; 75224133Sdim} 76276479Sdim 77276479Sdimvoid ARMELFMCAsmInfo::setUseIntegratedAssembler(bool Value) { 78276479Sdim UseIntegratedAssembler = Value; 79276479Sdim if (!UseIntegratedAssembler) { 80276479Sdim // gas doesn't handle VFP register names in cfi directives, 81276479Sdim // so don't use register names with external assembler. 82276479Sdim // See https://sourceware.org/bugzilla/show_bug.cgi?id=16694 83276479Sdim DwarfRegNumForCFI = true; 84276479Sdim } 85276479Sdim} 86276479Sdim 87276479Sdimvoid ARMCOFFMCAsmInfoMicrosoft::anchor() { } 88276479Sdim 89276479SdimARMCOFFMCAsmInfoMicrosoft::ARMCOFFMCAsmInfoMicrosoft() { 90276479Sdim AlignmentIsInBytes = false; 91276479Sdim 92276479Sdim PrivateGlobalPrefix = "$M"; 93280031Sdim PrivateLabelPrefix = "$M"; 94276479Sdim} 95276479Sdim 96276479Sdimvoid ARMCOFFMCAsmInfoGNU::anchor() { } 97276479Sdim 98276479SdimARMCOFFMCAsmInfoGNU::ARMCOFFMCAsmInfoGNU() { 99276479Sdim AlignmentIsInBytes = false; 100276479Sdim HasSingleParameterDotFile = true; 101276479Sdim 102276479Sdim CommentString = "@"; 103276479Sdim Code16Directive = ".code\t16"; 104276479Sdim Code32Directive = ".code\t32"; 105276479Sdim PrivateGlobalPrefix = ".L"; 106280031Sdim PrivateLabelPrefix = ".L"; 107276479Sdim 108276479Sdim SupportsDebugInformation = true; 109276479Sdim ExceptionsType = ExceptionHandling::None; 110276479Sdim UseParensForSymbolVariant = true; 111276479Sdim 112276479Sdim UseIntegratedAssembler = false; 113276479Sdim DwarfRegNumForCFI = true; 114276479Sdim} 115276479Sdim 116