1//===-- AMDGPUCodeEmitter.h - AMDGPU Code Emitter interface -----*- 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/// CodeEmitter interface for R600 and SI codegen.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUMCCODEEMITTER_H
15#define LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUMCCODEEMITTER_H
16
17#include "llvm/MC/MCCodeEmitter.h"
18#include "llvm/Support/raw_ostream.h"
19
20namespace llvm {
21
22class MCInst;
23class MCInstrInfo;
24class MCOperand;
25class MCSubtargetInfo;
26class FeatureBitset;
27
28class AMDGPUMCCodeEmitter : public MCCodeEmitter {
29  virtual void anchor();
30
31protected:
32  const MCInstrInfo &MCII;
33
34  AMDGPUMCCodeEmitter(const MCInstrInfo &mcii) : MCII(mcii) {}
35
36public:
37
38  uint64_t getBinaryCodeForInstr(const MCInst &MI,
39                                 SmallVectorImpl<MCFixup> &Fixups,
40                                 const MCSubtargetInfo &STI) const;
41
42  virtual uint64_t getMachineOpValue(const MCInst &MI, const MCOperand &MO,
43                                     SmallVectorImpl<MCFixup> &Fixups,
44                                     const MCSubtargetInfo &STI) const {
45    return 0;
46  }
47
48  virtual unsigned getSOPPBrEncoding(const MCInst &MI, unsigned OpNo,
49                                     SmallVectorImpl<MCFixup> &Fixups,
50                                     const MCSubtargetInfo &STI) const {
51    return 0;
52  }
53
54  virtual unsigned getSMEMOffsetEncoding(const MCInst &MI, unsigned OpNo,
55                                         SmallVectorImpl<MCFixup> &Fixups,
56                                         const MCSubtargetInfo &STI) const {
57    return 0;
58  }
59
60  virtual unsigned getSDWASrcEncoding(const MCInst &MI, unsigned OpNo,
61                                      SmallVectorImpl<MCFixup> &Fixups,
62                                      const MCSubtargetInfo &STI) const {
63    return 0;
64  }
65
66  virtual unsigned getSDWAVopcDstEncoding(const MCInst &MI, unsigned OpNo,
67                                          SmallVectorImpl<MCFixup> &Fixups,
68                                          const MCSubtargetInfo &STI) const {
69    return 0;
70  }
71
72  virtual unsigned getAVOperandEncoding(const MCInst &MI, unsigned OpNo,
73                                        SmallVectorImpl<MCFixup> &Fixups,
74                                        const MCSubtargetInfo &STI) const {
75    return 0;
76  }
77
78protected:
79  FeatureBitset computeAvailableFeatures(const FeatureBitset &FB) const;
80  void
81  verifyInstructionPredicates(const MCInst &MI,
82                              const FeatureBitset &AvailableFeatures) const;
83};
84
85} // End namespace llvm
86
87#endif
88