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
12ce1a538ab5b7ae7e0ed48d18c02571280fe105aaBruno Cardoso Lopes#include "llvm/ADT/SmallVector.h"
1317a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka#include "llvm/CodeGen/MachineOperand.h"
1417a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka#include "llvm/Support/Compiler.h"
1517a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka
1617a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanakanamespace llvm {
1717a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  class MCContext;
1817a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  class MCInst;
1917a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  class MCOperand;
2017a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  class MachineInstr;
2117a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  class MachineFunction;
2217a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  class Mangler;
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  Mangler *Mang;
3117a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  MipsAsmPrinter &AsmPrinter;
3217a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanakapublic:
33f93b86306683f8e860c8824efb717995cb072a70Akira Hatanaka  MipsMCInstLower(MipsAsmPrinter &asmprinter);
34f93b86306683f8e860c8824efb717995cb072a70Akira Hatanaka  void Initialize(Mangler *mang, MCContext* C);
3517a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  void Lower(const MachineInstr *MI, MCInst &OutMI) const;
36f93b86306683f8e860c8824efb717995cb072a70Akira Hatanaka  void LowerCPLOAD(SmallVector<MCInst, 4>& MCInsts);
37f93b86306683f8e860c8824efb717995cb072a70Akira Hatanaka  void LowerCPRESTORE(int64_t Offset, SmallVector<MCInst, 4>& MCInsts);
38421455f1ea081e2e1767e782ac0d57ca55976e9bAkira Hatanaka  void LowerUnalignedLoadStore(const MachineInstr *MI,
3979aa3417eb6f58d668aadfedf075240a41d35a26Craig Topper                               SmallVector<MCInst, 4>& MCInsts);
40648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka  void LowerSETGP01(const MachineInstr *MI, SmallVector<MCInst, 4>& MCInsts);
4117a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanakaprivate:
4217a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  MCOperand LowerSymbolOperand(const MachineOperand &MO,
4378d1b11aa57e5a2683e4be3baaaa9576ac04eea2Akira Hatanaka                               MachineOperandType MOTy, unsigned Offset) const;
44421455f1ea081e2e1767e782ac0d57ca55976e9bAkira Hatanaka  MCOperand LowerOperand(const MachineOperand& MO, unsigned offset = 0) const;
4517a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka};
4617a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka}
4717a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka
4817a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka#endif
49