xref: /aosp_15_r20/external/llvm/lib/Target/Mips/Mips16HardFloatInfo.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===---- Mips16HardFloatInfo.cpp for Mips16 Hard Float              -----===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker //
10*9880d681SAndroid Build Coastguard Worker // This file contains the Mips16 implementation of Mips16HardFloatInfo
11*9880d681SAndroid Build Coastguard Worker // namespace.
12*9880d681SAndroid Build Coastguard Worker //
13*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
14*9880d681SAndroid Build Coastguard Worker 
15*9880d681SAndroid Build Coastguard Worker #include "Mips16HardFloatInfo.h"
16*9880d681SAndroid Build Coastguard Worker #include <string.h>
17*9880d681SAndroid Build Coastguard Worker 
18*9880d681SAndroid Build Coastguard Worker namespace llvm {
19*9880d681SAndroid Build Coastguard Worker 
20*9880d681SAndroid Build Coastguard Worker namespace Mips16HardFloatInfo {
21*9880d681SAndroid Build Coastguard Worker 
22*9880d681SAndroid Build Coastguard Worker const FuncNameSignature PredefinedFuncs[] = {
23*9880d681SAndroid Build Coastguard Worker   { "__floatdidf", { NoSig, DRet } },
24*9880d681SAndroid Build Coastguard Worker   { "__floatdisf", { NoSig, FRet } },
25*9880d681SAndroid Build Coastguard Worker   { "__floatundidf", { NoSig, DRet } },
26*9880d681SAndroid Build Coastguard Worker   { "__fixsfdi", { FSig, NoFPRet } },
27*9880d681SAndroid Build Coastguard Worker   { "__fixunsdfsi", { DSig, NoFPRet } },
28*9880d681SAndroid Build Coastguard Worker   { "__fixunsdfdi", { DSig, NoFPRet } },
29*9880d681SAndroid Build Coastguard Worker   { "__fixdfdi", { DSig, NoFPRet } },
30*9880d681SAndroid Build Coastguard Worker   { "__fixunssfsi", { FSig, NoFPRet } },
31*9880d681SAndroid Build Coastguard Worker   { "__fixunssfdi", { FSig, NoFPRet } },
32*9880d681SAndroid Build Coastguard Worker   { "__floatundisf", { NoSig, FRet } },
33*9880d681SAndroid Build Coastguard Worker   { nullptr, { NoSig, NoFPRet } }
34*9880d681SAndroid Build Coastguard Worker };
35*9880d681SAndroid Build Coastguard Worker 
36*9880d681SAndroid Build Coastguard Worker // just do a search for now. there are very few of these special cases.
37*9880d681SAndroid Build Coastguard Worker //
findFuncSignature(const char * name)38*9880d681SAndroid Build Coastguard Worker extern FuncSignature const *findFuncSignature(const char *name) {
39*9880d681SAndroid Build Coastguard Worker   const char *name_;
40*9880d681SAndroid Build Coastguard Worker   int i = 0;
41*9880d681SAndroid Build Coastguard Worker   while (PredefinedFuncs[i].Name) {
42*9880d681SAndroid Build Coastguard Worker     name_ = PredefinedFuncs[i].Name;
43*9880d681SAndroid Build Coastguard Worker     if (strcmp(name, name_) == 0)
44*9880d681SAndroid Build Coastguard Worker       return &PredefinedFuncs[i].Signature;
45*9880d681SAndroid Build Coastguard Worker     i++;
46*9880d681SAndroid Build Coastguard Worker   }
47*9880d681SAndroid Build Coastguard Worker   return nullptr;
48*9880d681SAndroid Build Coastguard Worker }
49*9880d681SAndroid Build Coastguard Worker }
50*9880d681SAndroid Build Coastguard Worker }
51