@@ -60,6 +60,10 @@ 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
+
63
67
#define __SYCL_DEF_BUILTIN_MARRAY (TYPE )
64
68
65
69
#define __SYCL_DEF_BUILTIN_CHAR_SCALAR __SYCL_BUILTIN_DEF (char )
@@ -255,6 +259,8 @@ namespace __sycl_std = __host_std;
255
259
#define __SYCL_DEF_BUILTIN_FLOAT_SCALAR __SYCL_BUILTIN_DEF (float )
256
260
#define __SYCL_DEF_BUILTIN_FLOAT_VEC __SYCL_DEF_BUILTIN_VEC (float )
257
261
#define __SYCL_DEF_BUILTIN_FLOAT_GEOVEC __SYCL_DEF_BUILTIN_GEOVEC (float )
262
+ #define __SYCL_DEF_BUILTIN_FLOAT_GEOCROSSVEC \
263
+ __SYCL_DEF_BUILTIN_GEOCROSSVEC (float )
258
264
#define __SYCL_DEF_BUILTIN_FLOAT_MARRAY __SYCL_DEF_BUILTIN_MARRAY (float )
259
265
#define __SYCL_DEF_BUILTIN_FLOATN \
260
266
__SYCL_DEF_BUILTIN_FLOAT_VEC \
@@ -269,6 +275,8 @@ namespace __sycl_std = __host_std;
269
275
#define __SYCL_DEF_BUILTIN_DOUBLE_SCALAR __SYCL_BUILTIN_DEF (double )
270
276
#define __SYCL_DEF_BUILTIN_DOUBLE_VEC __SYCL_DEF_BUILTIN_VEC (double )
271
277
#define __SYCL_DEF_BUILTIN_DOUBLE_GEOVEC __SYCL_DEF_BUILTIN_GEOVEC (double )
278
+ #define __SYCL_DEF_BUILTIN_DOUBLE_GEOCROSSVEC \
279
+ __SYCL_DEF_BUILTIN_GEOCROSSVEC (double )
272
280
#define __SYCL_DEF_BUILTIN_DOUBLE_MARRAY __SYCL_DEF_BUILTIN_MARRAY (double )
273
281
#define __SYCL_DEF_BUILTIN_DOUBLEN \
274
282
__SYCL_DEF_BUILTIN_DOUBLE_VEC \
@@ -283,6 +291,7 @@ namespace __sycl_std = __host_std;
283
291
#define __SYCL_DEF_BUILTIN_HALF_SCALAR __SYCL_BUILTIN_DEF (half)
284
292
#define __SYCL_DEF_BUILTIN_HALF_VEC __SYCL_DEF_BUILTIN_VEC (half)
285
293
#define __SYCL_DEF_BUILTIN_HALF_GEOVEC __SYCL_DEF_BUILTIN_GEOVEC (half)
294
+ #define __SYCL_DEF_BUILTIN_HALF_GEOCROSSVEC __SYCL_DEF_BUILTIN_GEOCROSSVEC (half)
286
295
#define __SYCL_DEF_BUILTIN_HALF_MARRAY __SYCL_DEF_BUILTIN_MARRAY (half)
287
296
#define __SYCL_DEF_BUILTIN_HALFN \
288
297
__SYCL_DEF_BUILTIN_HALF_VEC \
@@ -314,8 +323,17 @@ namespace __sycl_std = __host_std;
314
323
__SYCL_DEF_BUILTIN_GENGEOFLOATD \
315
324
__SYCL_DEF_BUILTIN_GENGEOFLOATH
316
325
317
- // TODO: Replace with overloads.
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
318
335
336
+ // TODO: Replace with overloads.
319
337
#ifdef __FAST_MATH__
320
338
#define __FAST_MATH_GENFLOAT (T ) \
321
339
(detail::is_svgenfloatd<T>::value || detail::is_svgenfloath<T>::value)
@@ -1942,141 +1960,106 @@ __SYCL_MARRAY_INTEGER_FUNCTION_UPSAMPLE_IU_OVERLOAD(upsample, 32bit)
1942
1960
// double4 cross (double4 p0, double4 p1)
1943
1961
// half3 cross (half3 p0, half3 p1)
1944
1962
// half4 cross (half4 p0, half4 p1)
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
- }
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
1949
1974
1950
1975
// float dot (float p0, float p1)
1951
1976
// double dot (double p0, double p1)
1952
1977
// half dot (half p0, half p1)
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
-
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
1958
1982
// 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
-
1965
1983
// 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
-
1972
1984
// half dot (vgengeohalf p0, vgengeohalf p1)
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
- }
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
2020
2029
2021
2030
// 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
-
2027
2031
// 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
-
2033
2032
// gengeohalf normalize (gengeohalf p)
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
- }
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
2038
2039
2039
2040
// float fast_distance (gengeofloat p0, gengeofloat p1)
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
- }
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
2052
2047
2053
2048
// float fast_length (gengeofloat p)
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
- }
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
2066
2055
2067
2056
// gengeofloat fast_normalize (gengeofloat p)
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
- }
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
2080
2063
2081
2064
// marray geometric functions
2082
2065
0 commit comments