Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
14 | pmbaty | 1 | //===-- CodeGen/RuntimeLibcalls.h - Runtime Library Calls -------*- C++ -*-===// |
2 | // |
||
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
||
4 | // See https://llvm.org/LICENSE.txt for license information. |
||
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
||
6 | // |
||
7 | //===----------------------------------------------------------------------===// |
||
8 | // |
||
9 | // This file defines the enum representing the list of runtime library calls |
||
10 | // the backend may emit during code generation, and also some helper functions. |
||
11 | // |
||
12 | //===----------------------------------------------------------------------===// |
||
13 | |||
14 | #ifndef LLVM_CODEGEN_RUNTIMELIBCALLS_H |
||
15 | #define LLVM_CODEGEN_RUNTIMELIBCALLS_H |
||
16 | |||
17 | #include "llvm/CodeGen/ValueTypes.h" |
||
18 | #include "llvm/Support/AtomicOrdering.h" |
||
19 | |||
20 | namespace llvm { |
||
21 | namespace RTLIB { |
||
22 | /// RTLIB::Libcall enum - This enum defines all of the runtime library calls |
||
23 | /// the backend can emit. The various long double types cannot be merged, |
||
24 | /// because 80-bit library functions use "xf" and 128-bit use "tf". |
||
25 | /// |
||
26 | /// When adding PPCF128 functions here, note that their names generally need |
||
27 | /// to be overridden for Darwin with the xxx$LDBL128 form. See |
||
28 | /// PPCISelLowering.cpp. |
||
29 | /// |
||
30 | enum Libcall { |
||
31 | #define HANDLE_LIBCALL(code, name) code, |
||
32 | #include "llvm/IR/RuntimeLibcalls.def" |
||
33 | #undef HANDLE_LIBCALL |
||
34 | }; |
||
35 | |||
36 | /// GetFPLibCall - Helper to return the right libcall for the given floating |
||
37 | /// point type, or UNKNOWN_LIBCALL if there is none. |
||
38 | Libcall getFPLibCall(EVT VT, |
||
39 | Libcall Call_F32, |
||
40 | Libcall Call_F64, |
||
41 | Libcall Call_F80, |
||
42 | Libcall Call_F128, |
||
43 | Libcall Call_PPCF128); |
||
44 | |||
45 | /// getFPEXT - Return the FPEXT_*_* value for the given types, or |
||
46 | /// UNKNOWN_LIBCALL if there is none. |
||
47 | Libcall getFPEXT(EVT OpVT, EVT RetVT); |
||
48 | |||
49 | /// getFPROUND - Return the FPROUND_*_* value for the given types, or |
||
50 | /// UNKNOWN_LIBCALL if there is none. |
||
51 | Libcall getFPROUND(EVT OpVT, EVT RetVT); |
||
52 | |||
53 | /// getFPTOSINT - Return the FPTOSINT_*_* value for the given types, or |
||
54 | /// UNKNOWN_LIBCALL if there is none. |
||
55 | Libcall getFPTOSINT(EVT OpVT, EVT RetVT); |
||
56 | |||
57 | /// getFPTOUINT - Return the FPTOUINT_*_* value for the given types, or |
||
58 | /// UNKNOWN_LIBCALL if there is none. |
||
59 | Libcall getFPTOUINT(EVT OpVT, EVT RetVT); |
||
60 | |||
61 | /// getSINTTOFP - Return the SINTTOFP_*_* value for the given types, or |
||
62 | /// UNKNOWN_LIBCALL if there is none. |
||
63 | Libcall getSINTTOFP(EVT OpVT, EVT RetVT); |
||
64 | |||
65 | /// getUINTTOFP - Return the UINTTOFP_*_* value for the given types, or |
||
66 | /// UNKNOWN_LIBCALL if there is none. |
||
67 | Libcall getUINTTOFP(EVT OpVT, EVT RetVT); |
||
68 | |||
69 | /// getPOWI - Return the POWI_* value for the given types, or |
||
70 | /// UNKNOWN_LIBCALL if there is none. |
||
71 | Libcall getPOWI(EVT RetVT); |
||
72 | |||
73 | /// Return the SYNC_FETCH_AND_* value for the given opcode and type, or |
||
74 | /// UNKNOWN_LIBCALL if there is none. |
||
75 | Libcall getSYNC(unsigned Opc, MVT VT); |
||
76 | |||
77 | /// Return the outline atomics value for the given opcode, atomic ordering |
||
78 | /// and type, or UNKNOWN_LIBCALL if there is none. |
||
79 | Libcall getOUTLINE_ATOMIC(unsigned Opc, AtomicOrdering Order, MVT VT); |
||
80 | |||
81 | /// getMEMCPY_ELEMENT_UNORDERED_ATOMIC - Return |
||
82 | /// MEMCPY_ELEMENT_UNORDERED_ATOMIC_* value for the given element size or |
||
83 | /// UNKNOW_LIBCALL if there is none. |
||
84 | Libcall getMEMCPY_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize); |
||
85 | |||
86 | /// getMEMMOVE_ELEMENT_UNORDERED_ATOMIC - Return |
||
87 | /// MEMMOVE_ELEMENT_UNORDERED_ATOMIC_* value for the given element size or |
||
88 | /// UNKNOW_LIBCALL if there is none. |
||
89 | Libcall getMEMMOVE_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize); |
||
90 | |||
91 | /// getMEMSET_ELEMENT_UNORDERED_ATOMIC - Return |
||
92 | /// MEMSET_ELEMENT_UNORDERED_ATOMIC_* value for the given element size or |
||
93 | /// UNKNOW_LIBCALL if there is none. |
||
94 | Libcall getMEMSET_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize); |
||
95 | |||
96 | } |
||
97 | } |
||
98 | |||
99 | #endif |