| //===-- ARMMCAsmInfo.cpp - ARM asm properties -----------------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This file contains the declarations of the ARMMCAsmInfo properties. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "ARMMCAsmInfo.h" | |
| #include "llvm/ADT/Triple.h" | |
| using namespace llvm; | |
| void ARMMCAsmInfoDarwin::anchor() { } | |
| ARMMCAsmInfoDarwin::ARMMCAsmInfoDarwin(const Triple &TheTriple) { | |
| if ((TheTriple.getArch() == Triple::armeb) || | |
| (TheTriple.getArch() == Triple::thumbeb)) | |
| IsLittleEndian = false; | |
| Data64bitsDirective = nullptr; | |
| CommentString = "@"; | |
| Code16Directive = ".code\t16"; | |
| Code32Directive = ".code\t32"; | |
| UseDataRegionDirectives = true; | |
| SupportsDebugInformation = true; | |
| // Conditional Thumb 4-byte instructions can have an implicit IT. | |
| MaxInstLength = 6; | |
| // Exceptions handling | |
| ExceptionsType = (TheTriple.isOSDarwin() && !TheTriple.isWatchABI()) | |
| ? ExceptionHandling::SjLj | |
| : ExceptionHandling::DwarfCFI; | |
| UseIntegratedAssembler = true; | |
| } | |
| void ARMELFMCAsmInfo::anchor() { } | |
| ARMELFMCAsmInfo::ARMELFMCAsmInfo(const Triple &TheTriple) { | |
| if ((TheTriple.getArch() == Triple::armeb) || | |
| (TheTriple.getArch() == Triple::thumbeb)) | |
| IsLittleEndian = false; | |
| // ".comm align is in bytes but .align is pow-2." | |
| AlignmentIsInBytes = false; | |
| Data64bitsDirective = nullptr; | |
| CommentString = "@"; | |
| Code16Directive = ".code\t16"; | |
| Code32Directive = ".code\t32"; | |
| SupportsDebugInformation = true; | |
| // Conditional Thumb 4-byte instructions can have an implicit IT. | |
| MaxInstLength = 6; | |
| // Exceptions handling | |
| switch (TheTriple.getOS()) { | |
| case Triple::NetBSD: | |
| ExceptionsType = ExceptionHandling::DwarfCFI; | |
| break; | |
| default: | |
| ExceptionsType = ExceptionHandling::ARM; | |
| break; | |
| } | |
| // foo(plt) instead of foo@plt | |
| UseParensForSymbolVariant = true; | |
| UseIntegratedAssembler = true; | |
| } | |
| void ARMELFMCAsmInfo::setUseIntegratedAssembler(bool Value) { | |
| UseIntegratedAssembler = Value; | |
| if (!UseIntegratedAssembler) { | |
| // gas doesn't handle VFP register names in cfi directives, | |
| // so don't use register names with external assembler. | |
| // See https://sourceware.org/bugzilla/show_bug.cgi?id=16694 | |
| DwarfRegNumForCFI = true; | |
| } | |
| } | |
| void ARMCOFFMCAsmInfoMicrosoft::anchor() { } | |
| ARMCOFFMCAsmInfoMicrosoft::ARMCOFFMCAsmInfoMicrosoft() { | |
| AlignmentIsInBytes = false; | |
| ExceptionsType = ExceptionHandling::WinEH; | |
| PrivateGlobalPrefix = "$M"; | |
| PrivateLabelPrefix = "$M"; | |
| CommentString = ";"; | |
| // Conditional Thumb 4-byte instructions can have an implicit IT. | |
| MaxInstLength = 6; | |
| } | |
| void ARMCOFFMCAsmInfoGNU::anchor() { } | |
| ARMCOFFMCAsmInfoGNU::ARMCOFFMCAsmInfoGNU() { | |
| AlignmentIsInBytes = false; | |
| HasSingleParameterDotFile = true; | |
| CommentString = "@"; | |
| Code16Directive = ".code\t16"; | |
| Code32Directive = ".code\t32"; | |
| PrivateGlobalPrefix = ".L"; | |
| PrivateLabelPrefix = ".L"; | |
| SupportsDebugInformation = true; | |
| ExceptionsType = ExceptionHandling::DwarfCFI; | |
| UseParensForSymbolVariant = true; | |
| UseIntegratedAssembler = true; | |
| DwarfRegNumForCFI = false; | |
| // Conditional Thumb 4-byte instructions can have an implicit IT. | |
| MaxInstLength = 6; | |
| } |