2b16dd1e4a9a55a8bada7fe4ab47ce27365104b3
[oota-llvm.git] / include / llvm / CodeGen / RuntimeLibcalls.h
1 //===-- CodeGen/RuntimeLibcall.h - Runtime Library Calls --------*- C++ -*-===//
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 the enum representing the list of runtime library calls
11 // the backend may emit during code generation.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef LLVM_CODEGEN_RUNTIMELIBCALLS_H
16 #define LLVM_CODEGEN_RUNTIMELIBCALLS_H
17
18 namespace llvm {
19 namespace RTLIB {
20   /// RTLIB::Libcall enum - This enum defines all of the runtime library calls
21   /// the backend can emit.  The various long double types cannot be merged,
22   /// because 80-bit library functions use "xf" and 128-bit use "tf".
23   /// 
24   /// When adding PPCF128 functions here, note that their names generally need
25   /// to be overridden for Darwin with the xxx$LDBL128 form.  See
26   /// PPCISelLowering.cpp.
27   ///
28   enum Libcall {
29     // Integer
30     SHL_I32,
31     SHL_I64,
32     SHL_I128,
33     SRL_I32,
34     SRL_I64,
35     SRL_I128,
36     SRA_I32,
37     SRA_I64,
38     SRA_I128,
39     MUL_I32,
40     MUL_I64,
41     MUL_I128,
42     SDIV_I32,
43     SDIV_I64,
44     SDIV_I128,
45     UDIV_I32,
46     UDIV_I64,
47     UDIV_I128,
48     SREM_I32,
49     SREM_I64,
50     SREM_I128,
51     UREM_I32,
52     UREM_I64,
53     UREM_I128,
54     NEG_I32,
55     NEG_I64,
56
57     // FLOATING POINT
58     ADD_F32,
59     ADD_F64,
60     ADD_F80,
61     ADD_PPCF128,
62     SUB_F32,
63     SUB_F64,
64     SUB_F80,
65     SUB_PPCF128,
66     MUL_F32,
67     MUL_F64,
68     MUL_F80,
69     MUL_PPCF128,
70     DIV_F32,
71     DIV_F64,
72     DIV_F80,
73     DIV_PPCF128,
74     REM_F32,
75     REM_F64,
76     REM_F80,
77     REM_PPCF128,
78     POWI_F32,
79     POWI_F64,
80     POWI_F80,
81     POWI_PPCF128,
82     SQRT_F32,
83     SQRT_F64,
84     SQRT_F80,
85     SQRT_PPCF128,
86     SIN_F32,
87     SIN_F64,
88     SIN_F80,
89     SIN_PPCF128,
90     COS_F32,
91     COS_F64,
92     COS_F80,
93     COS_PPCF128,
94     POW_F32,
95     POW_F64,
96     POW_F80,
97     POW_PPCF128,
98
99     // CONVERSION
100     FPEXT_F32_F64,
101     FPROUND_F64_F32,
102     FPTOSINT_F32_I32,
103     FPTOSINT_F32_I64,
104     FPTOSINT_F32_I128,
105     FPTOSINT_F64_I32,
106     FPTOSINT_F64_I64,
107     FPTOSINT_F64_I128,
108     FPTOSINT_F80_I32,
109     FPTOSINT_F80_I64,
110     FPTOSINT_F80_I128,
111     FPTOSINT_PPCF128_I32,
112     FPTOSINT_PPCF128_I64,
113     FPTOSINT_PPCF128_I128,
114     FPTOUINT_F32_I32,
115     FPTOUINT_F32_I64,
116     FPTOUINT_F32_I128,
117     FPTOUINT_F64_I32,
118     FPTOUINT_F64_I64,
119     FPTOUINT_F64_I128,
120     FPTOUINT_F80_I32,
121     FPTOUINT_F80_I64,
122     FPTOUINT_F80_I128,
123     FPTOUINT_PPCF128_I32,
124     FPTOUINT_PPCF128_I64,
125     FPTOUINT_PPCF128_I128,
126     SINTTOFP_I32_F32,
127     SINTTOFP_I32_F64,
128     SINTTOFP_I64_F32,
129     SINTTOFP_I64_F64,
130     SINTTOFP_I64_F80,
131     SINTTOFP_I64_PPCF128,
132     SINTTOFP_I128_F32,
133     SINTTOFP_I128_F64,
134     SINTTOFP_I128_F80,
135     SINTTOFP_I128_PPCF128,
136     UINTTOFP_I32_F32,
137     UINTTOFP_I32_F64,
138     UINTTOFP_I64_F32,
139     UINTTOFP_I64_F64,
140
141     // COMPARISON
142     OEQ_F32,
143     OEQ_F64,
144     UNE_F32,
145     UNE_F64,
146     OGE_F32,
147     OGE_F64,
148     OLT_F32,
149     OLT_F64,
150     OLE_F32,
151     OLE_F64,
152     OGT_F32,
153     OGT_F64,
154     UO_F32,
155     UO_F64,
156     O_F32,
157     O_F64,
158
159     UNKNOWN_LIBCALL
160   };
161 }
162 }
163
164 #endif