1259698Sdim//===---- Mips16HardFloat.h for Mips16 Hard Float --------===// 2259698Sdim// 3259698Sdim// The LLVM Compiler Infrastructure 4259698Sdim// 5259698Sdim// This file is distributed under the University of Illinois Open Source 6259698Sdim// License. See LICENSE.TXT for details. 7259698Sdim// 8259698Sdim//===----------------------------------------------------------------------===// 9259698Sdim// 10259698Sdim// This file defines a phase which implements part of the floating point 11259698Sdim// interoperability between Mips16 and Mips32 code. 12259698Sdim// 13259698Sdim//===----------------------------------------------------------------------===// 14259698Sdim 15259698Sdim#include "MCTargetDesc/MipsMCTargetDesc.h" 16259698Sdim#include "MipsTargetMachine.h" 17259698Sdim#include "llvm/Pass.h" 18259698Sdim#include "llvm/Target/TargetMachine.h" 19259698Sdim 20259698Sdim 21259698Sdim#ifndef MIPS16HARDFLOAT_H 22259698Sdim#define MIPS16HARDFLOAT_H 23259698Sdim 24259698Sdimusing namespace llvm; 25259698Sdim 26259698Sdimnamespace llvm { 27259698Sdim 28259698Sdimclass Mips16HardFloat : public ModulePass { 29259698Sdim 30259698Sdimpublic: 31259698Sdim static char ID; 32259698Sdim 33259698Sdim Mips16HardFloat(MipsTargetMachine &TM_) : ModulePass(ID), 34259698Sdim TM(TM_), Subtarget(TM.getSubtarget<MipsSubtarget>()) { 35259698Sdim } 36259698Sdim 37259698Sdim virtual const char *getPassName() const { 38259698Sdim return "MIPS16 Hard Float Pass"; 39259698Sdim } 40259698Sdim 41259698Sdim virtual bool runOnModule(Module &M); 42259698Sdim 43259698Sdimprotected: 44259698Sdim /// Keep a pointer to the MipsSubtarget around so that we can make the right 45259698Sdim /// decision when generating code for different targets. 46259698Sdim const TargetMachine &TM; 47259698Sdim const MipsSubtarget &Subtarget; 48259698Sdim 49259698Sdim}; 50259698Sdim 51259698SdimModulePass *createMips16HardFloat(MipsTargetMachine &TM); 52259698Sdim 53259698Sdim} 54259698Sdim#endif 55