@@ -48,6 +48,8 @@ template <class T, int N> marray<T, N> to_marray(vec<T, N> x) {
48
48
namespace __sycl_std = __host_std;
49
49
#endif
50
50
51
+ #define __SYCL_COMMA ,
52
+
51
53
#define __SYCL_DEF_BUILTIN_VEC (TYPE ) \
52
54
__SYCL_BUILTIN_DEF (TYPE##2 ) \
53
55
__SYCL_BUILTIN_DEF (TYPE##3 ) \
@@ -64,6 +66,15 @@ namespace __sycl_std = __host_std;
64
66
__SYCL_BUILTIN_DEF (TYPE##3 ) \
65
67
__SYCL_BUILTIN_DEF (TYPE##4 )
66
68
69
+ #define __SYCL_DEF_BUILTIN_GEOMARRAY (TYPE ) \
70
+ __SYCL_BUILTIN_DEF (marray<TYPE __SYCL_COMMA 2 >) \
71
+ __SYCL_BUILTIN_DEF (marray<TYPE __SYCL_COMMA 3 >) \
72
+ __SYCL_BUILTIN_DEF (marray<TYPE __SYCL_COMMA 4 >)
73
+
74
+ #define __SYCL_DEF_BUILTIN_GEOCROSSMARRAY (TYPE ) \
75
+ __SYCL_BUILTIN_DEF (marray<TYPE __SYCL_COMMA 3 >) \
76
+ __SYCL_BUILTIN_DEF (marray<TYPE __SYCL_COMMA 4 >)
77
+
67
78
#define __SYCL_DEF_BUILTIN_MARRAY (TYPE )
68
79
69
80
#define __SYCL_DEF_BUILTIN_CHAR_SCALAR __SYCL_BUILTIN_DEF (char )
@@ -259,6 +270,9 @@ namespace __sycl_std = __host_std;
259
270
#define __SYCL_DEF_BUILTIN_FLOAT_SCALAR __SYCL_BUILTIN_DEF (float )
260
271
#define __SYCL_DEF_BUILTIN_FLOAT_VEC __SYCL_DEF_BUILTIN_VEC (float )
261
272
#define __SYCL_DEF_BUILTIN_FLOAT_GEOVEC __SYCL_DEF_BUILTIN_GEOVEC (float )
273
+ #define __SYCL_DEF_BUILTIN_FLOAT_GEOCROSSMARRAY \
274
+ __SYCL_DEF_BUILTIN_GEOCROSSMARRAY (float )
275
+ #define __SYCL_DEF_BUILTIN_FLOAT_GEOMARRAY __SYCL_DEF_BUILTIN_GEOMARRAY (float )
262
276
#define __SYCL_DEF_BUILTIN_FLOAT_GEOCROSSVEC \
263
277
__SYCL_DEF_BUILTIN_GEOCROSSVEC (float )
264
278
#define __SYCL_DEF_BUILTIN_FLOAT_MARRAY __SYCL_DEF_BUILTIN_MARRAY (float )
@@ -275,6 +289,9 @@ namespace __sycl_std = __host_std;
275
289
#define __SYCL_DEF_BUILTIN_DOUBLE_SCALAR __SYCL_BUILTIN_DEF (double )
276
290
#define __SYCL_DEF_BUILTIN_DOUBLE_VEC __SYCL_DEF_BUILTIN_VEC (double )
277
291
#define __SYCL_DEF_BUILTIN_DOUBLE_GEOVEC __SYCL_DEF_BUILTIN_GEOVEC (double )
292
+ #define __SYCL_DEF_BUILTIN_DOUBLE_GEOCROSSMARRAY \
293
+ __SYCL_DEF_BUILTIN_GEOCROSSMARRAY (double )
294
+ #define __SYCL_DEF_BUILTIN_DOUBLE_GEOMARRAY __SYCL_DEF_BUILTIN_GEOMARRAY (double )
278
295
#define __SYCL_DEF_BUILTIN_DOUBLE_GEOCROSSVEC \
279
296
__SYCL_DEF_BUILTIN_GEOCROSSVEC (double )
280
297
#define __SYCL_DEF_BUILTIN_DOUBLE_MARRAY __SYCL_DEF_BUILTIN_MARRAY (double )
@@ -291,6 +308,9 @@ namespace __sycl_std = __host_std;
291
308
#define __SYCL_DEF_BUILTIN_HALF_SCALAR __SYCL_BUILTIN_DEF (half)
292
309
#define __SYCL_DEF_BUILTIN_HALF_VEC __SYCL_DEF_BUILTIN_VEC (half)
293
310
#define __SYCL_DEF_BUILTIN_HALF_GEOVEC __SYCL_DEF_BUILTIN_GEOVEC (half)
311
+ #define __SYCL_DEF_BUILTIN_HALF_GEOCROSSMARRAY \
312
+ __SYCL_DEF_BUILTIN_GEOCROSSMARRAY (half)
313
+ #define __SYCL_DEF_BUILTIN_HALF_GEOMARRAY __SYCL_DEF_BUILTIN_GEOMARRAY (half)
294
314
#define __SYCL_DEF_BUILTIN_HALF_GEOCROSSVEC __SYCL_DEF_BUILTIN_GEOCROSSVEC (half)
295
315
#define __SYCL_DEF_BUILTIN_HALF_MARRAY __SYCL_DEF_BUILTIN_MARRAY (half)
296
316
#define __SYCL_DEF_BUILTIN_HALFN \
@@ -323,6 +343,17 @@ namespace __sycl_std = __host_std;
323
343
__SYCL_DEF_BUILTIN_GENGEOFLOATD \
324
344
__SYCL_DEF_BUILTIN_GENGEOFLOATH
325
345
346
+ #define __SYCL_DEF_BUILTIN_GENGEOCROSSMARRAY \
347
+ __SYCL_DEF_BUILTIN_FLOAT_GEOCROSSMARRAY \
348
+ __SYCL_DEF_BUILTIN_DOUBLE_GEOCROSSMARRAY \
349
+ __SYCL_DEF_BUILTIN_HALF_GEOCROSSMARRAY
350
+
351
+ #define __SYCL_DEF_BUILTIN_GENGEOMARRAY \
352
+ __SYCL_DEF_BUILTIN_FLOAT_GEOMARRAY \
353
+ __SYCL_DEF_BUILTIN_DOUBLE_GEOMARRAY \
354
+ __SYCL_DEF_BUILTIN_HALF_GEOMARRAY
355
+
356
+ // TODO: Replace with overloads.
326
357
#define __SYCL_DEF_BUILTIN_VGENGEOCROSSFLOAT \
327
358
__SYCL_DEF_BUILTIN_FLOAT_GEOCROSSVEC \
328
359
__SYCL_DEF_BUILTIN_DOUBLE_GEOCROSSVEC \
@@ -2063,67 +2094,81 @@ __SYCL_DEF_BUILTIN_GENGEOFLOATF
2063
2094
2064
2095
// marray geometric functions
2065
2096
2066
- #define __SYCL_MARRAY_GEOMETRIC_FUNCTION_OVERLOAD_IMPL (NAME, ...) \
2067
- vec<detail::marray_element_t <T>, T::size ()> result_v; \
2068
- result_v = NAME (__VA_ARGS__); \
2069
- return detail::to_marray (result_v);
2070
-
2071
- template <typename T>
2072
- std::enable_if_t <detail::is_gencrossmarray<T>::value, T> cross (T p0,
2073
- T p1) __NOEXC {
2074
- __SYCL_MARRAY_GEOMETRIC_FUNCTION_OVERLOAD_IMPL (cross, detail::to_vec (p0),
2075
- detail::to_vec (p1))
2076
- }
2097
+ // cross
2098
+ #define __SYCL_BUILTIN_DEF (TYPE ) \
2099
+ inline TYPE cross (TYPE p0, TYPE p1) __NOEXC { \
2100
+ return detail::to_marray (cross (detail::to_vec (p0), detail::to_vec (p1))); \
2101
+ }
2102
+ __SYCL_DEF_BUILTIN_GENGEOCROSSMARRAY
2103
+ #undef __SYCL_BUILTIN_DEF
2077
2104
2078
- template <typename T>
2079
- std::enable_if_t <detail::is_gengeomarray<T>::value, T> normalize (T p) __NOEXC {
2080
- __SYCL_MARRAY_GEOMETRIC_FUNCTION_OVERLOAD_IMPL (normalize, detail::to_vec (p))
2081
- }
2105
+ #undef __SYCL_DEF_BUILTIN_GENGEOCROSSMARRAY
2106
+ #undef __SYCL_DEF_BUILTIN_HALF_GEOCROSSMARRAY
2107
+ #undef __SYCL_DEF_BUILTIN_DOUBLE_GEOCROSSMARRAY
2108
+ #undef __SYCL_DEF_BUILTIN_FLOAT_GEOCROSSMARRAY
2109
+ #undef __SYCL_DEF_BUILTIN_GEOCROSSMARRAY
2082
2110
2083
- template <typename T>
2084
- std::enable_if_t <detail::is_gengeomarrayfloat<T>::value, T>
2085
- fast_normalize (T p) __NOEXC {
2086
- __SYCL_MARRAY_GEOMETRIC_FUNCTION_OVERLOAD_IMPL (fast_normalize,
2087
- detail::to_vec (p))
2088
- }
2111
+ // dot
2112
+ #define __SYCL_BUILTIN_DEF (TYPE ) \
2113
+ inline TYPE::value_type dot (TYPE p0, TYPE p1) __NOEXC { \
2114
+ return dot (detail::to_vec (p0), detail::to_vec (p1)); \
2115
+ }
2116
+ __SYCL_DEF_BUILTIN_GENGEOMARRAY
2117
+ #undef __SYCL_BUILTIN_DEF
2089
2118
2090
- #undef __SYCL_MARRAY_GEOMETRIC_FUNCTION_OVERLOAD_IMPL
2119
+ // distance
2120
+ #define __SYCL_BUILTIN_DEF (TYPE ) \
2121
+ inline TYPE::value_type distance (TYPE p0, TYPE p1) __NOEXC { \
2122
+ return distance (detail::to_vec (p0), detail::to_vec (p1)); \
2123
+ }
2124
+ __SYCL_DEF_BUILTIN_GENGEOMARRAY
2125
+ #undef __SYCL_BUILTIN_DEF
2091
2126
2092
- #define __SYCL_MARRAY_GEOMETRIC_FUNCTION_IS_GENGEOMARRAY_BINOP_OVERLOAD (NAME ) \
2093
- template <typename T> \
2094
- std::enable_if_t <detail::is_gengeomarray<T>::value, \
2095
- detail::marray_element_t <T>> \
2096
- NAME (T p0, T p1) __NOEXC { \
2097
- return NAME (detail::to_vec (p0), detail::to_vec (p1)); \
2127
+ // length
2128
+ #define __SYCL_BUILTIN_DEF (TYPE ) \
2129
+ inline TYPE::value_type length (TYPE p) __NOEXC { \
2130
+ return length (detail::to_vec (p)); \
2098
2131
}
2132
+ __SYCL_DEF_BUILTIN_GENGEOMARRAY
2133
+ #undef __SYCL_BUILTIN_DEF
2099
2134
2100
- // clang-format off
2101
- __SYCL_MARRAY_GEOMETRIC_FUNCTION_IS_GENGEOMARRAY_BINOP_OVERLOAD (dot)
2102
- __SYCL_MARRAY_GEOMETRIC_FUNCTION_IS_GENGEOMARRAY_BINOP_OVERLOAD (distance)
2103
- // clang-format on
2135
+ // normalize
2136
+ #define __SYCL_BUILTIN_DEF (TYPE ) \
2137
+ inline TYPE normalize (TYPE p) __NOEXC { \
2138
+ return detail::to_marray (normalize (detail::to_vec (p))); \
2139
+ }
2140
+ __SYCL_DEF_BUILTIN_GENGEOMARRAY
2141
+ #undef __SYCL_BUILTIN_DEF
2104
2142
2105
- #undef __SYCL_MARRAY_GEOMETRIC_FUNCTION_IS_GENGEOMARRAY_BINOP_OVERLOAD
2143
+ // fast_distance
2144
+ #define __SYCL_BUILTIN_DEF (TYPE ) \
2145
+ inline float fast_distance (TYPE p0, TYPE p1) __NOEXC { \
2146
+ return fast_distance (detail::to_vec (p0), detail::to_vec (p1)); \
2147
+ }
2148
+ __SYCL_DEF_BUILTIN_FLOAT_GEOMARRAY
2149
+ #undef __SYCL_BUILTIN_DEF
2106
2150
2107
- template <typename T>
2108
- std::enable_if_t <detail::is_gengeomarray<T>::value, detail::marray_element_t <T>>
2109
- length (T p) __NOEXC {
2110
- return __sycl_std::__invoke_length<detail::marray_element_t <T>>(
2111
- detail::to_vec (p));
2112
- }
2151
+ // fast_normalize
2152
+ #define __SYCL_BUILTIN_DEF (TYPE ) \
2153
+ inline TYPE fast_normalize (TYPE p) __NOEXC { \
2154
+ return detail::to_marray (fast_normalize (detail::to_vec (p))); \
2155
+ }
2156
+ __SYCL_DEF_BUILTIN_FLOAT_GEOMARRAY
2157
+ #undef __SYCL_BUILTIN_DEF
2113
2158
2114
- template <typename T>
2115
- std::enable_if_t <detail::is_gengeomarrayfloat<T>::value,
2116
- detail::marray_element_t <T>>
2117
- fast_distance (T p0, T p1) __NOEXC {
2118
- return fast_distance (detail::to_vec (p0), detail::to_vec (p1));
2119
- }
2159
+ // fast_length
2160
+ #define __SYCL_BUILTIN_DEF (TYPE ) \
2161
+ inline float fast_length (TYPE p) __NOEXC { \
2162
+ return fast_length (detail::to_vec (p)); \
2163
+ }
2164
+ __SYCL_DEF_BUILTIN_FLOAT_GEOMARRAY
2165
+ #undef __SYCL_BUILTIN_DEF
2120
2166
2121
- template <typename T>
2122
- std::enable_if_t <detail::is_gengeomarrayfloat<T>::value,
2123
- detail::marray_element_t <T>>
2124
- fast_length (T p) __NOEXC {
2125
- return fast_length (detail::to_vec (p));
2126
- }
2167
+ #undef __SYCL_DEF_BUILTIN_GENGEOMARRAY
2168
+ #undef __SYCL_DEF_BUILTIN_HALF_GEOMARRAY
2169
+ #undef __SYCL_DEF_BUILTIN_DOUBLE_GEOMARRAY
2170
+ #undef __SYCL_DEF_BUILTIN_FLOAT_GEOMARRAY
2171
+ #undef __SYCL_DEF_BUILTIN_GEOMARRAY
2127
2172
2128
2173
/* SYCL 1.2.1 ---- 4.13.7 Relational functions. -----------------------------*/
2129
2174
/* SYCL 2020 ---- 4.17.9 Relational functions. -----------------------------*/
@@ -2924,6 +2969,7 @@ std::enable_if_t<detail::is_svgenfloatf<T>::value, T> tan(T x) __NOEXC {
2924
2969
#undef __SYCL_DEF_BUILTIN_FAST_MATH_GENFLOAT
2925
2970
#undef __SYCL_DEF_BUILTIN_SGENTYPE
2926
2971
#undef __SYCL_DEF_BUILTIN_GENTYPE
2972
+ #undef __SYCL_COMMA
2927
2973
} // __SYCL_INLINE_VER_NAMESPACE(_V1)
2928
2974
} // namespace sycl
2929
2975
0 commit comments