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