RuntimeLibcalls.h revision 9bed0f58eb7f5e9e22d062f3880a5fabfdd0dfdd
1495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng//===-- CodeGen/RuntimeLibcall.h - Runtime Library Calls --------*- C++ -*-===//
2495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng//
3495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng//                     The LLVM Compiler Infrastructure
4495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng//
57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// This file is distributed under the University of Illinois Open Source
67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// License. See LICENSE.TXT for details.
7495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng//
8495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng//===----------------------------------------------------------------------===//
9495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng//
10495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng// This file defines the enum representing the list of runtime library calls
11495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng// the backend may emit during code generation.
12495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng//
13495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng//===----------------------------------------------------------------------===//
14495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng
15495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng#ifndef LLVM_CODEGEN_RUNTIMELIBCALLS_H
16495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng#define LLVM_CODEGEN_RUNTIMELIBCALLS_H
17495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng
18495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Chengnamespace llvm {
19495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Chengnamespace RTLIB {
20495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng  /// RTLIB::Libcall enum - This enum defines all of the runtime library calls
21161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen  /// the backend can emit.  The various long double types cannot be merged,
22161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen  /// because 80-bit library functions use "xf" and 128-bit use "tf".
23fabd32deb025ebd47c5eb47259d2424fd789b05cDale Johannesen  ///
24fabd32deb025ebd47c5eb47259d2424fd789b05cDale Johannesen  /// When adding PPCF128 functions here, note that their names generally need
25fabd32deb025ebd47c5eb47259d2424fd789b05cDale Johannesen  /// to be overridden for Darwin with the xxx$LDBL128 form.  See
26fabd32deb025ebd47c5eb47259d2424fd789b05cDale Johannesen  /// PPCISelLowering.cpp.
27495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng  ///
28495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng  enum Libcall {
29495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    // Integer
30495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SHL_I32,
31495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SHL_I64,
32dddc6291fb5274282a20d5923b50535d456d34a4Duncan Sands    SHL_I128,
33495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SRL_I32,
34495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SRL_I64,
35dddc6291fb5274282a20d5923b50535d456d34a4Duncan Sands    SRL_I128,
36495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SRA_I32,
37495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SRA_I64,
38dddc6291fb5274282a20d5923b50535d456d34a4Duncan Sands    SRA_I128,
39495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    MUL_I32,
40495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    MUL_I64,
415ac319ac7125b009adddcc49294d2e040c4a91e5Duncan Sands    MUL_I128,
42495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SDIV_I32,
43495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SDIV_I64,
445ac319ac7125b009adddcc49294d2e040c4a91e5Duncan Sands    SDIV_I128,
45495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UDIV_I32,
46495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UDIV_I64,
475ac319ac7125b009adddcc49294d2e040c4a91e5Duncan Sands    UDIV_I128,
48495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SREM_I32,
49495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SREM_I64,
505ac319ac7125b009adddcc49294d2e040c4a91e5Duncan Sands    SREM_I128,
51495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UREM_I32,
52495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UREM_I64,
535ac319ac7125b009adddcc49294d2e040c4a91e5Duncan Sands    UREM_I128,
54495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    NEG_I32,
55495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    NEG_I64,
56495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng
57495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    // FLOATING POINT
58495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    ADD_F32,
59495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    ADD_F64,
60007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    ADD_F80,
61161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    ADD_PPCF128,
62495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SUB_F32,
63495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SUB_F64,
64007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    SUB_F80,
65161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    SUB_PPCF128,
66495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    MUL_F32,
67495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    MUL_F64,
68007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    MUL_F80,
69161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    MUL_PPCF128,
70495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    DIV_F32,
71495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    DIV_F64,
72007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    DIV_F80,
73161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    DIV_PPCF128,
74495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    REM_F32,
75495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    REM_F64,
76007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    REM_F80,
77161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    REM_PPCF128,
78495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    POWI_F32,
79495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    POWI_F64,
80161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    POWI_F80,
81161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    POWI_PPCF128,
82495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SQRT_F32,
83495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SQRT_F64,
84161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    SQRT_F80,
85161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    SQRT_PPCF128,
86495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SIN_F32,
87495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SIN_F64,
88007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    SIN_F80,
89007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    SIN_PPCF128,
90495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    COS_F32,
91495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    COS_F64,
92007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    COS_F80,
93007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    COS_PPCF128,
94e54be104180d81b61c5fcc29ccb7960f9b78476eDan Gohman    POW_F32,
95e54be104180d81b61c5fcc29ccb7960f9b78476eDan Gohman    POW_F64,
96e54be104180d81b61c5fcc29ccb7960f9b78476eDan Gohman    POW_F80,
97e54be104180d81b61c5fcc29ccb7960f9b78476eDan Gohman    POW_PPCF128,
98495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng
99495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    // CONVERSION
100495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPEXT_F32_F64,
101495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPROUND_F64_F32,
102495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOSINT_F32_I32,
103495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOSINT_F32_I64,
104a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOSINT_F32_I128,
105495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOSINT_F64_I32,
106495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOSINT_F64_I64,
107a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOSINT_F64_I128,
108be1ad4de2900451626c8d4ace07b9ea16099ea1dDuncan Sands    FPTOSINT_F80_I32,
109161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    FPTOSINT_F80_I64,
110a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOSINT_F80_I128,
111041cde26eaf4ef6171ff1a44aeedd08d7a1cba6cDuncan Sands    FPTOSINT_PPCF128_I32,
112161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    FPTOSINT_PPCF128_I64,
113a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOSINT_PPCF128_I128,
114495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOUINT_F32_I32,
115495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOUINT_F32_I64,
116a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOUINT_F32_I128,
117495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOUINT_F64_I32,
118495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOUINT_F64_I64,
119a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOUINT_F64_I128,
120161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    FPTOUINT_F80_I32,
121161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    FPTOUINT_F80_I64,
122a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOUINT_F80_I128,
123041cde26eaf4ef6171ff1a44aeedd08d7a1cba6cDuncan Sands    FPTOUINT_PPCF128_I32,
124161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    FPTOUINT_PPCF128_I64,
125a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOUINT_PPCF128_I128,
126495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SINTTOFP_I32_F32,
127495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SINTTOFP_I32_F64,
1289bed0f58eb7f5e9e22d062f3880a5fabfdd0dfddDuncan Sands    SINTTOFP_I32_F80,
1299bed0f58eb7f5e9e22d062f3880a5fabfdd0dfddDuncan Sands    SINTTOFP_I32_PPCF128,
130495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SINTTOFP_I64_F32,
131495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SINTTOFP_I64_F64,
132161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    SINTTOFP_I64_F80,
133161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    SINTTOFP_I64_PPCF128,
134d91446de7a89a22c8ea1cbfd40fe2528467a4ccbDan Gohman    SINTTOFP_I128_F32,
135d91446de7a89a22c8ea1cbfd40fe2528467a4ccbDan Gohman    SINTTOFP_I128_F64,
136d91446de7a89a22c8ea1cbfd40fe2528467a4ccbDan Gohman    SINTTOFP_I128_F80,
137d91446de7a89a22c8ea1cbfd40fe2528467a4ccbDan Gohman    SINTTOFP_I128_PPCF128,
138495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UINTTOFP_I32_F32,
139495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UINTTOFP_I32_F64,
140495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UINTTOFP_I64_F32,
141495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UINTTOFP_I64_F64,
142495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng
143495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    // COMPARISON
144495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OEQ_F32,
145495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OEQ_F64,
146495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UNE_F32,
147495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UNE_F64,
148495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OGE_F32,
149495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OGE_F64,
150495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OLT_F32,
151495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OLT_F64,
152495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OLE_F32,
153495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OLE_F64,
154495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OGT_F32,
155495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OGT_F64,
156495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UO_F32,
157495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UO_F64,
158991d3616c8383688f1acf443cc698edef850da4dEvan Cheng    O_F32,
159991d3616c8383688f1acf443cc698edef850da4dEvan Cheng    O_F64,
160495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng
161495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UNKNOWN_LIBCALL
162495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng  };
163495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng}
164495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng}
165495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng
166495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng#endif
167