1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | //===-- 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; } 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; } 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; DwarfRegNumForCFI = false; // Conditional Thumb 4-byte instructions can have an implicit IT. MaxInstLength = 6; } |