LLVM  4.0.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 
15 #include "llvm/MC/MCAsmBackend.h"
18 
19 namespace llvm {
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  unsigned adjustFixupValue(const MCFixup &Fixup, uint64_t Value, bool IsPCRel,
49  MCContext *Ctx, bool IsLittleEndian,
50  bool IsResolved) const;
51 
52  void applyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize,
53  uint64_t Value, bool IsPCRel) const override;
54 
55  unsigned getRelaxedOpcode(unsigned Op) const;
56 
57  bool mayNeedRelaxation(const MCInst &Inst) const override;
58 
59  const char *reasonForFixupRelaxation(const MCFixup &Fixup,
60  uint64_t Value) const;
61 
62  bool fixupNeedsRelaxation(const MCFixup &Fixup, uint64_t Value,
63  const MCRelaxableFragment *DF,
64  const MCAsmLayout &Layout) const override;
65 
66  void relaxInstruction(const MCInst &Inst, const MCSubtargetInfo &STI,
67  MCInst &Res) const override;
68 
69  bool writeNopData(uint64_t Count, MCObjectWriter *OW) const override;
70 
72 
73  unsigned getPointerSize() const { return 4; }
74  bool isThumb() const { return isThumbMode; }
75  void setIsThumb(bool it) { isThumbMode = it; }
76  bool isLittle() const { return IsLittleEndian; }
77 };
78 } // end namespace llvm
79 
80 #endif
unsigned getNumFixupKinds() const override
Get the number of target specific fixup kinds.
Definition: ARMAsmBackend.h:33
void setIsThumb(bool it)
Definition: ARMAsmBackend.h:75
This represents an "assembler immediate".
Definition: MCValue.h:40
bool hasNOP() const
Definition: ARMAsmBackend.h:37
const char * reasonForFixupRelaxation(const MCFixup &Fixup, uint64_t Value) const
unsigned getRelaxedOpcode(unsigned Op) const
Defines the object file and target independent interfaces used by the assembler backend to write nati...
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...
Definition: MCFixup.h:66
unsigned adjustFixupValue(const MCFixup &Fixup, uint64_t Value, bool IsPCRel, MCContext *Ctx, bool IsLittleEndian, bool IsResolved) const
StringRef getArchName(unsigned ArchKind)
~ARMAsmBackend() override
Definition: ARMAsmBackend.h:31
Encapsulates the layout of an assembly file at a particular point in time.
Definition: MCAsmLayout.h:29
bool mayNeedRelaxation(const MCInst &Inst) const override
Check whether the given instruction may need relaxation.
Context object for machine code objects.
Definition: MCContext.h:51
void processFixupValue(const MCAssembler &Asm, const MCAsmLayout &Layout, const MCFixup &Fixup, const MCFragment *DF, const MCValue &Target, uint64_t &Value, bool &IsResolved) override
processFixupValue - Target hook to process the literal value of a fixup if necessary.
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:121
A relaxable fragment holds on to its MCInst, since it may need to be relaxed during the assembler lay...
Definition: MCFragment.h:249
unsigned getPointerSize() const
Definition: ARMAsmBackend.h:73
bool fixupNeedsRelaxation(const MCFixup &Fixup, uint64_t Value, const MCRelaxableFragment *DF, const MCAsmLayout &Layout) const override
Simple predicate for targets where !Resolved implies requiring relaxation.
MCFixupKind
Extensible enumeration to represent the type of a fixup.
Definition: MCFixup.h:23
ARMAsmBackend(const Target &T, const Triple &TT, bool IsLittle)
Definition: ARMAsmBackend.h:26
const MCFixupKindInfo & getFixupKindInfo(MCFixupKind Kind) const override
Get information on a fixup kind.
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
void applyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize, uint64_t Value, bool IsPCRel) const override
Apply the Value for given Fixup into the provided data fragment, at the offset specified by the fixup...
bool writeNopData(uint64_t Count, MCObjectWriter *OW) const override
Write an (optimal) nop sequence of Count bytes to the given output.
void relaxInstruction(const MCInst &Inst, const MCSubtargetInfo &STI, MCInst &Res) const override
Relax the instruction in the given fragment to the next wider instruction.
const FeatureBitset & getFeatureBits() const
getFeatureBits - Return the feature bits.
Target - Wrapper for Target specific information.
bool isLittle() const
Definition: ARMAsmBackend.h:76
void handleAssemblerFlag(MCAssemblerFlag Flag) override
Handle any target-specific assembler flags. By default, do nothing.
static bool startswith(StringRef Magic, const char(&S)[N])
Definition: Path.cpp:994
MCAssemblerFlag
Definition: MCDirectives.h:48
MCSubtargetInfo - Generic base class for all target subtargets.
bool isThumb() const
Definition: ARMAsmBackend.h:74
Target independent information on a fixup kind.
const unsigned Kind
LLVM Value Representation.
Definition: Value.h:71
Generic interface to target specific assembler backends.
Definition: MCAsmBackend.h:36