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-07-13 00:08:38 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       99743 : static cl::opt<AsmWriterVariantTy> AsmWriterVariant(
      29      199486 :     "aarch64-neon-syntax", cl::init(Default),
      30       99743 :     cl::desc("Choose style of NEON code to emit from AArch64 backend:"),
      31       99743 :     cl::values(clEnumValN(Generic, "generic", "Emit generic NEON assembly"),
      32       99743 :                clEnumValN(Apple, "apple", "Emit Apple-style NEON assembly")));
      33             : 
      34         524 : AArch64MCAsmInfoDarwin::AArch64MCAsmInfoDarwin() {
      35             :   // We prefer NEON instructions to be printed in the short, Apple-specific
      36             :   // form when targeting Darwin.
      37         524 :   AssemblerDialect = AsmWriterVariant == Default ? Apple : AsmWriterVariant;
      38             : 
      39         524 :   PrivateGlobalPrefix = "L";
      40         524 :   PrivateLabelPrefix = "L";
      41         524 :   SeparatorString = "%%";
      42         524 :   CommentString = ";";
      43         524 :   CodePointerSize = CalleeSaveStackSlotSize = 8;
      44             : 
      45         524 :   AlignmentIsInBytes = false;
      46         524 :   UsesELFSectionDirectiveForBSS = true;
      47         524 :   SupportsDebugInformation = true;
      48         524 :   UseDataRegionDirectives = true;
      49             : 
      50         524 :   ExceptionsType = ExceptionHandling::DwarfCFI;
      51         524 : }
      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        3389 : AArch64MCAsmInfoELF::AArch64MCAsmInfoELF(const Triple &T) {
      69        3389 :   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        3389 :   AssemblerDialect = AsmWriterVariant == Default ? Generic : AsmWriterVariant;
      75             : 
      76        3389 :   CodePointerSize = 8;
      77             : 
      78             :   // ".comm align is in bytes but .align is pow-2."
      79        3389 :   AlignmentIsInBytes = false;
      80             : 
      81        3389 :   CommentString = "//";
      82        3389 :   PrivateGlobalPrefix = ".L";
      83        3389 :   PrivateLabelPrefix = ".L";
      84        3389 :   Code32Directive = ".code\t32";
      85             : 
      86        3389 :   Data16bitsDirective = "\t.hword\t";
      87        3389 :   Data32bitsDirective = "\t.word\t";
      88        3389 :   Data64bitsDirective = "\t.xword\t";
      89             : 
      90        3389 :   UseDataRegionDirectives = false;
      91             : 
      92        3389 :   WeakRefDirective = "\t.weak\t";
      93             : 
      94        3389 :   SupportsDebugInformation = true;
      95             : 
      96             :   // Exceptions handling
      97        3389 :   ExceptionsType = ExceptionHandling::DwarfCFI;
      98             : 
      99        3389 :   UseIntegratedAssembler = true;
     100             : 
     101        3389 :   HasIdentDirective = true;
     102        3389 : }
     103             : 
     104          38 : AArch64MCAsmInfoCOFF::AArch64MCAsmInfoCOFF() {
     105          38 :   PrivateGlobalPrefix = ".L";
     106          38 :   PrivateLabelPrefix = ".L";
     107             : 
     108          38 :   Data16bitsDirective = "\t.hword\t";
     109          38 :   Data32bitsDirective = "\t.word\t";
     110          38 :   Data64bitsDirective = "\t.xword\t";
     111             : 
     112          38 :   AlignmentIsInBytes = false;
     113          38 :   SupportsDebugInformation = true;
     114          38 :   CodePointerSize = 8;
     115          38 : }
     116             : 
     117          33 : AArch64MCAsmInfoMicrosoftCOFF::AArch64MCAsmInfoMicrosoftCOFF() {
     118          33 :   CommentString = ";";
     119          33 :   ExceptionsType = ExceptionHandling::WinEH;
     120          33 : }
     121             : 
     122           5 : AArch64MCAsmInfoGNUCOFF::AArch64MCAsmInfoGNUCOFF() {
     123           5 :   CommentString = "//";
     124           5 :   ExceptionsType = ExceptionHandling::DwarfCFI;
     125      299234 : }

Generated by: LCOV version 1.13