LLVM  8.0.1
HexagonMCCodeEmitter.h
Go to the documentation of this file.
1 //===- HexagonMCCodeEmitter.h - Hexagon Target Descriptions -----*- 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 /// \file
11 /// Definition for classes that emit Hexagon machine code from MCInsts
12 ///
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCCODEEMITTER_H
16 #define LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCCODEEMITTER_H
17 
19 #include "llvm/MC/MCCodeEmitter.h"
20 #include "llvm/MC/MCExpr.h"
22 #include <cstddef>
23 #include <cstdint>
24 #include <memory>
25 
26 namespace llvm {
27 
28 class MCContext;
29 class MCInst;
30 class MCInstrInfo;
31 class MCOperand;
32 class MCSubtargetInfo;
33 class raw_ostream;
34 
36  MCContext &MCT;
37  MCInstrInfo const &MCII;
38 
39  // A mutable state of the emitter when encoding bundles and duplexes.
40  struct EmitterState {
41  unsigned Addend = 0;
42  bool Extended = false;
43  bool SubInst1 = false;
44  const MCInst *Bundle = nullptr;
45  size_t Index = 0;
46  };
47  mutable EmitterState State;
48 
49 public:
51  : MCT(MCT), MCII(MII) {}
52 
53  void encodeInstruction(MCInst const &MI, raw_ostream &OS,
55  MCSubtargetInfo const &STI) const override;
56 
57  void EncodeSingleInstruction(const MCInst &MI, raw_ostream &OS,
59  const MCSubtargetInfo &STI,
60  uint32_t Parse) const;
61 
62  // TableGen'erated function for getting the
63  // binary encoding for an instruction.
64  uint64_t getBinaryCodeForInstr(MCInst const &MI,
66  MCSubtargetInfo const &STI) const;
67 
68  /// Return binary encoding of operand.
69  unsigned getMachineOpValue(MCInst const &MI, MCOperand const &MO,
71  MCSubtargetInfo const &STI) const;
72 
73 private:
74  // helper routine for getMachineOpValue()
75  unsigned getExprOpValue(const MCInst &MI, const MCOperand &MO,
76  const MCExpr *ME, SmallVectorImpl<MCFixup> &Fixups,
77  const MCSubtargetInfo &STI) const;
78 
79  Hexagon::Fixups getFixupNoBits(MCInstrInfo const &MCII, const MCInst &MI,
80  const MCOperand &MO,
82 
83  // Return parse bits for instruction `MCI' inside bundle `MCB'
84  uint32_t parseBits(size_t Last, MCInst const &MCB, MCInst const &MCI) const;
85 
86  uint64_t computeAvailableFeatures(const FeatureBitset &FB) const;
87  void verifyInstructionPredicates(const MCInst &MI,
88  uint64_t AvailableFeatures) const;
89 };
90 
91 } // end namespace llvm
92 
93 #endif // LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCCODEEMITTER_H
This class represents lattice values for constants.
Definition: AllocatorList.h:24
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
Definition: APFloat.h:42
Base class for the full range of assembler expressions which are needed for parsing.
Definition: MCExpr.h:36
Context object for machine code objects.
Definition: MCContext.h:63
Instances of this class represent a single low-level machine instruction.
Definition: MCInst.h:161
void encodeInstruction(MCInst const &MI, raw_ostream &OS, SmallVectorImpl< MCFixup > &Fixups, MCSubtargetInfo const &STI) const override
Emit the bundle.
Container class for subtarget features.
MCCodeEmitter - Generic instruction encoding interface.
Definition: MCCodeEmitter.h:22
Interface to description of machine instruction set.
Definition: MCInstrInfo.h:24
uint64_t getBinaryCodeForInstr(MCInst const &MI, SmallVectorImpl< MCFixup > &Fixups, MCSubtargetInfo const &STI) const
HexagonMCCodeEmitter(MCInstrInfo const &MII, MCContext &MCT)
Generic base class for all target subtargets.
const unsigned Kind
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:46
void EncodeSingleInstruction(const MCInst &MI, raw_ostream &OS, SmallVectorImpl< MCFixup > &Fixups, const MCSubtargetInfo &STI, uint32_t Parse) const
EncodeSingleInstruction - Emit a single.
IRTranslator LLVM IR MI
unsigned getMachineOpValue(MCInst const &MI, MCOperand const &MO, SmallVectorImpl< MCFixup > &Fixups, MCSubtargetInfo const &STI) const
Return binary encoding of operand.
Instances of this class represent operands of the MCInst class.
Definition: MCInst.h:35