1 /*========================== begin_copyright_notice ============================
2 
3 Copyright (C) 2021 Intel Corporation
4 
5 SPDX-License-Identifier: MIT
6 
7 ============================= end_copyright_notice ===========================*/
8 
9 #ifndef VC_BIF_WRAPPER_H
10 #define VC_BIF_WRAPPER_H
11 
12 #include "vc/BiF/RawData.h"
13 
14 #include <llvm/ADT/StringRef.h>
15 
16 namespace vc {
17 namespace bif {
18 
19 enum class RawKind {
20   PrintfCM32,
21   PrintfCM64,
22   PrintfOCL32,
23   PrintfOCL64,
24   PrintfZE32,
25   PrintfZE64,
26   Emulation,
27   SPIRVBuiltins
28 };
29 
getPrintfCM32RawData()30 inline llvm::StringRef getPrintfCM32RawData() {
31   // FIXME: write a module for cmrt printf.
32   return "";
33 }
34 
getPrintfCM64RawData()35 inline llvm::StringRef getPrintfCM64RawData() {
36   // FIXME: write a module for cmrt printf.
37   return "";
38 }
39 
getPrintfOCL32RawData()40 inline llvm::StringRef getPrintfOCL32RawData() {
41 #ifdef IGC_VC_DISABLE_BIF
42   return "";
43 #else  // IGC_VC_DISABLE_BIF
44   return {reinterpret_cast<char *>(VCBiFPrintfOCL32RawData),
45           VCBiFPrintfOCL32RawData_size};
46 #endif // IGC_VC_DISABLE_BIF
47 }
48 
getPrintfOCL64RawData()49 inline llvm::StringRef getPrintfOCL64RawData() {
50 #ifdef IGC_VC_DISABLE_BIF
51   return "";
52 #else  // IGC_VC_DISABLE_BIF
53   return {reinterpret_cast<char *>(VCBiFPrintfOCL64RawData),
54           VCBiFPrintfOCL64RawData_size};
55 #endif // IGC_VC_DISABLE_BIF
56 }
57 
getPrintfZE32RawData()58 inline llvm::StringRef getPrintfZE32RawData() {
59 #ifdef IGC_VC_DISABLE_BIF
60   return "";
61 #else  // IGC_VC_DISABLE_BIF
62   return {reinterpret_cast<char *>(VCBiFPrintfZE32RawData),
63           VCBiFPrintfZE32RawData_size};
64 #endif // IGC_VC_DISABLE_BIF
65 }
66 
getPrintfZE64RawData()67 inline llvm::StringRef getPrintfZE64RawData() {
68 #ifdef IGC_VC_DISABLE_BIF
69   return "";
70 #else  // IGC_VC_DISABLE_BIF
71   return {reinterpret_cast<char *>(VCBiFPrintfZE64RawData),
72           VCBiFPrintfZE64RawData_size};
73 #endif // IGC_VC_DISABLE_BIF
74 }
75 
getVCEmulationRawData()76 inline llvm::StringRef getVCEmulationRawData() {
77 #ifdef IGC_VC_DISABLE_BIF
78   return "";
79 #else  // IGC_VC_DISABLE_BIF
80   return {reinterpret_cast<char *>(VCEmulation64RawData),
81           VCEmulation64RawData_size};
82 #endif // IGC_VC_DISABLE_BIF
83 }
84 
getSPIRVBuiltinsRawData()85 inline llvm::StringRef getSPIRVBuiltinsRawData() {
86 #ifdef IGC_VC_DISABLE_BIF
87   return "";
88 #else  // IGC_VC_DISABLE_BIF
89   return {reinterpret_cast<char *>(VCSPIRVBuiltins64RawData),
90           VCSPIRVBuiltins64RawData_size};
91 #endif // IGC_VC_DISABLE_BIF
92 }
93 
94 template <enum RawKind> llvm::StringRef getRawData();
95 
96 template <> llvm::StringRef getRawData<RawKind::Emulation>() {
97   return getVCEmulationRawData();
98 }
99 
100 template<>
101 llvm::StringRef getRawData<RawKind::PrintfOCL32>() {
102   return getPrintfOCL32RawData();
103 }
104 
105 template<>
106 llvm::StringRef getRawData<RawKind::PrintfOCL64>() {
107   return getPrintfOCL64RawData();
108 }
109 
110 template <> llvm::StringRef getRawData<RawKind::PrintfZE32>() {
111   return getPrintfZE32RawData();
112 }
113 
114 template <> llvm::StringRef getRawData<RawKind::PrintfZE64>() {
115   return getPrintfZE64RawData();
116 }
117 
118 template <> llvm::StringRef getRawData<RawKind::PrintfCM32>() {
119   return getPrintfCM32RawData();
120 }
121 
122 template <> llvm::StringRef getRawData<RawKind::PrintfCM64>() {
123   return getPrintfCM64RawData();
124 }
125 
126 template <> llvm::StringRef getRawData<RawKind::SPIRVBuiltins>() {
127   return getSPIRVBuiltinsRawData();
128 }
129 
130 } // namespace bif
131 } // namespace vc
132 
133 #endif
134