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.
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...
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition raw_ostream.h:53
This is an optimization pass for GlobalISel generic memory operations.