LLVM  3.7.0
ARMAsmBackend.h
Go to the documentation of this file.
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 
14 #include "llvm/MC/MCAsmBackend.h"
16 
17 using namespace llvm;
18 
19 namespace {
20 
21 class ARMAsmBackend : public MCAsmBackend {
22  const MCSubtargetInfo *STI;
23  bool isThumbMode; // Currently emitting Thumb code.
24  bool IsLittleEndian; // Big or little endian.
25 public:
26  ARMAsmBackend(const Target &T, const Triple &TT, bool IsLittle)
27  : MCAsmBackend(), STI(ARM_MC::createARMMCSubtargetInfo(TT, "", "")),
28  isThumbMode(TT.getArchName().startswith("thumb")),
29  IsLittleEndian(IsLittle) {}
30 
31  ~ARMAsmBackend() override { delete STI; }
32 
33  unsigned getNumFixupKinds() const override {
35  }
36 
37  bool hasNOP() const { return STI->getFeatureBits()[ARM::HasV6T2Ops]; }
38 
39  const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const override;
40 
41  /// processFixupValue - Target hook to process the literal value of a fixup
42  /// if necessary.
43  void processFixupValue(const MCAssembler &Asm, const MCAsmLayout &Layout,
44  const MCFixup &Fixup, const MCFragment *DF,
45  const MCValue &Target, uint64_t &Value,
46  bool &IsResolved) override;
47 
48  void applyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize,
49  uint64_t Value, bool IsPCRel) const override;
50 
51  unsigned getRelaxedOpcode(unsigned Op) const;
52 
53  bool mayNeedRelaxation(const MCInst &Inst) const override;
54 
55  bool fixupNeedsRelaxation(const MCFixup &Fixup, uint64_t Value,
56  const MCRelaxableFragment *DF,
57  const MCAsmLayout &Layout) const override;
58 
59  void relaxInstruction(const MCInst &Inst, MCInst &Res) const override;
60 
61  bool writeNopData(uint64_t Count, MCObjectWriter *OW) const override;
62 
63  void handleAssemblerFlag(MCAssemblerFlag Flag) override;
64 
65  unsigned getPointerSize() const { return 4; }
66  bool isThumb() const { return isThumbMode; }
67  void setIsThumb(bool it) { isThumbMode = it; }
68  bool isLittle() const { return IsLittleEndian; }
69 };
70 } // end anonymous namespace
71 
72 #endif
This represents an "assembler immediate".
Definition: MCValue.h:44
Defines the object file and target independent interfaces used by the assembler backend to write nati...
static bool isThumb(const MCSubtargetInfo &STI)
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...
Definition: MCFixup.h:62
Encapsulates the layout of an assembly file at a particular point in time.
Definition: MCAsmLayout.h:29
static unsigned getRelaxedOpcode(unsigned Op)
static uint64_t getPointerSize(const Value *V, const DataLayout &DL, const TargetLibraryInfo *TLI)
Instances of this class represent a single low-level machine instruction.
Definition: MCInst.h:150
Flag
These should be considered private to the implementation of the MCInstrDesc class.
Definition: MCInstrDesc.h:97
A relaxable fragment holds on to its MCInst, since it may need to be relaxed during the assembler lay...
Definition: MCAssembler.h:259
MCFixupKind
Extensible enumeration to represent the type of a fixup.
Definition: MCFixup.h:23
MCSubtargetInfo * createARMMCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS)
Create a ARM MCSubtargetInfo instance.
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
PowerPC TLS Dynamic Call Fixup
Target - Wrapper for Target specific information.
MCAssemblerFlag
Definition: MCDirectives.h:47
MCSubtargetInfo - Generic base class for all target subtargets.
Target independent information on a fixup kind.
const ARM::ArchExtKind Kind
LLVM Value Representation.
Definition: Value.h:69
Generic interface to target specific assembler backends.
Definition: MCAsmBackend.h:34