16 #include <type_traits>
57 namespace ext::intel::math {
60 "sycl::half is not compatible with _iml_half_internal.");
62 template <
typename Tp>
63 std::enable_if_t<std::is_same_v<Tp, float>,
float>
saturate(Tp x) {
67 template <
typename Tp>
68 std::enable_if_t<std::is_same_v<Tp, float>,
float>
copysign(Tp x, Tp y) {
72 template <
typename Tp>
73 std::enable_if_t<std::is_same_v<Tp, double>,
double>
copysign(Tp x, Tp y) {
77 template <
typename Tp>
85 template <
typename Tp>
86 std::enable_if_t<std::is_same_v<Tp, float>,
float>
ceil(Tp x) {
90 template <
typename Tp>
91 std::enable_if_t<std::is_same_v<Tp, double>,
double>
ceil(Tp x) {
95 template <
typename Tp>
101 template <
typename Tp>
102 std::enable_if_t<std::is_same_v<Tp, sycl::half2>, sycl::half2>
ceil(Tp x) {
103 return sycl::half2{
ceil(x.s0()),
ceil(x.s1())};
106 template <
typename Tp>
107 std::enable_if_t<std::is_same_v<Tp, float>,
float>
floor(Tp x) {
111 template <
typename Tp>
112 std::enable_if_t<std::is_same_v<Tp, double>,
double>
floor(Tp x) {
116 template <
typename Tp>
122 template <
typename Tp>
123 std::enable_if_t<std::is_same_v<Tp, sycl::half2>, sycl::half2>
floor(Tp x) {
124 return sycl::half2{
floor(x.s0()),
floor(x.s1())};
127 template <
typename Tp>
128 std::enable_if_t<std::is_same_v<Tp, float>,
float>
inv(Tp x) {
132 template <
typename Tp>
133 std::enable_if_t<std::is_same_v<Tp, double>,
double>
inv(Tp x) {
137 template <
typename Tp>
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())};
148 template <
typename Tp>
149 std::enable_if_t<std::is_same_v<Tp, float>,
float>
rint(Tp x) {
153 template <
typename Tp>
154 std::enable_if_t<std::is_same_v<Tp, double>,
double>
rint(Tp x) {
158 template <
typename Tp>
164 template <
typename Tp>
165 std::enable_if_t<std::is_same_v<Tp, sycl::half2>, sycl::half2>
rint(Tp x) {
166 return sycl::half2{
rint(x.s0()),
rint(x.s1())};
169 template <
typename Tp>
170 std::enable_if_t<std::is_same_v<Tp, float>,
float>
sqrt(Tp x) {
174 template <
typename Tp>
175 std::enable_if_t<std::is_same_v<Tp, double>,
double>
sqrt(Tp x) {
179 template <
typename Tp>
185 template <
typename Tp>
186 std::enable_if_t<std::is_same_v<Tp, sycl::half2>, sycl::half2>
sqrt(Tp x) {
187 return sycl::half2{
sqrt(x.s0()),
sqrt(x.s1())};
190 template <
typename Tp>
191 std::enable_if_t<std::is_same_v<Tp, float>,
float>
rsqrt(Tp x) {
195 template <
typename Tp>
196 std::enable_if_t<std::is_same_v<Tp, double>,
double>
rsqrt(Tp x) {
200 template <
typename Tp>
206 template <
typename Tp>
207 std::enable_if_t<std::is_same_v<Tp, sycl::half2>, sycl::half2>
rsqrt(Tp x) {
208 return sycl::half2{
rsqrt(x.s0()),
rsqrt(x.s1())};
211 template <
typename Tp>
212 std::enable_if_t<std::is_same_v<Tp, float>,
float>
trunc(Tp x) {
216 template <
typename Tp>
217 std::enable_if_t<std::is_same_v<Tp, double>,
double>
trunc(Tp x) {
221 template <
typename Tp>
227 template <
typename Tp>
228 std::enable_if_t<std::is_same_v<Tp, sycl::half2>, sycl::half2>
trunc(Tp x) {
229 return sycl::half2{
trunc(x.s0()),
trunc(x.s1())};