1bd9f36f4db42f4b73caeb8cfe04e98f047d99375Duncan P. N. Exon Smith//===-- CodeGen/RuntimeLibcalls.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
11b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands// the backend may emit during code generation, and also some helper functions.
12495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng//
13495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng//===----------------------------------------------------------------------===//
14495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng
15495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng#ifndef LLVM_CODEGEN_RUNTIMELIBCALLS_H
16495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng#define LLVM_CODEGEN_RUNTIMELIBCALLS_H
17495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng
18b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands#include "llvm/CodeGen/ValueTypes.h"
19b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands
20495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Chengnamespace llvm {
21495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Chengnamespace RTLIB {
22495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng  /// RTLIB::Libcall enum - This enum defines all of the runtime library calls
23161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen  /// the backend can emit.  The various long double types cannot be merged,
24161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen  /// because 80-bit library functions use "xf" and 128-bit use "tf".
25362fee90b9a1d64ac091755466caf6a94ade22ebEric Christopher  ///
26fabd32deb025ebd47c5eb47259d2424fd789b05cDale Johannesen  /// When adding PPCF128 functions here, note that their names generally need
27fabd32deb025ebd47c5eb47259d2424fd789b05cDale Johannesen  /// to be overridden for Darwin with the xxx$LDBL128 form.  See
28fabd32deb025ebd47c5eb47259d2424fd789b05cDale Johannesen  /// PPCISelLowering.cpp.
29495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng  ///
30495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng  enum Libcall {
31495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    // Integer
3215c94d08ab2be2e3d00de4edbfc7adde6545a7dbSanjiv Gupta    SHL_I16,
33495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SHL_I32,
34495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SHL_I64,
35dddc6291fb5274282a20d5923b50535d456d34a4Duncan Sands    SHL_I128,
3615c94d08ab2be2e3d00de4edbfc7adde6545a7dbSanjiv Gupta    SRL_I16,
37495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SRL_I32,
38495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SRL_I64,
39dddc6291fb5274282a20d5923b50535d456d34a4Duncan Sands    SRL_I128,
4015c94d08ab2be2e3d00de4edbfc7adde6545a7dbSanjiv Gupta    SRA_I16,
41495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SRA_I32,
42495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SRA_I64,
43dddc6291fb5274282a20d5923b50535d456d34a4Duncan Sands    SRA_I128,
448983da729aa1ca99a11a3b98ae6280dfcdbadb39Anton Korobeynikov    MUL_I8,
4515c94d08ab2be2e3d00de4edbfc7adde6545a7dbSanjiv Gupta    MUL_I16,
46495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    MUL_I32,
47495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    MUL_I64,
485ac319ac7125b009adddcc49294d2e040c4a91e5Duncan Sands    MUL_I128,
49362fee90b9a1d64ac091755466caf6a94ade22ebEric Christopher    MULO_I32,
50362fee90b9a1d64ac091755466caf6a94ade22ebEric Christopher    MULO_I64,
51362fee90b9a1d64ac091755466caf6a94ade22ebEric Christopher    MULO_I128,
528983da729aa1ca99a11a3b98ae6280dfcdbadb39Anton Korobeynikov    SDIV_I8,
53813090cf891325c715b9f6fb1546e6ce67fa8c8bAnton Korobeynikov    SDIV_I16,
54495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SDIV_I32,
55495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SDIV_I64,
565ac319ac7125b009adddcc49294d2e040c4a91e5Duncan Sands    SDIV_I128,
578983da729aa1ca99a11a3b98ae6280dfcdbadb39Anton Korobeynikov    UDIV_I8,
58813090cf891325c715b9f6fb1546e6ce67fa8c8bAnton Korobeynikov    UDIV_I16,
59495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UDIV_I32,
60495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UDIV_I64,
615ac319ac7125b009adddcc49294d2e040c4a91e5Duncan Sands    UDIV_I128,
628983da729aa1ca99a11a3b98ae6280dfcdbadb39Anton Korobeynikov    SREM_I8,
63813090cf891325c715b9f6fb1546e6ce67fa8c8bAnton Korobeynikov    SREM_I16,
64495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SREM_I32,
65495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SREM_I64,
665ac319ac7125b009adddcc49294d2e040c4a91e5Duncan Sands    SREM_I128,
678983da729aa1ca99a11a3b98ae6280dfcdbadb39Anton Korobeynikov    UREM_I8,
68813090cf891325c715b9f6fb1546e6ce67fa8c8bAnton Korobeynikov    UREM_I16,
69495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UREM_I32,
70495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UREM_I64,
715ac319ac7125b009adddcc49294d2e040c4a91e5Duncan Sands    UREM_I128,
728e23e815ad1136721acdfcce76975a37c8a2c036Evan Cheng    SDIVREM_I8,
738e23e815ad1136721acdfcce76975a37c8a2c036Evan Cheng    SDIVREM_I16,
748e23e815ad1136721acdfcce76975a37c8a2c036Evan Cheng    SDIVREM_I32,
758e23e815ad1136721acdfcce76975a37c8a2c036Evan Cheng    SDIVREM_I64,
768e23e815ad1136721acdfcce76975a37c8a2c036Evan Cheng    SDIVREM_I128,
778e23e815ad1136721acdfcce76975a37c8a2c036Evan Cheng    UDIVREM_I8,
788e23e815ad1136721acdfcce76975a37c8a2c036Evan Cheng    UDIVREM_I16,
798e23e815ad1136721acdfcce76975a37c8a2c036Evan Cheng    UDIVREM_I32,
808e23e815ad1136721acdfcce76975a37c8a2c036Evan Cheng    UDIVREM_I64,
818e23e815ad1136721acdfcce76975a37c8a2c036Evan Cheng    UDIVREM_I128,
82495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    NEG_I32,
83495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    NEG_I64,
84495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng
85495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    // FLOATING POINT
86495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    ADD_F32,
87495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    ADD_F64,
88007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    ADD_F80,
8924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    ADD_F128,
90161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    ADD_PPCF128,
91495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SUB_F32,
92495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SUB_F64,
93007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    SUB_F80,
9424d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    SUB_F128,
95161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    SUB_PPCF128,
96495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    MUL_F32,
97495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    MUL_F64,
98007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    MUL_F80,
9924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    MUL_F128,
100161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    MUL_PPCF128,
101495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    DIV_F32,
102495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    DIV_F64,
103007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    DIV_F80,
10424d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    DIV_F128,
105161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    DIV_PPCF128,
106495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    REM_F32,
107495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    REM_F64,
108007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    REM_F80,
10924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    REM_F128,
110161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    REM_PPCF128,
11133390848a7eca75301d04a59b89b516d83e19ee0Cameron Zwarich    FMA_F32,
11233390848a7eca75301d04a59b89b516d83e19ee0Cameron Zwarich    FMA_F64,
11333390848a7eca75301d04a59b89b516d83e19ee0Cameron Zwarich    FMA_F80,
11424d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    FMA_F128,
11533390848a7eca75301d04a59b89b516d83e19ee0Cameron Zwarich    FMA_PPCF128,
116495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    POWI_F32,
117495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    POWI_F64,
118161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    POWI_F80,
11924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    POWI_F128,
120161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    POWI_PPCF128,
121495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SQRT_F32,
122495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SQRT_F64,
123161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    SQRT_F80,
12424d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    SQRT_F128,
125161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    SQRT_PPCF128,
1267794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    LOG_F32,
1277794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    LOG_F64,
1287794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    LOG_F80,
12924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    LOG_F128,
1307794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    LOG_PPCF128,
1317794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    LOG2_F32,
1327794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    LOG2_F64,
1337794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    LOG2_F80,
13424d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    LOG2_F128,
1357794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    LOG2_PPCF128,
1367794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    LOG10_F32,
1377794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    LOG10_F64,
1387794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    LOG10_F80,
13924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    LOG10_F128,
1407794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    LOG10_PPCF128,
1417794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    EXP_F32,
1427794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    EXP_F64,
1437794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    EXP_F80,
14424d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    EXP_F128,
1457794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    EXP_PPCF128,
1467794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    EXP2_F32,
1477794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    EXP2_F64,
1487794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    EXP2_F80,
14924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    EXP2_F128,
1507794f2a3a7778bdbc9bdd861db1fe914450e0470Dale Johannesen    EXP2_PPCF128,
151495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SIN_F32,
152495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SIN_F64,
153007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    SIN_F80,
15424d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    SIN_F128,
155007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    SIN_PPCF128,
156495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    COS_F32,
157495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    COS_F64,
158007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    COS_F80,
15924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    COS_F128,
160007f9847c44ddbe7fd04cba362b4ec0f0f40964bDuncan Sands    COS_PPCF128,
1618688a58c53b46d2dda9bf50dafd5195790a7ed58Evan Cheng    SINCOS_F32,
1628688a58c53b46d2dda9bf50dafd5195790a7ed58Evan Cheng    SINCOS_F64,
1638688a58c53b46d2dda9bf50dafd5195790a7ed58Evan Cheng    SINCOS_F80,
1648688a58c53b46d2dda9bf50dafd5195790a7ed58Evan Cheng    SINCOS_F128,
1658688a58c53b46d2dda9bf50dafd5195790a7ed58Evan Cheng    SINCOS_PPCF128,
166e54be104180d81b61c5fcc29ccb7960f9b78476eDan Gohman    POW_F32,
167e54be104180d81b61c5fcc29ccb7960f9b78476eDan Gohman    POW_F64,
168e54be104180d81b61c5fcc29ccb7960f9b78476eDan Gohman    POW_F80,
16924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    POW_F128,
170e54be104180d81b61c5fcc29ccb7960f9b78476eDan Gohman    POW_PPCF128,
1712bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    CEIL_F32,
1722bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    CEIL_F64,
1732bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    CEIL_F80,
17424d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    CEIL_F128,
1752bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    CEIL_PPCF128,
1762bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    TRUNC_F32,
1772bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    TRUNC_F64,
1782bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    TRUNC_F80,
17924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    TRUNC_F128,
1802bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    TRUNC_PPCF128,
1812bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    RINT_F32,
1822bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    RINT_F64,
1832bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    RINT_F80,
18424d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    RINT_F128,
1852bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    RINT_PPCF128,
1862bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    NEARBYINT_F32,
1872bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    NEARBYINT_F64,
1882bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    NEARBYINT_F80,
18924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    NEARBYINT_F128,
1902bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    NEARBYINT_PPCF128,
19141418d17cced656f91038b2482bc9d173b4974b0Hal Finkel    ROUND_F32,
19241418d17cced656f91038b2482bc9d173b4974b0Hal Finkel    ROUND_F64,
19341418d17cced656f91038b2482bc9d173b4974b0Hal Finkel    ROUND_F80,
19441418d17cced656f91038b2482bc9d173b4974b0Hal Finkel    ROUND_F128,
19541418d17cced656f91038b2482bc9d173b4974b0Hal Finkel    ROUND_PPCF128,
1962bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    FLOOR_F32,
1972bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    FLOOR_F64,
1982bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    FLOOR_F80,
19924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    FLOOR_F128,
2002bb1e3eede14dd8a965506465e2876fb1ae765c2Dan Gohman    FLOOR_PPCF128,
201d2c817eff1d158398fb0a620fa762bf95207922fDuncan Sands    COPYSIGN_F32,
202d2c817eff1d158398fb0a620fa762bf95207922fDuncan Sands    COPYSIGN_F64,
203d2c817eff1d158398fb0a620fa762bf95207922fDuncan Sands    COPYSIGN_F80,
20424d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    COPYSIGN_F128,
205d2c817eff1d158398fb0a620fa762bf95207922fDuncan Sands    COPYSIGN_PPCF128,
20637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    FMIN_F32,
20737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    FMIN_F64,
20837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    FMIN_F80,
20937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    FMIN_F128,
21037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    FMIN_PPCF128,
21137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    FMAX_F32,
21237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    FMAX_F64,
21337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    FMAX_F80,
21437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    FMAX_F128,
21537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    FMAX_PPCF128,
216495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng
217495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    // CONVERSION
21824d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    FPEXT_F64_F128,
21924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    FPEXT_F32_F128,
220495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPEXT_F32_F64,
221927411b7ce0b7852fe4f392d8cd4faaa3881f852Anton Korobeynikov    FPEXT_F16_F32,
222927411b7ce0b7852fe4f392d8cd4faaa3881f852Anton Korobeynikov    FPROUND_F32_F16,
22337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    FPROUND_F64_F16,
22437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    FPROUND_F80_F16,
22537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    FPROUND_F128_F16,
22637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    FPROUND_PPCF128_F16,
227495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPROUND_F64_F32,
228e36bfe678df09f46e1eac60b15105c1ccd2c5382Bruno Cardoso Lopes    FPROUND_F80_F32,
22924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    FPROUND_F128_F32,
230e36bfe678df09f46e1eac60b15105c1ccd2c5382Bruno Cardoso Lopes    FPROUND_PPCF128_F32,
231e36bfe678df09f46e1eac60b15105c1ccd2c5382Bruno Cardoso Lopes    FPROUND_F80_F64,
23224d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    FPROUND_F128_F64,
233e36bfe678df09f46e1eac60b15105c1ccd2c5382Bruno Cardoso Lopes    FPROUND_PPCF128_F64,
234495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOSINT_F32_I32,
235495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOSINT_F32_I64,
236a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOSINT_F32_I128,
237495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOSINT_F64_I32,
238495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOSINT_F64_I64,
239a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOSINT_F64_I128,
240be1ad4de2900451626c8d4ace07b9ea16099ea1dDuncan Sands    FPTOSINT_F80_I32,
241161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    FPTOSINT_F80_I64,
242a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOSINT_F80_I128,
24324d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    FPTOSINT_F128_I32,
24424d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    FPTOSINT_F128_I64,
24524d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    FPTOSINT_F128_I128,
246041cde26eaf4ef6171ff1a44aeedd08d7a1cba6cDuncan Sands    FPTOSINT_PPCF128_I32,
247161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    FPTOSINT_PPCF128_I64,
248a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOSINT_PPCF128_I128,
249495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOUINT_F32_I32,
250495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOUINT_F32_I64,
251a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOUINT_F32_I128,
252495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOUINT_F64_I32,
253495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    FPTOUINT_F64_I64,
254a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOUINT_F64_I128,
255161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    FPTOUINT_F80_I32,
256161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    FPTOUINT_F80_I64,
257a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOUINT_F80_I128,
25824d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    FPTOUINT_F128_I32,
25924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    FPTOUINT_F128_I64,
26024d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    FPTOUINT_F128_I128,
261041cde26eaf4ef6171ff1a44aeedd08d7a1cba6cDuncan Sands    FPTOUINT_PPCF128_I32,
262161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    FPTOUINT_PPCF128_I64,
263a2e9485e34f1348526ed104dbdc194673e291077Dan Gohman    FPTOUINT_PPCF128_I128,
264495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SINTTOFP_I32_F32,
265495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SINTTOFP_I32_F64,
2669bed0f58eb7f5e9e22d062f3880a5fabfdd0dfddDuncan Sands    SINTTOFP_I32_F80,
26724d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    SINTTOFP_I32_F128,
2689bed0f58eb7f5e9e22d062f3880a5fabfdd0dfddDuncan Sands    SINTTOFP_I32_PPCF128,
269495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SINTTOFP_I64_F32,
270495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    SINTTOFP_I64_F64,
271161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    SINTTOFP_I64_F80,
27224d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    SINTTOFP_I64_F128,
273161e897b0fb35d156b2fe720fadabd975b0d6723Dale Johannesen    SINTTOFP_I64_PPCF128,
274d91446de7a89a22c8ea1cbfd40fe2528467a4ccbDan Gohman    SINTTOFP_I128_F32,
275d91446de7a89a22c8ea1cbfd40fe2528467a4ccbDan Gohman    SINTTOFP_I128_F64,
276d91446de7a89a22c8ea1cbfd40fe2528467a4ccbDan Gohman    SINTTOFP_I128_F80,
27724d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    SINTTOFP_I128_F128,
278d91446de7a89a22c8ea1cbfd40fe2528467a4ccbDan Gohman    SINTTOFP_I128_PPCF128,
279495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UINTTOFP_I32_F32,
280495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UINTTOFP_I32_F64,
281ac6cecec189ba9689c42543c3106c02b96d788daDuncan Sands    UINTTOFP_I32_F80,
28224d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    UINTTOFP_I32_F128,
283ac6cecec189ba9689c42543c3106c02b96d788daDuncan Sands    UINTTOFP_I32_PPCF128,
284495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UINTTOFP_I64_F32,
285495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UINTTOFP_I64_F64,
286ac6cecec189ba9689c42543c3106c02b96d788daDuncan Sands    UINTTOFP_I64_F80,
28724d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    UINTTOFP_I64_F128,
288ac6cecec189ba9689c42543c3106c02b96d788daDuncan Sands    UINTTOFP_I64_PPCF128,
289ac6cecec189ba9689c42543c3106c02b96d788daDuncan Sands    UINTTOFP_I128_F32,
290ac6cecec189ba9689c42543c3106c02b96d788daDuncan Sands    UINTTOFP_I128_F64,
291ac6cecec189ba9689c42543c3106c02b96d788daDuncan Sands    UINTTOFP_I128_F80,
29224d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    UINTTOFP_I128_F128,
293ac6cecec189ba9689c42543c3106c02b96d788daDuncan Sands    UINTTOFP_I128_PPCF128,
294495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng
295495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    // COMPARISON
296495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OEQ_F32,
297495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OEQ_F64,
29824d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    OEQ_F128,
299495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UNE_F32,
300495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UNE_F64,
30124d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    UNE_F128,
302495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OGE_F32,
303495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OGE_F64,
30424d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    OGE_F128,
305495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OLT_F32,
306495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OLT_F64,
30724d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    OLT_F128,
308495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OLE_F32,
309495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OLE_F64,
31024d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    OLE_F128,
311495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OGT_F32,
312495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    OGT_F64,
31324d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    OGT_F128,
314495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UO_F32,
315495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UO_F64,
31624d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    UO_F128,
317991d3616c8383688f1acf443cc698edef850da4dEvan Cheng    O_F32,
318991d3616c8383688f1acf443cc698edef850da4dEvan Cheng    O_F64,
31924d315dc053e8130593a8053bd6dc0245632f5f3Tim Northover    O_F128,
320495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng
321a114baa5bf0d70aed8b8cf576a864005c0d6a128Sanjiv Gupta    // MEMORY
322a114baa5bf0d70aed8b8cf576a864005c0d6a128Sanjiv Gupta    MEMCPY,
323a114baa5bf0d70aed8b8cf576a864005c0d6a128Sanjiv Gupta    MEMSET,
324a114baa5bf0d70aed8b8cf576a864005c0d6a128Sanjiv Gupta    MEMMOVE,
325a114baa5bf0d70aed8b8cf576a864005c0d6a128Sanjiv Gupta
326b0f1e1780c736c62fb99e5824825d2a60a53b53bDuncan Sands    // EXCEPTION HANDLING
327b0f1e1780c736c62fb99e5824825d2a60a53b53bDuncan Sands    UNWIND_RESUME,
328b0f1e1780c736c62fb99e5824825d2a60a53b53bDuncan Sands
329e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    // Family ATOMICs
330e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_VAL_COMPARE_AND_SWAP_1,
331e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_VAL_COMPARE_AND_SWAP_2,
332e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_VAL_COMPARE_AND_SWAP_4,
333e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_VAL_COMPARE_AND_SWAP_8,
334641bea117d2f5e68c11156b9eea1c9270825dfb9David Majnemer    SYNC_VAL_COMPARE_AND_SWAP_16,
335ef6eb9c7ab7967790566c5e2d47977d89fc060eeJim Grosbach    SYNC_LOCK_TEST_AND_SET_1,
336ef6eb9c7ab7967790566c5e2d47977d89fc060eeJim Grosbach    SYNC_LOCK_TEST_AND_SET_2,
337ef6eb9c7ab7967790566c5e2d47977d89fc060eeJim Grosbach    SYNC_LOCK_TEST_AND_SET_4,
338ef6eb9c7ab7967790566c5e2d47977d89fc060eeJim Grosbach    SYNC_LOCK_TEST_AND_SET_8,
339641bea117d2f5e68c11156b9eea1c9270825dfb9David Majnemer    SYNC_LOCK_TEST_AND_SET_16,
340e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_ADD_1,
341e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_ADD_2,
342e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_ADD_4,
343e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_ADD_8,
344641bea117d2f5e68c11156b9eea1c9270825dfb9David Majnemer    SYNC_FETCH_AND_ADD_16,
345e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_SUB_1,
346e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_SUB_2,
347e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_SUB_4,
348e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_SUB_8,
349641bea117d2f5e68c11156b9eea1c9270825dfb9David Majnemer    SYNC_FETCH_AND_SUB_16,
350e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_AND_1,
351e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_AND_2,
352e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_AND_4,
353e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_AND_8,
354641bea117d2f5e68c11156b9eea1c9270825dfb9David Majnemer    SYNC_FETCH_AND_AND_16,
355e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_OR_1,
356e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_OR_2,
357e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_OR_4,
358e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_OR_8,
359641bea117d2f5e68c11156b9eea1c9270825dfb9David Majnemer    SYNC_FETCH_AND_OR_16,
360e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_XOR_1,
361e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_XOR_2,
362e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_XOR_4,
363e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_XOR_8,
364641bea117d2f5e68c11156b9eea1c9270825dfb9David Majnemer    SYNC_FETCH_AND_XOR_16,
365e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_NAND_1,
366e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_NAND_2,
367e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_NAND_4,
368e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach    SYNC_FETCH_AND_NAND_8,
369641bea117d2f5e68c11156b9eea1c9270825dfb9David Majnemer    SYNC_FETCH_AND_NAND_16,
3705a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_MAX_1,
3715a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_MAX_2,
3725a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_MAX_4,
3735a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_MAX_8,
3745a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_MAX_16,
3755a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_UMAX_1,
3765a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_UMAX_2,
3775a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_UMAX_4,
3785a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_UMAX_8,
3795a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_UMAX_16,
3805a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_MIN_1,
3815a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_MIN_2,
3825a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_MIN_4,
3835a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_MIN_8,
3845a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_MIN_16,
3855a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_UMIN_1,
3865a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_UMIN_2,
3875a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_UMIN_4,
3885a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_UMIN_8,
3895a42ae81f742aaab826b7a72cb0a9a7e5a957a07Tim Northover    SYNC_FETCH_AND_UMIN_16,
390e03262fcfc09356a0e3ec589041bc2e0248944e9Jim Grosbach
39115b2782ccf141930cc98507a1cb1d501fbfd4000Michael Gottesman    // Stack Protector Fail.
39215b2782ccf141930cc98507a1cb1d501fbfd4000Michael Gottesman    STACKPROTECTOR_CHECK_FAIL,
39315b2782ccf141930cc98507a1cb1d501fbfd4000Michael Gottesman
394495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng    UNKNOWN_LIBCALL
395495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng  };
396b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands
397b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands  /// getFPEXT - Return the FPEXT_*_* value for the given types, or
398b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands  /// UNKNOWN_LIBCALL if there is none.
399e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson  Libcall getFPEXT(EVT OpVT, EVT RetVT);
400b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands
401b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands  /// getFPROUND - Return the FPROUND_*_* value for the given types, or
402b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands  /// UNKNOWN_LIBCALL if there is none.
403e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson  Libcall getFPROUND(EVT OpVT, EVT RetVT);
404b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands
405b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands  /// getFPTOSINT - Return the FPTOSINT_*_* value for the given types, or
406b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands  /// UNKNOWN_LIBCALL if there is none.
407e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson  Libcall getFPTOSINT(EVT OpVT, EVT RetVT);
408b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands
409b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands  /// getFPTOUINT - Return the FPTOUINT_*_* value for the given types, or
410b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands  /// UNKNOWN_LIBCALL if there is none.
411e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson  Libcall getFPTOUINT(EVT OpVT, EVT RetVT);
412b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands
413b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands  /// getSINTTOFP - Return the SINTTOFP_*_* value for the given types, or
414b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands  /// UNKNOWN_LIBCALL if there is none.
415e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson  Libcall getSINTTOFP(EVT OpVT, EVT RetVT);
416b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands
417b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands  /// getUINTTOFP - Return the UINTTOFP_*_* value for the given types, or
418b2ff885aaed8f9b033b16ca78d645650efc32433Duncan Sands  /// UNKNOWN_LIBCALL if there is none.
419e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson  Libcall getUINTTOFP(EVT OpVT, EVT RetVT);
4204c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar
4214c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar  /// Return the SYNC_FETCH_AND_* value for the given opcode and type, or
4224c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar  /// UNKNOWN_LIBCALL if there is none.
4234c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar  Libcall getATOMIC(unsigned Opc, MVT VT);
424495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng}
425495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng}
426495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng
427495600120e9d6c7599c599b7b16a9e8789c65aa5Evan Cheng#endif
428