LCOV - code coverage report
Current view: top level - lib/Target/ARM/MCTargetDesc - ARMAsmBackend.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 4 6 66.7 %
Date: 2018-07-13 00:08:38 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===-- ARMAsmBackend.h - ARM Assembler Backend -----------------*- C++ -*-===//
       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             : #ifndef LLVM_LIB_TARGET_ARM_ARMASMBACKEND_H
      11             : #define LLVM_LIB_TARGET_ARM_ARMASMBACKEND_H
      12             : 
      13             : #include "MCTargetDesc/ARMFixupKinds.h"
      14             : #include "MCTargetDesc/ARMMCTargetDesc.h"
      15             : #include "llvm/MC/MCAsmBackend.h"
      16             : #include "llvm/MC/MCSubtargetInfo.h"
      17             : #include "llvm/Support/TargetRegistry.h"
      18             : 
      19             : namespace llvm {
      20             : 
      21        3822 : class ARMAsmBackend : public MCAsmBackend {
      22             :   // The STI from the target triple the MCAsmBackend was instantiated with
      23             :   // note that MCFragments may have a different local STI that should be
      24             :   // used in preference.
      25             :   const MCSubtargetInfo &STI;
      26             :   bool isThumbMode;    // Currently emitting Thumb code.
      27             : public:
      28             :   ARMAsmBackend(const Target &T, const MCSubtargetInfo &STI,
      29             :                 support::endianness Endian)
      30        3856 :       : MCAsmBackend(Endian), STI(STI),
      31        7712 :         isThumbMode(STI.getTargetTriple().isThumb()) {}
      32             : 
      33           0 :   unsigned getNumFixupKinds() const override {
      34           0 :     return ARM::NumTargetFixupKinds;
      35             :   }
      36             : 
      37             :   // FIXME: this should be calculated per fragment as the STI may be
      38             :   // different.
      39             :   bool hasNOP() const { return STI.getFeatureBits()[ARM::HasV6T2Ops]; }
      40             : 
      41             :   const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const override;
      42             : 
      43             :   bool shouldForceRelocation(const MCAssembler &Asm, const MCFixup &Fixup,
      44             :                              const MCValue &Target) override;
      45             : 
      46             :   unsigned adjustFixupValue(const MCAssembler &Asm, const MCFixup &Fixup,
      47             :                             const MCValue &Target, uint64_t Value,
      48             :                             bool IsResolved, MCContext &Ctx,
      49             :                             const MCSubtargetInfo *STI) const;
      50             : 
      51             :   void applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
      52             :                   const MCValue &Target, MutableArrayRef<char> Data,
      53             :                   uint64_t Value, bool IsResolved,
      54             :                   const MCSubtargetInfo *STI) const override;
      55             : 
      56             :   unsigned getRelaxedOpcode(unsigned Op, const MCSubtargetInfo &STI) const;
      57             : 
      58             :   bool mayNeedRelaxation(const MCInst &Inst,
      59             :                          const MCSubtargetInfo &STI) const override;
      60             : 
      61             :   const char *reasonForFixupRelaxation(const MCFixup &Fixup,
      62             :                                        uint64_t Value) const;
      63             : 
      64             :   bool fixupNeedsRelaxation(const MCFixup &Fixup, uint64_t Value,
      65             :                             const MCRelaxableFragment *DF,
      66             :                             const MCAsmLayout &Layout) const override;
      67             : 
      68             :   void relaxInstruction(const MCInst &Inst, const MCSubtargetInfo &STI,
      69             :                         MCInst &Res) const override;
      70             : 
      71             :   bool writeNopData(raw_ostream &OS, uint64_t Count) const override;
      72             : 
      73             :   void handleAssemblerFlag(MCAssemblerFlag Flag) override;
      74             : 
      75             :   unsigned getPointerSize() const { return 4; }
      76             :   bool isThumb() const { return isThumbMode; }
      77         676 :   void setIsThumb(bool it) { isThumbMode = it; }
      78             : };
      79             : } // end namespace llvm
      80             : 
      81             : #endif

Generated by: LCOV version 1.13