18f5e8c1cd69fa77bea20140a7132ee2dea166c6dJia Liu//===-- MipsMCInstLower.h - Lower MachineInstr to MCInst -------*- C++ -*--===// 217a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka// 317a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka// The LLVM Compiler Infrastructure 417a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka// 517a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka// This file is distributed under the University of Illinois Open Source 617a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka// License. See LICENSE.TXT for details. 717a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka// 817a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka//===----------------------------------------------------------------------===// 917a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka 1017a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka#ifndef MIPSMCINSTLOWER_H 1117a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka#define MIPSMCINSTLOWER_H 12dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "MCTargetDesc/MipsMCExpr.h" 13ce1a538ab5b7ae7e0ed48d18c02571280fe105aaBruno Cardoso Lopes#include "llvm/ADT/SmallVector.h" 1417a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka#include "llvm/CodeGen/MachineOperand.h" 1517a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka#include "llvm/Support/Compiler.h" 1617a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka 1717a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanakanamespace llvm { 1817a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka class MCContext; 1917a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka class MCInst; 2017a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka class MCOperand; 2117a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka class MachineInstr; 2217a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka class MachineFunction; 2317a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka class MipsAsmPrinter; 24bb481f882093fb738d2bb15610c79364bada5496Jia Liu 2517a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka/// MipsMCInstLower - This class is used to lower an MachineInstr into an 2617a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka// MCInst. 2717a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanakaclass LLVM_LIBRARY_VISIBILITY MipsMCInstLower { 2817a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka typedef MachineOperand::MachineOperandType MachineOperandType; 29f93b86306683f8e860c8824efb717995cb072a70Akira Hatanaka MCContext *Ctx; 3017a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka MipsAsmPrinter &AsmPrinter; 3117a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanakapublic: 32f93b86306683f8e860c8824efb717995cb072a70Akira Hatanaka MipsMCInstLower(MipsAsmPrinter &asmprinter); 33a300b1cc29020b7dfaf7bfe443d38af8fbec7433Rafael Espindola void Initialize(MCContext *C); 3417a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka void Lower(const MachineInstr *MI, MCInst &OutMI) const; 35cc46fe591af10c193c17323547a3dd7cc00c925dAkira Hatanaka MCOperand LowerOperand(const MachineOperand& MO, unsigned offset = 0) const; 36e035f65b16956cdb7ba29e741b7e3c04a8ce4d24Jack Carter 3717a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanakaprivate: 3817a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka MCOperand LowerSymbolOperand(const MachineOperand &MO, 3978d1b11aa57e5a2683e4be3baaaa9576ac04eea2Akira Hatanaka MachineOperandType MOTy, unsigned Offset) const; 40dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MCOperand createSub(MachineBasicBlock *BB1, MachineBasicBlock *BB2, 41dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MCSymbolRefExpr::VariantKind Kind) const; 42dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void lowerLongBranchLUi(const MachineInstr *MI, MCInst &OutMI) const; 43dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void lowerLongBranchADDiu(const MachineInstr *MI, MCInst &OutMI, 44dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines int Opcode, 45dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MCSymbolRefExpr::VariantKind Kind) const; 46dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines bool lowerLongBranch(const MachineInstr *MI, MCInst &OutMI) const; 4717a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka}; 4817a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka} 4917a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka 5017a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka#endif 51