LLVM 22.0.0git
HexagonMCCodeEmitter.h
Go to the documentation of this file.
1//===- HexagonMCCodeEmitter.h - Hexagon Target Descriptions -----*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8///
9/// \file
10/// Definition for classes that emit Hexagon machine code from MCInsts
11///
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCCODEEMITTER_H
15#define LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCCODEEMITTER_H
16
20#include "llvm/MC/MCExpr.h"
22#include <cstddef>
23#include <cstdint>
24#include <memory>
25
26namespace llvm {
27
28class MCContext;
29class MCInst;
30class MCInstrInfo;
31class MCOperand;
32class MCSubtargetInfo;
33class 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
49public:
51 : MCT(MCT), MCII(MII) {}
52
55 MCSubtargetInfo const &STI) const override;
56
59 const MCSubtargetInfo &STI,
60 uint32_t Parse) const;
61
62 // TableGen'erated function for getting the
63 // binary encoding for an instruction.
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
73private:
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
87} // end namespace llvm
88
89#endif // LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCCODEEMITTER_H
IRTranslator LLVM IR MI
void encodeSingleInstruction(const MCInst &MI, SmallVectorImpl< char > &CB, SmallVectorImpl< MCFixup > &Fixups, const MCSubtargetInfo &STI, uint32_t Parse) const
unsigned getMachineOpValue(MCInst const &MI, MCOperand const &MO, SmallVectorImpl< MCFixup > &Fixups, MCSubtargetInfo const &STI) const
Return binary encoding of operand.
uint64_t getBinaryCodeForInstr(MCInst const &MI, SmallVectorImpl< MCFixup > &Fixups, MCSubtargetInfo const &STI) const
HexagonMCCodeEmitter(MCInstrInfo const &MII, MCContext &MCT)
void encodeInstruction(MCInst const &MI, SmallVectorImpl< char > &CB, SmallVectorImpl< MCFixup > &Fixups, MCSubtargetInfo const &STI) const override
Emit the bundle.
MCCodeEmitter - Generic instruction encoding interface.
Definition: MCCodeEmitter.h:23
Context object for machine code objects.
Definition: MCContext.h:83
Base class for the full range of assembler expressions which are needed for parsing.
Definition: MCExpr.h:34
Instances of this class represent a single low-level machine instruction.
Definition: MCInst.h:188
Interface to description of machine instruction set.
Definition: MCInstrInfo.h:27
Instances of this class represent operands of the MCInst class.
Definition: MCInst.h:40
Generic base class for all target subtargets.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
Definition: SmallVector.h:574
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18