11
11
#pragma once
12
12
#include < sycl/builtins.hpp>
13
13
#include < sycl/ext/intel/math/imf_half_trivial.hpp>
14
+ #include < sycl/ext/intel/math/imf_simd.hpp>
14
15
#include < sycl/half_type.hpp>
15
16
#include < type_traits>
16
17
@@ -97,7 +98,8 @@ std::enable_if_t<std::is_same_v<Tp, sycl::half>, sycl::half> ceil(Tp x) {
97
98
return __builtin_bit_cast (sycl::half, __imf_ceilf16 (xi));
98
99
}
99
100
100
- sycl::half2 ceil (sycl::half2 x) {
101
+ template <typename Tp>
102
+ std::enable_if_t <std::is_same_v<Tp, sycl::half2>, sycl::half2> ceil (Tp x) {
101
103
return sycl::half2{ceil (x.s0 ()), ceil (x.s1 ())};
102
104
}
103
105
@@ -117,7 +119,8 @@ std::enable_if_t<std::is_same_v<Tp, sycl::half>, sycl::half> floor(Tp x) {
117
119
return __builtin_bit_cast (sycl::half, __imf_floorf16 (xi));
118
120
}
119
121
120
- sycl::half2 floor (sycl::half2 x) {
122
+ template <typename Tp>
123
+ std::enable_if_t <std::is_same_v<Tp, sycl::half2>, sycl::half2> floor (Tp x) {
121
124
return sycl::half2{floor (x.s0 ()), floor (x.s1 ())};
122
125
}
123
126
@@ -137,7 +140,10 @@ std::enable_if_t<std::is_same_v<Tp, sycl::half>, sycl::half> inv(Tp x) {
137
140
return __builtin_bit_cast (sycl::half, __imf_invf16 (xi));
138
141
}
139
142
140
- sycl::half2 inv (sycl::half2 x) { return sycl::half2{inv (x.s0 ()), inv (x.s1 ())}; }
143
+ template <typename Tp>
144
+ std::enable_if_t <std::is_same_v<Tp, sycl::half2>, sycl::half2> inv (Tp x) {
145
+ return sycl::half2{inv (x.s0 ()), inv (x.s1 ())};
146
+ }
141
147
142
148
template <typename Tp>
143
149
std::enable_if_t <std::is_same_v<Tp, float >, float > rint (Tp x) {
@@ -155,7 +161,8 @@ std::enable_if_t<std::is_same_v<Tp, sycl::half>, sycl::half> rint(Tp x) {
155
161
return __builtin_bit_cast (sycl::half, __imf_rintf16 (xi));
156
162
}
157
163
158
- sycl::half2 rint (sycl::half2 x) {
164
+ template <typename Tp>
165
+ std::enable_if_t <std::is_same_v<Tp, sycl::half2>, sycl::half2> rint (Tp x) {
159
166
return sycl::half2{rint (x.s0 ()), rint (x.s1 ())};
160
167
}
161
168
@@ -175,7 +182,8 @@ std::enable_if_t<std::is_same_v<Tp, sycl::half>, sycl::half> sqrt(Tp x) {
175
182
return __builtin_bit_cast (sycl::half, __imf_sqrtf16 (xi));
176
183
}
177
184
178
- sycl::half2 sqrt (sycl::half2 x) {
185
+ template <typename Tp>
186
+ std::enable_if_t <std::is_same_v<Tp, sycl::half2>, sycl::half2> sqrt (Tp x) {
179
187
return sycl::half2{sqrt (x.s0 ()), sqrt (x.s1 ())};
180
188
}
181
189
@@ -195,7 +203,8 @@ std::enable_if_t<std::is_same_v<Tp, sycl::half>, sycl::half> rsqrt(Tp x) {
195
203
return __builtin_bit_cast (sycl::half, __imf_rsqrtf16 (xi));
196
204
}
197
205
198
- sycl::half2 rsqrt (sycl::half2 x) {
206
+ template <typename Tp>
207
+ std::enable_if_t <std::is_same_v<Tp, sycl::half2>, sycl::half2> rsqrt (Tp x) {
199
208
return sycl::half2{rsqrt (x.s0 ()), rsqrt (x.s1 ())};
200
209
}
201
210
@@ -215,9 +224,11 @@ std::enable_if_t<std::is_same_v<Tp, sycl::half>, sycl::half> trunc(Tp x) {
215
224
return __builtin_bit_cast (sycl::half, __imf_truncf16 (xi));
216
225
}
217
226
218
- sycl::half2 trunc (sycl::half2 x) {
227
+ template <typename Tp>
228
+ std::enable_if_t <std::is_same_v<Tp, sycl::half2>, sycl::half2> trunc (Tp x) {
219
229
return sycl::half2{trunc (x.s0 ()), trunc (x.s1 ())};
220
230
}
231
+
221
232
} // namespace ext::intel::math
222
233
} // __SYCL_INLINE_VER_NAMESPACE(_V1)
223
234
} // namespace sycl
0 commit comments