1bb481f882093fb738d2bb15610c79364bada5496Jia Liu//===-- MipsFrameLowering.h - Define frame lowering for Mips ----*- C++ -*-===//
233464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//
333464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//                     The LLVM Compiler Infrastructure
433464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//
533464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov// This file is distributed under the University of Illinois Open Source
633464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov// License. See LICENSE.TXT for details.
733464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//
84552c9a3b34ad9b2085635266348d0d9b95514a6Akira Hatanaka//===----------------------------------------------------------------------===//
933464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//
1033464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//
1133464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//
124552c9a3b34ad9b2085635266348d0d9b95514a6Akira Hatanaka//===----------------------------------------------------------------------===//
1333464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
1449eaf76c53e47c838703916a2119b845c59b36a7Bruno Cardoso Lopes#ifndef MIPS_FRAMEINFO_H
1549eaf76c53e47c838703916a2119b845c59b36a7Bruno Cardoso Lopes#define MIPS_FRAMEINFO_H
1633464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
1733464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov#include "Mips.h"
1833464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov#include "MipsSubtarget.h"
1916c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikov#include "llvm/Target/TargetFrameLowering.h"
2033464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
2133464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikovnamespace llvm {
2233464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov  class MipsSubtarget;
2333464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
2416c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikovclass MipsFrameLowering : public TargetFrameLowering {
2533464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikovprotected:
2633464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov  const MipsSubtarget &STI;
2733464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
2833464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikovpublic:
2916c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikov  explicit MipsFrameLowering(const MipsSubtarget &sti)
30bddf83614a5e32297458e96375c533d231a5cd37Akira Hatanaka    : TargetFrameLowering(StackGrowsDown, sti.hasMips64() ? 16 : 8, 0,
31bddf83614a5e32297458e96375c533d231a5cd37Akira Hatanaka                          sti.hasMips64() ? 16 : 8), STI(sti) {}
3233464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
33af2662606745bdebaa2cb43096274ce3d33b665fAkira Hatanaka  static const MipsFrameLowering *create(MipsTargetMachine &TM,
34af2662606745bdebaa2cb43096274ce3d33b665fAkira Hatanaka                                         const MipsSubtarget &ST);
35af2662606745bdebaa2cb43096274ce3d33b665fAkira Hatanaka
36d0c38176690e9602a93a20a43f1bd084564a8116Anton Korobeynikov  bool hasFP(const MachineFunction &MF) const;
3733464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov};
3833464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
39af2662606745bdebaa2cb43096274ce3d33b665fAkira Hatanaka/// Create MipsInstrInfo objects.
40af2662606745bdebaa2cb43096274ce3d33b665fAkira Hatanakaconst MipsFrameLowering *createMips16FrameLowering(const MipsSubtarget &ST);
41af2662606745bdebaa2cb43096274ce3d33b665fAkira Hatanakaconst MipsFrameLowering *createMipsSEFrameLowering(const MipsSubtarget &ST);
42af2662606745bdebaa2cb43096274ce3d33b665fAkira Hatanaka
4333464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov} // End llvm namespace
4433464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
4533464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov#endif
46