1 //===---- Mips16HardFloatInfo.h for Mips16 Hard Float              --------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines some data structures relevant to the implementation of
11 // Mips16 hard float.
12 //
13 //
14 //===----------------------------------------------------------------------===//
15 
16 #ifndef LLVM_LIB_TARGET_MIPS_MIPS16HARDFLOATINFO_H
17 #define LLVM_LIB_TARGET_MIPS_MIPS16HARDFLOATINFO_H
18 
19 namespace llvm {
20 
21 namespace Mips16HardFloatInfo {
22 
23 // Return types that matter for hard float are:
24 // float, double, complex float, and complex double
25 //
26 enum FPReturnVariant { FRet, DRet, CFRet, CDRet, NoFPRet };
27 
28 //
29 // Parameter type that matter are float, (float, float), (float, double),
30 // double, (double, double), (double, float)
31 //
32 enum FPParamVariant { FSig, FFSig, FDSig, DSig, DDSig, DFSig, NoSig };
33 
34 struct FuncSignature {
35   FPParamVariant ParamSig;
36   FPReturnVariant RetSig;
37 };
38 
39 struct FuncNameSignature {
40   const char *Name;
41   FuncSignature Signature;
42 };
43 
44 extern const FuncNameSignature PredefinedFuncs[];
45 
46 extern FuncSignature const *findFuncSignature(const char *name);
47 }
48 }
49 
50 #endif
51