brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.0 KiB · 3356513 Raw
124 lines · c
1//===-- PPCMCCodeEmitter.h - Convert PPC code to machine code -------------===//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-exception6//7//===----------------------------------------------------------------------===//8//9// This file implements the PPCMCCodeEmitter class.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_PPC_MCCODEEMITTER_PPCCODEEMITTER_H14#define LLVM_LIB_TARGET_PPC_MCCODEEMITTER_PPCCODEEMITTER_H15 16#include "llvm/MC/MCAsmInfo.h"17#include "llvm/MC/MCCodeEmitter.h"18#include "llvm/MC/MCSubtargetInfo.h"19#include "llvm/MC/MCInstrInfo.h"20#include "llvm/MC/MCContext.h"21#include "llvm/MC/MCInst.h"22 23namespace llvm {24 25class PPCMCCodeEmitter : public MCCodeEmitter {26  const MCInstrInfo &MCII;27  const MCContext &CTX;28  bool IsLittleEndian;29 30public:31  PPCMCCodeEmitter(const MCInstrInfo &mcii, MCContext &ctx)32      : MCII(mcii), CTX(ctx),33        IsLittleEndian(ctx.getAsmInfo()->isLittleEndian()) {}34  PPCMCCodeEmitter(const PPCMCCodeEmitter &) = delete;35  void operator=(const PPCMCCodeEmitter &) = delete;36  ~PPCMCCodeEmitter() override = default;37 38  unsigned getDirectBrEncoding(const MCInst &MI, unsigned OpNo,39                               SmallVectorImpl<MCFixup> &Fixups,40                               const MCSubtargetInfo &STI) const;41  unsigned getCondBrEncoding(const MCInst &MI, unsigned OpNo,42                             SmallVectorImpl<MCFixup> &Fixups,43                             const MCSubtargetInfo &STI) const;44  unsigned getAbsDirectBrEncoding(const MCInst &MI, unsigned OpNo,45                                  SmallVectorImpl<MCFixup> &Fixups,46                                  const MCSubtargetInfo &STI) const;47  unsigned getAbsCondBrEncoding(const MCInst &MI, unsigned OpNo,48                                SmallVectorImpl<MCFixup> &Fixups,49                                const MCSubtargetInfo &STI) const;50  template <MCFixupKind Fixup>51  uint64_t getImmEncoding(const MCInst &MI, unsigned OpNo,52                          SmallVectorImpl<MCFixup> &Fixups,53                          const MCSubtargetInfo &STI) const;54  unsigned getDispRIEncoding(const MCInst &MI, unsigned OpNo,55                             SmallVectorImpl<MCFixup> &Fixups,56                             const MCSubtargetInfo &STI) const;57  unsigned getDispRIXEncoding(const MCInst &MI, unsigned OpNo,58                              SmallVectorImpl<MCFixup> &Fixups,59                              const MCSubtargetInfo &STI) const;60  unsigned getDispRIX16Encoding(const MCInst &MI, unsigned OpNo,61                                SmallVectorImpl<MCFixup> &Fixups,62                                const MCSubtargetInfo &STI) const;63  unsigned getDispRIHashEncoding(const MCInst &MI, unsigned OpNo,64                                 SmallVectorImpl<MCFixup> &Fixups,65                                 const MCSubtargetInfo &STI) const;66  uint64_t getDispRI34PCRelEncoding(const MCInst &MI, unsigned OpNo,67                                    SmallVectorImpl<MCFixup> &Fixups,68                                    const MCSubtargetInfo &STI) const;69  uint64_t getDispRI34Encoding(const MCInst &MI, unsigned OpNo,70                               SmallVectorImpl<MCFixup> &Fixups,71                               const MCSubtargetInfo &STI) const;72  unsigned getDispSPE8Encoding(const MCInst &MI, unsigned OpNo,73                               SmallVectorImpl<MCFixup> &Fixups,74                               const MCSubtargetInfo &STI) const;75  unsigned getDispSPE4Encoding(const MCInst &MI, unsigned OpNo,76                               SmallVectorImpl<MCFixup> &Fixups,77                               const MCSubtargetInfo &STI) const;78  unsigned getDispSPE2Encoding(const MCInst &MI, unsigned OpNo,79                               SmallVectorImpl<MCFixup> &Fixups,80                               const MCSubtargetInfo &STI) const;81  unsigned getTLSRegEncoding(const MCInst &MI, unsigned OpNo,82                             SmallVectorImpl<MCFixup> &Fixups,83                             const MCSubtargetInfo &STI) const;84  unsigned getTLSCallEncoding(const MCInst &MI, unsigned OpNo,85                              SmallVectorImpl<MCFixup> &Fixups,86                              const MCSubtargetInfo &STI) const;87  unsigned get_crbitm_encoding(const MCInst &MI, unsigned OpNo,88                               SmallVectorImpl<MCFixup> &Fixups,89                               const MCSubtargetInfo &STI) const;90  unsigned getVSRpEvenEncoding(const MCInst &MI, unsigned OpNo,91                               SmallVectorImpl<MCFixup> &Fixups,92                               const MCSubtargetInfo &STI) const;93 94  /// getMachineOpValue - Return binary encoding of operand. If the machine95  /// operand requires relocation, record the relocation and return zero.96  uint64_t getMachineOpValue(const MCInst &MI, const MCOperand &MO,97                             SmallVectorImpl<MCFixup> &Fixups,98                             const MCSubtargetInfo &STI) const;99 100  // getBinaryCodeForInstr - TableGen'erated function for getting the101  // binary encoding for an instruction.102  uint64_t getBinaryCodeForInstr(const MCInst &MI,103                                 SmallVectorImpl<MCFixup> &Fixups,104                                 const MCSubtargetInfo &STI) const;105 106  void encodeInstruction(const MCInst &MI, SmallVectorImpl<char> &CB,107                         SmallVectorImpl<MCFixup> &Fixups,108                         const MCSubtargetInfo &STI) const override;109 110  // Get the number of bytes used to encode the given MCInst.111  unsigned getInstSizeInBytes(const MCInst &MI) const;112 113  // Is this instruction a prefixed instruction.114  bool isPrefixedInstruction(const MCInst &MI) const;115 116  /// Check if Opcode corresponds to a call instruction that should be marked117  /// with the NOTOC relocation.118  bool isNoTOCCallInstr(const MCInst &MI) const;119};120 121} // namespace llvm122 123#endif // LLVM_LIB_TARGET_PPC_MCCODEEMITTER_PPCCODEEMITTER_H124