LCOV - code coverage report
Current view: top level - lib/Target/AArch64/MCTargetDesc - AArch64MCAsmInfo.cpp (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 56 62 90.3 %
Date: 2018-02-23 15:42:53 Functions: 7 8 87.5 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===-- AArch64MCAsmInfo.cpp - AArch64 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 AArch64MCAsmInfo properties.
      11             : //
      12             : //===----------------------------------------------------------------------===//
      13             : 
      14             : #include "AArch64MCAsmInfo.h"
      15             : #include "llvm/ADT/Triple.h"
      16             : #include "llvm/MC/MCContext.h"
      17             : #include "llvm/MC/MCExpr.h"
      18             : #include "llvm/MC/MCStreamer.h"
      19             : #include "llvm/Support/CommandLine.h"
      20             : using namespace llvm;
      21             : 
      22             : enum AsmWriterVariantTy {
      23             :   Default = -1,
      24             :   Generic = 0,
      25             :   Apple = 1
      26             : };
      27             : 
      28       81686 : static cl::opt<AsmWriterVariantTy> AsmWriterVariant(
      29      163372 :     "aarch64-neon-syntax", cl::init(Default),
      30       81686 :     cl::desc("Choose style of NEON code to emit from AArch64 backend:"),
      31       81686 :     cl::values(clEnumValN(Generic, "generic", "Emit generic NEON assembly"),
      32       81686 :                clEnumValN(Apple, "apple", "Emit Apple-style NEON assembly")));
      33             : 
      34         503 : AArch64MCAsmInfoDarwin::AArch64MCAsmInfoDarwin() {
      35             :   // We prefer NEON instructions to be printed in the short, Apple-specific
      36             :   // form when targeting Darwin.
      37         503 :   AssemblerDialect = AsmWriterVariant == Default ? Apple : AsmWriterVariant;
      38             : 
      39         503 :   PrivateGlobalPrefix = "L";
      40         503 :   PrivateLabelPrefix = "L";
      41         503 :   SeparatorString = "%%";
      42         503 :   CommentString = ";";
      43         503 :   CodePointerSize = CalleeSaveStackSlotSize = 8;
      44             : 
      45         503 :   AlignmentIsInBytes = false;
      46         503 :   UsesELFSectionDirectiveForBSS = true;
      47         503 :   SupportsDebugInformation = true;
      48         503 :   UseDataRegionDirectives = true;
      49             : 
      50         503 :   ExceptionsType = ExceptionHandling::DwarfCFI;
      51         503 : }
      52             : 
      53           0 : const MCExpr *AArch64MCAsmInfoDarwin::getExprForPersonalitySymbol(
      54             :     const MCSymbol *Sym, unsigned Encoding, MCStreamer &Streamer) const {
      55             :   // On Darwin, we can reference dwarf symbols with foo@GOT-., which
      56             :   // is an indirect pc-relative reference. The default implementation
      57             :   // won't reference using the GOT, so we need this target-specific
      58             :   // version.
      59           0 :   MCContext &Context = Streamer.getContext();
      60             :   const MCExpr *Res =
      61           0 :       MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_GOT, Context);
      62           0 :   MCSymbol *PCSym = Context.createTempSymbol();
      63           0 :   Streamer.EmitLabel(PCSym);
      64             :   const MCExpr *PC = MCSymbolRefExpr::create(PCSym, Context);
      65           0 :   return MCBinaryExpr::createSub(Res, PC, Context);
      66             : }
      67             : 
      68        1712 : AArch64MCAsmInfoELF::AArch64MCAsmInfoELF(const Triple &T) {
      69        1712 :   if (T.getArch() == Triple::aarch64_be)
      70          39 :     IsLittleEndian = false;
      71             : 
      72             :   // We prefer NEON instructions to be printed in the generic form when
      73             :   // targeting ELF.
      74        1712 :   AssemblerDialect = AsmWriterVariant == Default ? Generic : AsmWriterVariant;
      75             : 
      76        1712 :   CodePointerSize = 8;
      77             : 
      78             :   // ".comm align is in bytes but .align is pow-2."
      79        1712 :   AlignmentIsInBytes = false;
      80             : 
      81        1712 :   CommentString = "//";
      82        1712 :   PrivateGlobalPrefix = ".L";
      83        1712 :   PrivateLabelPrefix = ".L";
      84        1712 :   Code32Directive = ".code\t32";
      85             : 
      86        1712 :   Data16bitsDirective = "\t.hword\t";
      87        1712 :   Data32bitsDirective = "\t.word\t";
      88        1712 :   Data64bitsDirective = "\t.xword\t";
      89             : 
      90        1712 :   UseDataRegionDirectives = false;
      91             : 
      92        1712 :   WeakRefDirective = "\t.weak\t";
      93             : 
      94        1712 :   SupportsDebugInformation = true;
      95             : 
      96             :   // Exceptions handling
      97        1712 :   ExceptionsType = ExceptionHandling::DwarfCFI;
      98             : 
      99        1712 :   UseIntegratedAssembler = true;
     100             : 
     101        1712 :   HasIdentDirective = true;
     102        1712 : }
     103             : 
     104          26 : AArch64MCAsmInfoCOFF::AArch64MCAsmInfoCOFF() {
     105          26 :   PrivateGlobalPrefix = ".L";
     106          26 :   PrivateLabelPrefix = ".L";
     107             : 
     108          26 :   Data16bitsDirective = "\t.hword\t";
     109          26 :   Data32bitsDirective = "\t.word\t";
     110          26 :   Data64bitsDirective = "\t.xword\t";
     111             : 
     112          26 :   AlignmentIsInBytes = false;
     113          26 :   SupportsDebugInformation = true;
     114          26 :   CodePointerSize = 8;
     115          26 : }
     116             : 
     117          21 : AArch64MCAsmInfoMicrosoftCOFF::AArch64MCAsmInfoMicrosoftCOFF() {
     118          21 :   CommentString = ";";
     119          21 :   ExceptionsType = ExceptionHandling::WinEH;
     120          21 : }
     121             : 
     122           5 : AArch64MCAsmInfoGNUCOFF::AArch64MCAsmInfoGNUCOFF() {
     123           5 :   CommentString = "//";
     124           5 :   ExceptionsType = ExceptionHandling::DwarfCFI;
     125      245063 : }

Generated by: LCOV version 1.13