LCOV - code coverage report
Current view: top level - lib/Target/AArch64/MCTargetDesc - AArch64MCAsmInfo.cpp (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 51 58 87.9 %
Date: 2017-09-14 15:23:50 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       72306 : static cl::opt<AsmWriterVariantTy> AsmWriterVariant(
      29      216918 :     "aarch64-neon-syntax", cl::init(Default),
      30      216918 :     cl::desc("Choose style of NEON code to emit from AArch64 backend:"),
      31      216918 :     cl::values(clEnumValN(Generic, "generic", "Emit generic NEON assembly"),
      32       72306 :                clEnumValN(Apple, "apple", "Emit Apple-style NEON assembly")));
      33             : 
      34         478 : AArch64MCAsmInfoDarwin::AArch64MCAsmInfoDarwin() {
      35             :   // We prefer NEON instructions to be printed in the short, Apple-specific
      36             :   // form when targeting Darwin.
      37         489 :   AssemblerDialect = AsmWriterVariant == Default ? Apple : AsmWriterVariant;
      38             : 
      39         478 :   PrivateGlobalPrefix = "L";
      40         478 :   PrivateLabelPrefix = "L";
      41         478 :   SeparatorString = "%%";
      42         478 :   CommentString = ";";
      43         478 :   CodePointerSize = CalleeSaveStackSlotSize = 8;
      44             : 
      45         478 :   AlignmentIsInBytes = false;
      46         478 :   UsesELFSectionDirectiveForBSS = true;
      47         478 :   SupportsDebugInformation = true;
      48         478 :   UseDataRegionDirectives = true;
      49             : 
      50         478 :   ExceptionsType = ExceptionHandling::DwarfCFI;
      51         478 : }
      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           0 :   const MCExpr *PC = MCSymbolRefExpr::create(PCSym, Context);
      65           0 :   return MCBinaryExpr::createSub(Res, PC, Context);
      66             : }
      67             : 
      68        1482 : AArch64MCAsmInfoELF::AArch64MCAsmInfoELF(const Triple &T) {
      69        1482 :   if (T.getArch() == Triple::aarch64_be)
      70          34 :     IsLittleEndian = false;
      71             : 
      72             :   // We prefer NEON instructions to be printed in the generic form when
      73             :   // targeting ELF.
      74        1576 :   AssemblerDialect = AsmWriterVariant == Default ? Generic : AsmWriterVariant;
      75             : 
      76        1482 :   CodePointerSize = 8;
      77             : 
      78             :   // ".comm align is in bytes but .align is pow-2."
      79        1482 :   AlignmentIsInBytes = false;
      80             : 
      81        1482 :   CommentString = "//";
      82        1482 :   PrivateGlobalPrefix = ".L";
      83        1482 :   PrivateLabelPrefix = ".L";
      84        1482 :   Code32Directive = ".code\t32";
      85             : 
      86        1482 :   Data16bitsDirective = "\t.hword\t";
      87        1482 :   Data32bitsDirective = "\t.word\t";
      88        1482 :   Data64bitsDirective = "\t.xword\t";
      89             : 
      90        1482 :   UseDataRegionDirectives = false;
      91             : 
      92        1482 :   WeakRefDirective = "\t.weak\t";
      93             : 
      94        1482 :   SupportsDebugInformation = true;
      95             : 
      96             :   // Exceptions handling
      97        1482 :   ExceptionsType = ExceptionHandling::DwarfCFI;
      98             : 
      99        1482 :   UseIntegratedAssembler = true;
     100             : 
     101        1482 :   HasIdentDirective = true;
     102        1482 : }
     103             : 
     104          14 : AArch64MCAsmInfoCOFF::AArch64MCAsmInfoCOFF() {
     105          14 :   PrivateGlobalPrefix = ".L";
     106          14 :   PrivateLabelPrefix = ".L";
     107          14 :   AlignmentIsInBytes = false;
     108          14 :   SupportsDebugInformation = true;
     109          14 :   ExceptionsType = ExceptionHandling::WinEH;
     110          14 : }
     111             : 
     112          11 : AArch64MCAsmInfoMicrosoftCOFF::AArch64MCAsmInfoMicrosoftCOFF() {
     113          11 :   CommentString = ";";
     114          11 : }
     115             : 
     116           3 : AArch64MCAsmInfoGNUCOFF::AArch64MCAsmInfoGNUCOFF() {
     117           3 :   CommentString = "//";
     118      216921 : }

Generated by: LCOV version 1.13