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