@@ -95,6 +95,8 @@ enum class MathOp {
95
95
inv,
96
96
log,
97
97
rsqrt,
98
+ floor,
99
+ ceil,
98
100
trunc,
99
101
exp2,
100
102
log2,
@@ -130,6 +132,8 @@ DEFINE_HOST_OP(inv, 1.0f / X);
130
132
DEFINE_HOST_OP (sqrt, std::sqrt(X));
131
133
DEFINE_HOST_OP (sqrt_ieee, std::sqrt(X));
132
134
DEFINE_HOST_OP (rsqrt, 1 .0f / std::sqrt(X));
135
+ DEFINE_HOST_OP (floor, std::floor(X));
136
+ DEFINE_HOST_OP (ceil, std::ceil(X));
133
137
DEFINE_HOST_OP (trunc, std::trunc(X));
134
138
DEFINE_HOST_OP (exp2, std::exp2(X));
135
139
DEFINE_HOST_OP (log2, std::log2(X));
@@ -146,7 +150,7 @@ DEFINE_HOST_BIN_OP(pow, std::pow(X, Y));
146
150
147
151
#define DEFINE_ESIMD_DEVICE_OP (Op ) \
148
152
template <class T , int N> struct ESIMDf <T, N, MathOp::Op, AllVec> { \
149
- simd<T, N> operator ()(simd<T, N>X) const SYCL_ESIMD_FUNCTION { \
153
+ simd<T, N> operator ()(simd<T, N> X) const SYCL_ESIMD_FUNCTION { \
150
154
return esimd::Op<T, N>(X); \
151
155
} \
152
156
}; \
@@ -155,17 +159,6 @@ DEFINE_HOST_BIN_OP(pow, std::pow(X, Y));
155
159
return esimd::Op<T, N>(X); \
156
160
} \
157
161
};
158
- #define DEFINE_EXP_ESIMD_DEVICE_OP (Op ) \
159
- template <class T , int N> struct ESIMDf <T, N, MathOp::Op, AllVec> { \
160
- simd<T, N> operator ()(simd<T, N> X) const SYCL_ESIMD_FUNCTION { \
161
- return experimental::esimd::Op<T, N>(X); \
162
- } \
163
- }; \
164
- template <class T , int N> struct ESIMDf <T, N, MathOp::Op, AllSca> { \
165
- simd<T, N> operator ()(T X) const SYCL_ESIMD_FUNCTION { \
166
- return experimental::esimd::Op<T, N>(X); \
167
- } \
168
- };
169
162
170
163
DEFINE_ESIMD_DEVICE_OP (sin);
171
164
DEFINE_ESIMD_DEVICE_OP (cos);
@@ -175,7 +168,9 @@ DEFINE_ESIMD_DEVICE_OP(inv);
175
168
DEFINE_ESIMD_DEVICE_OP (sqrt);
176
169
DEFINE_ESIMD_DEVICE_OP (sqrt_ieee);
177
170
DEFINE_ESIMD_DEVICE_OP (rsqrt);
178
- DEFINE_EXP_ESIMD_DEVICE_OP (trunc);
171
+ DEFINE_ESIMD_DEVICE_OP (floor);
172
+ DEFINE_ESIMD_DEVICE_OP (ceil);
173
+ DEFINE_ESIMD_DEVICE_OP (trunc);
179
174
DEFINE_ESIMD_DEVICE_OP (exp2);
180
175
DEFINE_ESIMD_DEVICE_OP (log2);
181
176
@@ -416,6 +411,8 @@ template <class T, int N> bool testESIMD(queue &Q) {
416
411
Pass &= test<T, N, MathOp::log, ESIMDf>(Q, " log" , InitWide<T>{});
417
412
Pass &= test<T, N, MathOp::exp2, ESIMDf>(Q, " exp2" , InitInRange0_5<T>{});
418
413
Pass &= test<T, N, MathOp::log2, ESIMDf>(Q, " log2" , InitWide<T>{});
414
+ Pass &= test<T, N, MathOp::floor, ESIMDf>(Q, " floor" , InitWide<T>{});
415
+ Pass &= test<T, N, MathOp::ceil, ESIMDf>(Q, " ceil" , InitWide<T>{});
419
416
Pass &= test<T, N, MathOp::trunc, ESIMDf>(Q, " trunc" , InitWide<T>{});
420
417
return Pass;
421
418
}
0 commit comments