@@ -60,10 +60,6 @@ namespace __sycl_std = __host_std;
60
60
__SYCL_BUILTIN_DEF (TYPE##3 ) \
61
61
__SYCL_BUILTIN_DEF (TYPE##4 )
62
62
63
- #define __SYCL_DEF_BUILTIN_GEOCROSSVEC (TYPE ) \
64
- __SYCL_BUILTIN_DEF (TYPE##3 ) \
65
- __SYCL_BUILTIN_DEF (TYPE##4 )
66
-
67
63
#define __SYCL_DEF_BUILTIN_MARRAY (TYPE )
68
64
69
65
#define __SYCL_DEF_BUILTIN_CHAR_SCALAR __SYCL_BUILTIN_DEF (char )
@@ -259,8 +255,6 @@ namespace __sycl_std = __host_std;
259
255
#define __SYCL_DEF_BUILTIN_FLOAT_SCALAR __SYCL_BUILTIN_DEF (float )
260
256
#define __SYCL_DEF_BUILTIN_FLOAT_VEC __SYCL_DEF_BUILTIN_VEC (float )
261
257
#define __SYCL_DEF_BUILTIN_FLOAT_GEOVEC __SYCL_DEF_BUILTIN_GEOVEC (float )
262
- #define __SYCL_DEF_BUILTIN_FLOAT_GEOCROSSVEC \
263
- __SYCL_DEF_BUILTIN_GEOCROSSVEC (float )
264
258
#define __SYCL_DEF_BUILTIN_FLOAT_MARRAY __SYCL_DEF_BUILTIN_MARRAY (float )
265
259
#define __SYCL_DEF_BUILTIN_FLOATN \
266
260
__SYCL_DEF_BUILTIN_FLOAT_VEC \
@@ -275,8 +269,6 @@ namespace __sycl_std = __host_std;
275
269
#define __SYCL_DEF_BUILTIN_DOUBLE_SCALAR __SYCL_BUILTIN_DEF (double )
276
270
#define __SYCL_DEF_BUILTIN_DOUBLE_VEC __SYCL_DEF_BUILTIN_VEC (double )
277
271
#define __SYCL_DEF_BUILTIN_DOUBLE_GEOVEC __SYCL_DEF_BUILTIN_GEOVEC (double )
278
- #define __SYCL_DEF_BUILTIN_DOUBLE_GEOCROSSVEC \
279
- __SYCL_DEF_BUILTIN_GEOCROSSVEC (double )
280
272
#define __SYCL_DEF_BUILTIN_DOUBLE_MARRAY __SYCL_DEF_BUILTIN_MARRAY (double )
281
273
#define __SYCL_DEF_BUILTIN_DOUBLEN \
282
274
__SYCL_DEF_BUILTIN_DOUBLE_VEC \
@@ -291,7 +283,6 @@ namespace __sycl_std = __host_std;
291
283
#define __SYCL_DEF_BUILTIN_HALF_SCALAR __SYCL_BUILTIN_DEF (half)
292
284
#define __SYCL_DEF_BUILTIN_HALF_VEC __SYCL_DEF_BUILTIN_VEC (half)
293
285
#define __SYCL_DEF_BUILTIN_HALF_GEOVEC __SYCL_DEF_BUILTIN_GEOVEC (half)
294
- #define __SYCL_DEF_BUILTIN_HALF_GEOCROSSVEC __SYCL_DEF_BUILTIN_GEOCROSSVEC (half)
295
286
#define __SYCL_DEF_BUILTIN_HALF_MARRAY __SYCL_DEF_BUILTIN_MARRAY (half)
296
287
#define __SYCL_DEF_BUILTIN_HALFN \
297
288
__SYCL_DEF_BUILTIN_HALF_VEC \
@@ -323,17 +314,8 @@ namespace __sycl_std = __host_std;
323
314
__SYCL_DEF_BUILTIN_GENGEOFLOATD \
324
315
__SYCL_DEF_BUILTIN_GENGEOFLOATH
325
316
326
- #define __SYCL_DEF_BUILTIN_VGENGEOCROSSFLOAT \
327
- __SYCL_DEF_BUILTIN_FLOAT_GEOCROSSVEC \
328
- __SYCL_DEF_BUILTIN_DOUBLE_GEOCROSSVEC \
329
- __SYCL_DEF_BUILTIN_HALF_GEOCROSSVEC
330
-
331
- #define __SYCL_DEF_BUILTIN_VGENGEOFLOAT \
332
- __SYCL_DEF_BUILTIN_FLOAT_GEOVEC \
333
- __SYCL_DEF_BUILTIN_DOUBLE_GEOVEC \
334
- __SYCL_DEF_BUILTIN_HALF_GEOVEC
335
-
336
317
// TODO: Replace with overloads.
318
+
337
319
#ifdef __FAST_MATH__
338
320
#define __FAST_MATH_GENFLOAT (T ) \
339
321
(detail::is_svgenfloatd<T>::value || detail::is_svgenfloath<T>::value)
@@ -1960,106 +1942,141 @@ __SYCL_MARRAY_INTEGER_FUNCTION_UPSAMPLE_IU_OVERLOAD(upsample, 32bit)
1960
1942
// double4 cross (double4 p0, double4 p1)
1961
1943
// half3 cross (half3 p0, half3 p1)
1962
1944
// half4 cross (half4 p0, half4 p1)
1963
- #define __SYCL_BUILTIN_DEF (TYPE ) \
1964
- inline TYPE cross (TYPE p0, TYPE p1) __NOEXC { \
1965
- return __sycl_std::__invoke_cross<TYPE>(p0, p1); \
1966
- }
1967
- __SYCL_DEF_BUILTIN_VGENGEOCROSSFLOAT
1968
- #undef __SYCL_BUILTIN_DEF
1969
- #undef __SYCL_DEF_BUILTIN_VGENGEOCROSSFLOAT
1970
- #undef __SYCL_DEF_BUILTIN_HALF_GEOCROSSVEC
1971
- #undef __SYCL_DEF_BUILTIN_DOUBLE_GEOCROSSVEC
1972
- #undef __SYCL_DEF_BUILTIN_FLOAT_GEOCROSSVEC
1973
- #undef __SYCL_DEF_BUILTIN_GEOCROSSVEC
1945
+ template <typename T>
1946
+ std::enable_if_t <detail::is_gencross<T>::value, T> cross (T p0, T p1) __NOEXC {
1947
+ return __sycl_std::__invoke_cross<T>(p0, p1);
1948
+ }
1974
1949
1975
1950
// float dot (float p0, float p1)
1976
1951
// double dot (double p0, double p1)
1977
1952
// half dot (half p0, half p1)
1978
- #define __SYCL_BUILTIN_DEF (TYPE ) \
1979
- inline TYPE dot (TYPE p0, TYPE p1) __NOEXC { return p0 * p1; }
1980
- __SYCL_DEF_BUILTIN_SGENFLOAT
1981
- #undef __SYCL_BUILTIN_DEF
1953
+ template <typename T>
1954
+ std::enable_if_t <detail::is_sgenfloat<T>::value, T> dot (T p0, T p1) __NOEXC {
1955
+ return p0 * p1;
1956
+ }
1957
+
1982
1958
// float dot (vgengeofloat p0, vgengeofloat p1)
1959
+ template <typename T>
1960
+ std::enable_if_t <detail::is_vgengeofloat<T>::value, float > dot (T p0,
1961
+ T p1) __NOEXC {
1962
+ return __sycl_std::__invoke_Dot<float >(p0, p1);
1963
+ }
1964
+
1983
1965
// double dot (vgengeodouble p0, vgengeodouble p1)
1966
+ template <typename T>
1967
+ std::enable_if_t <detail::is_vgengeodouble<T>::value, double > dot (T p0,
1968
+ T p1) __NOEXC {
1969
+ return __sycl_std::__invoke_Dot<double >(p0, p1);
1970
+ }
1971
+
1984
1972
// half dot (vgengeohalf p0, vgengeohalf p1)
1985
- #define __SYCL_BUILTIN_DEF (TYPE ) \
1986
- inline TYPE::element_type dot (TYPE p0, TYPE p1) __NOEXC { \
1987
- return __sycl_std::__invoke_Dot<TYPE::element_type>(p0, p1); \
1988
- }
1989
- __SYCL_DEF_BUILTIN_VGENGEOFLOAT
1990
- #undef __SYCL_BUILTIN_DEF
1991
-
1992
- // float distance (float p0, float p1)
1993
- // double distance (double p0, double p1)
1994
- // half distance (half p0, half p1)
1995
- #define __SYCL_BUILTIN_DEF (TYPE ) \
1996
- inline TYPE distance (TYPE p0, TYPE p1) __NOEXC { \
1997
- return __sycl_std::__invoke_distance<TYPE>(p0, p1); \
1998
- }
1999
- __SYCL_DEF_BUILTIN_SGENFLOAT
2000
- #undef __SYCL_BUILTIN_DEF
2001
- // float distance (vgengeofloat p0, vgengeofloat p1)
2002
- // double distance (vgengeodouble p0, vgengeodouble p1)
2003
- // half distance (vgengeohalf p0, vgengeohalf p1)
2004
- #define __SYCL_BUILTIN_DEF (TYPE ) \
2005
- inline TYPE::element_type distance (TYPE p0, TYPE p1) __NOEXC { \
2006
- return __sycl_std::__invoke_distance<TYPE::element_type>(p0, p1); \
2007
- }
2008
- __SYCL_DEF_BUILTIN_VGENGEOFLOAT
2009
- #undef __SYCL_BUILTIN_DEF
2010
-
2011
- // float length (float p0, float p1)
2012
- // double length (double p0, double p1)
2013
- // half length (half p0, half p1)
2014
- #define __SYCL_BUILTIN_DEF (TYPE ) \
2015
- inline TYPE length (TYPE p) __NOEXC { \
2016
- return __sycl_std::__invoke_length<TYPE>(p); \
2017
- }
2018
- __SYCL_DEF_BUILTIN_SGENFLOAT
2019
- #undef __SYCL_BUILTIN_DEF
2020
- // float length (vgengeofloat p0, vgengeofloat p1)
2021
- // double length (vgengeodouble p0, vgengeodouble p1)
2022
- // half length (vgengeohalf p0, vgengeohalf p1)
2023
- #define __SYCL_BUILTIN_DEF (TYPE ) \
2024
- inline TYPE::element_type length (TYPE p) __NOEXC { \
2025
- return __sycl_std::__invoke_length<TYPE::element_type>(p); \
2026
- }
2027
- __SYCL_DEF_BUILTIN_VGENGEOFLOAT
2028
- #undef __SYCL_BUILTIN_DEF
1973
+ template <typename T>
1974
+ std::enable_if_t <detail::is_vgengeohalf<T>::value, half> dot (T p0,
1975
+ T p1) __NOEXC {
1976
+ return __sycl_std::__invoke_Dot<half>(p0, p1);
1977
+ }
1978
+
1979
+ // float distance (gengeofloat p0, gengeofloat p1)
1980
+ template <typename T,
1981
+ typename = std::enable_if_t <detail::is_gengeofloat<T>::value, T>>
1982
+ float distance (T p0, T p1) __NOEXC {
1983
+ return __sycl_std::__invoke_distance<float >(p0, p1);
1984
+ }
1985
+
1986
+ // double distance (gengeodouble p0, gengeodouble p1)
1987
+ template <typename T,
1988
+ typename = std::enable_if_t <detail::is_gengeodouble<T>::value, T>>
1989
+ double distance (T p0, T p1) __NOEXC {
1990
+ return __sycl_std::__invoke_distance<double >(p0, p1);
1991
+ }
1992
+
1993
+ // half distance (gengeohalf p0, gengeohalf p1)
1994
+ template <typename T,
1995
+ typename = std::enable_if_t <detail::is_gengeohalf<T>::value, T>>
1996
+ half distance (T p0, T p1) __NOEXC {
1997
+ return __sycl_std::__invoke_distance<half>(p0, p1);
1998
+ }
1999
+
2000
+ // float length (gengeofloat p)
2001
+ template <typename T,
2002
+ typename = std::enable_if_t <detail::is_gengeofloat<T>::value, T>>
2003
+ float length (T p) __NOEXC {
2004
+ return __sycl_std::__invoke_length<float >(p);
2005
+ }
2006
+
2007
+ // double length (gengeodouble p)
2008
+ template <typename T,
2009
+ typename = std::enable_if_t <detail::is_gengeodouble<T>::value, T>>
2010
+ double length (T p) __NOEXC {
2011
+ return __sycl_std::__invoke_length<double >(p);
2012
+ }
2013
+
2014
+ // half length (gengeohalf p)
2015
+ template <typename T,
2016
+ typename = std::enable_if_t <detail::is_gengeohalf<T>::value, T>>
2017
+ half length (T p) __NOEXC {
2018
+ return __sycl_std::__invoke_length<half>(p);
2019
+ }
2029
2020
2030
2021
// gengeofloat normalize (gengeofloat p)
2022
+ template <typename T>
2023
+ std::enable_if_t <detail::is_gengeofloat<T>::value, T> normalize (T p) __NOEXC {
2024
+ return __sycl_std::__invoke_normalize<T>(p);
2025
+ }
2026
+
2031
2027
// gengeodouble normalize (gengeodouble p)
2028
+ template <typename T>
2029
+ std::enable_if_t <detail::is_gengeodouble<T>::value, T> normalize (T p) __NOEXC {
2030
+ return __sycl_std::__invoke_normalize<T>(p);
2031
+ }
2032
+
2032
2033
// gengeohalf normalize (gengeohalf p)
2033
- #define __SYCL_BUILTIN_DEF (TYPE ) \
2034
- inline TYPE normalize (TYPE p) __NOEXC { \
2035
- return __sycl_std::__invoke_normalize<TYPE>(p); \
2036
- }
2037
- __SYCL_DEF_BUILTIN_GENGEOFLOAT
2038
- #undef __SYCL_BUILTIN_DEF
2034
+ template <typename T>
2035
+ std::enable_if_t <detail::is_gengeohalf<T>::value, T> normalize (T p) __NOEXC {
2036
+ return __sycl_std::__invoke_normalize<T>(p);
2037
+ }
2039
2038
2040
2039
// float fast_distance (gengeofloat p0, gengeofloat p1)
2041
- #define __SYCL_BUILTIN_DEF (TYPE ) \
2042
- inline float fast_distance (TYPE p0, TYPE p1) __NOEXC { \
2043
- return __sycl_std::__invoke_fast_distance<float >(p0, p1); \
2044
- }
2045
- __SYCL_DEF_BUILTIN_GENGEOFLOATF
2046
- #undef __SYCL_BUILTIN_DEF
2040
+ template <typename T,
2041
+ typename = std::enable_if_t <detail::is_gengeofloat<T>::value, T>>
2042
+ float fast_distance (T p0, T p1) __NOEXC {
2043
+ return __sycl_std::__invoke_fast_distance<float >(p0, p1);
2044
+ }
2045
+
2046
+ // double fast_distance (gengeodouble p0, gengeodouble p1)
2047
+ template <typename T,
2048
+ typename = std::enable_if_t <detail::is_gengeodouble<T>::value, T>>
2049
+ double fast_distance (T p0, T p1) __NOEXC {
2050
+ return __sycl_std::__invoke_fast_distance<double >(p0, p1);
2051
+ }
2047
2052
2048
2053
// float fast_length (gengeofloat p)
2049
- #define __SYCL_BUILTIN_DEF (TYPE ) \
2050
- inline float fast_length (TYPE p) __NOEXC { \
2051
- return __sycl_std::__invoke_fast_length<float >(p); \
2052
- }
2053
- __SYCL_DEF_BUILTIN_GENGEOFLOATF
2054
- #undef __SYCL_BUILTIN_DEF
2054
+ template <typename T,
2055
+ typename = std::enable_if_t <detail::is_gengeofloat<T>::value, T>>
2056
+ float fast_length (T p) __NOEXC {
2057
+ return __sycl_std::__invoke_fast_length<float >(p);
2058
+ }
2059
+
2060
+ // double fast_length (gengeodouble p)
2061
+ template <typename T,
2062
+ typename = std::enable_if_t <detail::is_gengeodouble<T>::value, T>>
2063
+ double fast_length (T p) __NOEXC {
2064
+ return __sycl_std::__invoke_fast_length<double >(p);
2065
+ }
2055
2066
2056
2067
// gengeofloat fast_normalize (gengeofloat p)
2057
- #define __SYCL_BUILTIN_DEF (TYPE ) \
2058
- inline TYPE fast_normalize (TYPE p) __NOEXC { \
2059
- return __sycl_std::__invoke_fast_normalize<TYPE>(p); \
2060
- }
2061
- __SYCL_DEF_BUILTIN_GENGEOFLOATF
2062
- #undef __SYCL_BUILTIN_DEF
2068
+ template <typename T>
2069
+ std::enable_if_t <detail::is_gengeofloat<T>::value, T>
2070
+ fast_normalize (T p) __NOEXC {
2071
+ return __sycl_std::__invoke_fast_normalize<T>(p);
2072
+ }
2073
+
2074
+ // gengeodouble fast_normalize (gengeodouble p)
2075
+ template <typename T>
2076
+ std::enable_if_t <detail::is_gengeodouble<T>::value, T>
2077
+ fast_normalize (T p) __NOEXC {
2078
+ return __sycl_std::__invoke_fast_normalize<T>(p);
2079
+ }
2063
2080
2064
2081
// marray geometric functions
2065
2082
0 commit comments