Skip to content

Commit 799b71a

Browse files
committed
Revert "[SYCL] Make SYCL geometrical functions overloads instead of templates (intel#10014)"
This reverts commit 49bbcbf.
1 parent 7246ee0 commit 799b71a

File tree

1 file changed

+119
-102
lines changed

1 file changed

+119
-102
lines changed

sycl/include/sycl/builtins.hpp

Lines changed: 119 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,6 @@ namespace __sycl_std = __host_std;
6060
__SYCL_BUILTIN_DEF(TYPE##3) \
6161
__SYCL_BUILTIN_DEF(TYPE##4)
6262

63-
#define __SYCL_DEF_BUILTIN_GEOCROSSVEC(TYPE) \
64-
__SYCL_BUILTIN_DEF(TYPE##3) \
65-
__SYCL_BUILTIN_DEF(TYPE##4)
66-
6763
#define __SYCL_DEF_BUILTIN_MARRAY(TYPE)
6864

6965
#define __SYCL_DEF_BUILTIN_CHAR_SCALAR __SYCL_BUILTIN_DEF(char)
@@ -259,8 +255,6 @@ namespace __sycl_std = __host_std;
259255
#define __SYCL_DEF_BUILTIN_FLOAT_SCALAR __SYCL_BUILTIN_DEF(float)
260256
#define __SYCL_DEF_BUILTIN_FLOAT_VEC __SYCL_DEF_BUILTIN_VEC(float)
261257
#define __SYCL_DEF_BUILTIN_FLOAT_GEOVEC __SYCL_DEF_BUILTIN_GEOVEC(float)
262-
#define __SYCL_DEF_BUILTIN_FLOAT_GEOCROSSVEC \
263-
__SYCL_DEF_BUILTIN_GEOCROSSVEC(float)
264258
#define __SYCL_DEF_BUILTIN_FLOAT_MARRAY __SYCL_DEF_BUILTIN_MARRAY(float)
265259
#define __SYCL_DEF_BUILTIN_FLOATN \
266260
__SYCL_DEF_BUILTIN_FLOAT_VEC \
@@ -275,8 +269,6 @@ namespace __sycl_std = __host_std;
275269
#define __SYCL_DEF_BUILTIN_DOUBLE_SCALAR __SYCL_BUILTIN_DEF(double)
276270
#define __SYCL_DEF_BUILTIN_DOUBLE_VEC __SYCL_DEF_BUILTIN_VEC(double)
277271
#define __SYCL_DEF_BUILTIN_DOUBLE_GEOVEC __SYCL_DEF_BUILTIN_GEOVEC(double)
278-
#define __SYCL_DEF_BUILTIN_DOUBLE_GEOCROSSVEC \
279-
__SYCL_DEF_BUILTIN_GEOCROSSVEC(double)
280272
#define __SYCL_DEF_BUILTIN_DOUBLE_MARRAY __SYCL_DEF_BUILTIN_MARRAY(double)
281273
#define __SYCL_DEF_BUILTIN_DOUBLEN \
282274
__SYCL_DEF_BUILTIN_DOUBLE_VEC \
@@ -291,7 +283,6 @@ namespace __sycl_std = __host_std;
291283
#define __SYCL_DEF_BUILTIN_HALF_SCALAR __SYCL_BUILTIN_DEF(half)
292284
#define __SYCL_DEF_BUILTIN_HALF_VEC __SYCL_DEF_BUILTIN_VEC(half)
293285
#define __SYCL_DEF_BUILTIN_HALF_GEOVEC __SYCL_DEF_BUILTIN_GEOVEC(half)
294-
#define __SYCL_DEF_BUILTIN_HALF_GEOCROSSVEC __SYCL_DEF_BUILTIN_GEOCROSSVEC(half)
295286
#define __SYCL_DEF_BUILTIN_HALF_MARRAY __SYCL_DEF_BUILTIN_MARRAY(half)
296287
#define __SYCL_DEF_BUILTIN_HALFN \
297288
__SYCL_DEF_BUILTIN_HALF_VEC \
@@ -323,17 +314,8 @@ namespace __sycl_std = __host_std;
323314
__SYCL_DEF_BUILTIN_GENGEOFLOATD \
324315
__SYCL_DEF_BUILTIN_GENGEOFLOATH
325316

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-
336317
// TODO: Replace with overloads.
318+
337319
#ifdef __FAST_MATH__
338320
#define __FAST_MATH_GENFLOAT(T) \
339321
(detail::is_svgenfloatd<T>::value || detail::is_svgenfloath<T>::value)
@@ -1960,106 +1942,141 @@ __SYCL_MARRAY_INTEGER_FUNCTION_UPSAMPLE_IU_OVERLOAD(upsample, 32bit)
19601942
// double4 cross (double4 p0, double4 p1)
19611943
// half3 cross (half3 p0, half3 p1)
19621944
// 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+
}
19741949

19751950
// float dot (float p0, float p1)
19761951
// double dot (double p0, double p1)
19771952
// 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+
19821958
// 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+
19831965
// 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+
19841972
// 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+
}
20292020

20302021
// 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+
20312027
// 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+
20322033
// 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+
}
20392038

20402039
// 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+
}
20472052

20482053
// 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+
}
20552066

20562067
// 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+
}
20632080

20642081
// marray geometric functions
20652082

0 commit comments

Comments
 (0)