1313
1414// / @cond ESIMD_DETAIL
1515
16- // / **************************** WARNING ************************************
17- // / When declaring new SPIR-V intrinsics (functions starting with __spirv),
18- // / it is imperitive to exactly follow the pattern of the existing SPIR-V
19- // / intrinsics. If not followed, the declaration may conflict with
20- // / the Clang-generated functions and cause compilation errors.
21- // / **************************** WARNING ************************************
22-
2316#include < sycl/builtins.hpp>
2417#include < sycl/ext/intel/esimd/common.hpp>
2518#include < sycl/ext/intel/esimd/detail/elem_type_traits.hpp>
3932template <typename T> extern __DPCPP_SYCL_EXTERNAL T __spirv_ocl_native_exp2 (T);
4033template <typename T, int N>
4134extern __DPCPP_SYCL_EXTERNAL __ESIMD_raw_vec_t (T, N)
42- __spirv_ocl_native_exp2(__ESIMD_raw_vec_t(T, N)) __ESIMD_INTRIN_END ;
35+ __spirv_ocl_native_exp2(__ESIMD_raw_vec_t(T, N));
4336
4437template <typename T>
4538extern __DPCPP_SYCL_EXTERNAL T __spirv_ocl_native_recip (T);
4639template <typename T, int N>
4740extern __DPCPP_SYCL_EXTERNAL __ESIMD_raw_vec_t (T, N)
48- __spirv_ocl_native_recip(__ESIMD_raw_vec_t(T, N)) __ESIMD_INTRIN_END ;
41+ __spirv_ocl_native_recip(__ESIMD_raw_vec_t(T, N));
4942
5043template <typename T> extern __DPCPP_SYCL_EXTERNAL T __spirv_ocl_native_cos (T);
5144template <typename T, int N>
5245extern __DPCPP_SYCL_EXTERNAL __ESIMD_raw_vec_t (T, N)
53- __spirv_ocl_native_cos(__ESIMD_raw_vec_t(T, N)) __ESIMD_INTRIN_END ;
46+ __spirv_ocl_native_cos(__ESIMD_raw_vec_t(T, N));
5447
5548template <typename T> extern __DPCPP_SYCL_EXTERNAL T __spirv_ocl_native_log2 (T);
5649template <typename T, int N>
5750extern __DPCPP_SYCL_EXTERNAL __ESIMD_raw_vec_t (T, N)
58- __spirv_ocl_native_log2(__ESIMD_raw_vec_t(T, N)) __ESIMD_INTRIN_END ;
51+ __spirv_ocl_native_log2(__ESIMD_raw_vec_t(T, N));
5952
6053template <typename T>
6154extern __DPCPP_SYCL_EXTERNAL T __spirv_ocl_native_rsqrt (T);
6255template <typename T, int N>
6356extern __DPCPP_SYCL_EXTERNAL __ESIMD_raw_vec_t (T, N)
64- __spirv_ocl_native_rsqrt(__ESIMD_raw_vec_t(T, N)) __ESIMD_INTRIN_END ;
57+ __spirv_ocl_native_rsqrt(__ESIMD_raw_vec_t(T, N));
6558
6659template <typename T> extern __DPCPP_SYCL_EXTERNAL T __spirv_ocl_native_sin (T);
6760template <typename T, int N>
6861extern __DPCPP_SYCL_EXTERNAL __ESIMD_raw_vec_t (T, N)
69- __spirv_ocl_native_sin(__ESIMD_raw_vec_t(T, N)) __ESIMD_INTRIN_END ;
62+ __spirv_ocl_native_sin(__ESIMD_raw_vec_t(T, N));
7063
7164template <typename T> extern __DPCPP_SYCL_EXTERNAL T __spirv_ocl_native_sqrt (T);
7265template <typename T, int N>
7366extern __DPCPP_SYCL_EXTERNAL __ESIMD_raw_vec_t (T, N)
74- __spirv_ocl_native_sqrt(__ESIMD_raw_vec_t(T, N)) __ESIMD_INTRIN_END ;
67+ __spirv_ocl_native_sqrt(__ESIMD_raw_vec_t(T, N));
7568
7669template <typename T>
7770extern __DPCPP_SYCL_EXTERNAL T __spirv_ocl_native_powr (T, T);
7871template <typename T, int N>
7972__ESIMD_INTRIN __ESIMD_raw_vec_t (T, N)
80- __spirv_ocl_native_powr(__ESIMD_raw_vec_t(T, N),
81- __ESIMD_raw_vec_t(T, N)) __ESIMD_INTRIN_END;
82-
83- template <typename T> extern __DPCPP_SYCL_EXTERNAL T __spirv_ocl_fabs (T);
84- template <typename T, int N>
85- extern __DPCPP_SYCL_EXTERNAL __ESIMD_raw_vec_t (T, N)
86- __spirv_ocl_fabs(__ESIMD_raw_vec_t(T, N)) __ESIMD_INTRIN_END;
87-
88- template <typename T> extern __DPCPP_SYCL_EXTERNAL T __spirv_ocl_s_abs (T);
89- template <typename T, int N>
90- extern __DPCPP_SYCL_EXTERNAL __ESIMD_raw_vec_t (T, N)
91- __spirv_ocl_s_abs(__ESIMD_raw_vec_t(T, N)) __ESIMD_INTRIN_END;
92-
93- template <typename T> extern __DPCPP_SYCL_EXTERNAL T __spirv_ocl_fmin (T, T);
94- template <typename T, int N>
95- extern __DPCPP_SYCL_EXTERNAL __ESIMD_raw_vec_t (T, N)
96- __spirv_ocl_fmin(__ESIMD_raw_vec_t(T, N),
97- __ESIMD_raw_vec_t(T, N)) __ESIMD_INTRIN_END;
98-
99- template <typename T> extern __DPCPP_SYCL_EXTERNAL T __spirv_ocl_fmax (T, T);
100- template <typename T, int N>
101- extern __DPCPP_SYCL_EXTERNAL __ESIMD_raw_vec_t (T, N)
102- __spirv_ocl_fmax(__ESIMD_raw_vec_t(T, N),
103- __ESIMD_raw_vec_t(T, N)) __ESIMD_INTRIN_END;
104-
105- template <typename T> extern __DPCPP_SYCL_EXTERNAL T __spirv_ocl_rsqrt (T);
106- template <typename T, int N>
107- extern __DPCPP_SYCL_EXTERNAL __ESIMD_raw_vec_t (T, N)
108- __spirv_ocl_rsqrt(__ESIMD_raw_vec_t(T, N)) __ESIMD_INTRIN_END;
73+ __spirv_ocl_native_powr(__ESIMD_raw_vec_t(T, N), __ESIMD_raw_vec_t(T, N));
10974
11075// saturation intrinsics
11176template <typename T0, typename T1, int SZ>
@@ -136,7 +101,15 @@ template <typename T0, typename T1, int SZ>
136101__ESIMD_INTRIN __ESIMD_raw_vec_t (T0, SZ)
137102 __esimd_sstrunc_sat(__ESIMD_raw_vec_t(T1, SZ) src) __ESIMD_INTRIN_END;
138103
139- // / 3 kinds of max, the missing fmax uses spir-v intrinsics above
104+ template <typename T, int SZ>
105+ __ESIMD_INTRIN __ESIMD_raw_vec_t (T, SZ)
106+ __esimd_abs(__ESIMD_raw_vec_t(T, SZ) src0) __ESIMD_INTRIN_END;
107+
108+ // / 3 kinds of max
109+ template <typename T, int SZ>
110+ __ESIMD_INTRIN __ESIMD_raw_vec_t (T, SZ)
111+ __esimd_fmax(__ESIMD_raw_vec_t(T, SZ) src0,
112+ __ESIMD_raw_vec_t(T, SZ) src1) __ESIMD_INTRIN_END;
140113template <typename T, int SZ>
141114__ESIMD_INTRIN __ESIMD_raw_vec_t (T, SZ)
142115 __esimd_umax(__ESIMD_raw_vec_t(T, SZ) src0,
@@ -146,7 +119,12 @@ __ESIMD_INTRIN __ESIMD_raw_vec_t(T, SZ)
146119 __esimd_smax(__ESIMD_raw_vec_t(T, SZ) src0,
147120 __ESIMD_raw_vec_t(T, SZ) src1) __ESIMD_INTRIN_END;
148121
149- // / 3 kinds of min, the missing fmin uses spir-v instrinsics above
122+ // / 3 kinds of min
123+ template <typename T, int SZ>
124+ __ESIMD_INTRIN __ESIMD_raw_vec_t (T, SZ)
125+ __esimd_fmin(__ESIMD_raw_vec_t(T, SZ) src0,
126+ __ESIMD_raw_vec_t(T, SZ) src1) __ESIMD_INTRIN_END;
127+
150128template <typename T, int SZ>
151129__ESIMD_INTRIN __ESIMD_raw_vec_t (T, SZ)
152130 __esimd_umin(__ESIMD_raw_vec_t(T, SZ) src0,
0 commit comments