|
21 | 21 | #define NS sycl::ext::intel::esimd
|
22 | 22 | #endif
|
23 | 23 |
|
| 24 | +// https://stackoverflow.com/questions/776508 |
| 25 | +template <typename T> T rotl(T n, unsigned int c) { |
| 26 | + const unsigned int mask = (CHAR_BIT * sizeof(n) - 1); |
| 27 | + c &= mask; |
| 28 | + return (n << c) | (n >> ((-c) & mask)); |
| 29 | +} |
| 30 | + |
| 31 | +template <typename T> T rotr(T n, unsigned int c) { |
| 32 | + const unsigned int mask = (CHAR_BIT * sizeof(n) - 1); |
| 33 | + c &= mask; |
| 34 | + return (n >> c) | (n << ((-c) & mask)); |
| 35 | +} |
| 36 | + |
24 | 37 | using namespace sycl;
|
25 | 38 | using namespace sycl::ext::intel::esimd;
|
26 | 39 |
|
@@ -85,14 +98,14 @@ template <typename T> bool test_rotate(sycl::queue &Queue) {
|
85 | 98 |
|
86 | 99 | for (int I = 0; I < VL; I++) {
|
87 | 100 | using OpT = std::make_unsigned_t<T>;
|
88 |
| - ExpectedRorScalar[I] = std::rotr<OpT>( |
89 |
| - sycl::bit_cast<OpT>(ExpectedRorScalar[I]), ScalarRotateFactor); |
90 |
| - ExpectedRolScalar[I] = std::rotl<OpT>( |
91 |
| - sycl::bit_cast<OpT>(ExpectedRolScalar[I]), ScalarRotateFactor); |
92 |
| - ExpectedRorVector[I] = std::rotr<OpT>( |
93 |
| - sycl::bit_cast<OpT>(ExpectedRorVector[I]), VectorRotateFactor[I]); |
94 |
| - ExpectedRolVector[I] = std::rotl<OpT>( |
95 |
| - sycl::bit_cast<OpT>(ExpectedRolVector[I]), VectorRotateFactor[I]); |
| 101 | + ExpectedRorScalar[I] = rotr<OpT>(sycl::bit_cast<OpT>(ExpectedRorScalar[I]), |
| 102 | + ScalarRotateFactor); |
| 103 | + ExpectedRolScalar[I] = rotl<OpT>(sycl::bit_cast<OpT>(ExpectedRolScalar[I]), |
| 104 | + ScalarRotateFactor); |
| 105 | + ExpectedRorVector[I] = rotr<OpT>(sycl::bit_cast<OpT>(ExpectedRorVector[I]), |
| 106 | + VectorRotateFactor[I]); |
| 107 | + ExpectedRolVector[I] = rotl<OpT>(sycl::bit_cast<OpT>(ExpectedRolVector[I]), |
| 108 | + VectorRotateFactor[I]); |
96 | 109 | }
|
97 | 110 | for (int I = 0; I < VL; I++) {
|
98 | 111 | if (ExpectedRorScalar[I] != OutputRorScalar[I]) {
|
|
0 commit comments