54 lines · c
1//===- MipsMCInstLower.h - Lower MachineInstr to MCInst --------*- 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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_LIB_TARGET_MIPS_MIPSMCINSTLOWER_H10#define LLVM_LIB_TARGET_MIPS_MIPSMCINSTLOWER_H11 12#include "MCTargetDesc/MipsMCAsmInfo.h"13#include "llvm/CodeGen/MachineOperand.h"14#include "llvm/Support/Compiler.h"15 16namespace llvm {17 18class MachineBasicBlock;19class MachineInstr;20class MCContext;21class MCInst;22class MCOperand;23class MipsAsmPrinter;24 25/// MipsMCInstLower - This class is used to lower an MachineInstr into an26/// MCInst.27class LLVM_LIBRARY_VISIBILITY MipsMCInstLower {28 using MachineOperandType = MachineOperand::MachineOperandType;29 30 MCContext *Ctx;31 MipsAsmPrinter &AsmPrinter;32 33public:34 MipsMCInstLower(MipsAsmPrinter &asmprinter);35 36 void Initialize(MCContext *C);37 void Lower(const MachineInstr *MI, MCInst &OutMI) const;38 MCOperand LowerOperand(const MachineOperand &MO, int64_t offset = 0) const;39 40private:41 MCOperand LowerSymbolOperand(const MachineOperand &MO,42 MachineOperandType MOTy, int64_t Offset) const;43 MCOperand createSub(MachineBasicBlock *BB1, MachineBasicBlock *BB2,44 Mips::Specifier Kind) const;45 void lowerLongBranchLUi(const MachineInstr *MI, MCInst &OutMI) const;46 void lowerLongBranchADDiu(const MachineInstr *MI, MCInst &OutMI,47 int Opcode) const;48 bool lowerLongBranch(const MachineInstr *MI, MCInst &OutMI) const;49};50 51} // end namespace llvm52 53#endif // LLVM_LIB_TARGET_MIPS_MIPSMCINSTLOWER_H54