| Index: crosstest/test_arith_main.cpp
|
| diff --git a/crosstest/test_arith_main.cpp b/crosstest/test_arith_main.cpp
|
| index b032a5fcc06a0c4705f9b437ba11b704f8ee090f..84bc6b72ebd6827d4df56e5cf4164e5f2791de4b 100644
|
| --- a/crosstest/test_arith_main.cpp
|
| +++ b/crosstest/test_arith_main.cpp
|
| @@ -61,12 +61,12 @@ void testsInt(size_t &TotalTests, size_t &Passes, size_t &Failures) {
|
| FuncTypeSigned FuncSzSigned;
|
| bool ExcludeDivExceptions; // for divide related tests
|
| } Funcs[] = {
|
| -#define X(inst, op, isdiv) \
|
| +#define X(inst, op, isdiv, isshift) \
|
| { STR(inst), test##inst, Subzero_::test##inst, NULL, NULL, isdiv } \
|
| ,
|
| UINTOP_TABLE
|
| #undef X
|
| -#define X(inst, op, isdiv) \
|
| +#define X(inst, op, isdiv, isshift) \
|
| { STR(inst), NULL, NULL, test##inst, Subzero_::test##inst, isdiv } \
|
| ,
|
| SINTOP_TABLE
|
| @@ -172,17 +172,18 @@ void testsVecInt(size_t &TotalTests, size_t &Passes, size_t &Failures) {
|
| FuncTypeSigned FuncLlcSigned;
|
| FuncTypeSigned FuncSzSigned;
|
| bool ExcludeDivExceptions; // for divide related tests
|
| + bool MaskShiftOperations; // for shift related tests
|
| } Funcs[] = {
|
| -#define X(inst, op, isdiv) \
|
| +#define X(inst, op, isdiv, isshift) \
|
| { \
|
| - STR(inst), test##inst, Subzero_::test##inst, NULL, NULL, isdiv \
|
| + STR(inst), test##inst, Subzero_::test##inst, NULL, NULL, isdiv, isshift \
|
| } \
|
| ,
|
| UINTOP_TABLE
|
| #undef X
|
| -#define X(inst, op, isdiv) \
|
| +#define X(inst, op, isdiv, isshift) \
|
| { \
|
| - STR(inst), NULL, NULL, test##inst, Subzero_::test##inst, isdiv \
|
| + STR(inst), NULL, NULL, test##inst, Subzero_::test##inst, isdiv, isshift \
|
| } \
|
| ,
|
| SINTOP_TABLE
|
| @@ -201,6 +202,8 @@ void testsVecInt(size_t &TotalTests, size_t &Passes, size_t &Failures) {
|
| if (Funcs[f].ExcludeDivExceptions &&
|
| inputsMayTriggerException<ElementTypeSigned>(Element1, Element2))
|
| continue;
|
| + if (Funcs[f].MaskShiftOperations)
|
| + Element2 &= CHAR_BIT * sizeof(ElementTypeUnsigned) - 1;
|
| Value1[j] = Element1;
|
| Value2[j] = Element2;
|
| ++j;
|
| @@ -360,37 +363,3 @@ int main(int argc, char **argv) {
|
| return Failures;
|
| }
|
|
|
| -extern "C" {
|
| -// Subzero helpers
|
| - v4si32 Sz_shl_v4i32(v4si32 a, v4si32 b) { return a << b; }
|
| - v4si32 Sz_ashr_v4i32(v4si32 a, v4si32 b) { return a >> b; }
|
| - v4ui32 Sz_lshr_v4i32(v4ui32 a, v4ui32 b) { return a >> b; }
|
| - v4si32 Sz_sdiv_v4i32(v4si32 a, v4si32 b) { return a / b; }
|
| - v4ui32 Sz_udiv_v4i32(v4ui32 a, v4ui32 b) { return a / b; }
|
| - v4si32 Sz_srem_v4i32(v4si32 a, v4si32 b) { return a % b; }
|
| - v4ui32 Sz_urem_v4i32(v4ui32 a, v4ui32 b) { return a % b; }
|
| -
|
| - v8si16 Sz_shl_v8i16(v8si16 a, v8si16 b) { return a << b; }
|
| - v8si16 Sz_ashr_v8i16(v8si16 a, v8si16 b) { return a >> b; }
|
| - v8ui16 Sz_lshr_v8i16(v8ui16 a, v8ui16 b) { return a >> b; }
|
| - v8si16 Sz_sdiv_v8i16(v8si16 a, v8si16 b) { return a / b; }
|
| - v8ui16 Sz_udiv_v8i16(v8ui16 a, v8ui16 b) { return a / b; }
|
| - v8si16 Sz_srem_v8i16(v8si16 a, v8si16 b) { return a % b; }
|
| - v8ui16 Sz_urem_v8i16(v8ui16 a, v8ui16 b) { return a % b; }
|
| -
|
| - v16ui8 Sz_mul_v16i8(v16ui8 a, v16ui8 b) { return a * b; }
|
| - v16si8 Sz_shl_v16i8(v16si8 a, v16si8 b) { return a << b; }
|
| - v16si8 Sz_ashr_v16i8(v16si8 a, v16si8 b) { return a >> b; }
|
| - v16ui8 Sz_lshr_v16i8(v16ui8 a, v16ui8 b) { return a >> b; }
|
| - v16si8 Sz_sdiv_v16i8(v16si8 a, v16si8 b) { return a / b; }
|
| - v16ui8 Sz_udiv_v16i8(v16ui8 a, v16ui8 b) { return a / b; }
|
| - v16si8 Sz_srem_v16i8(v16si8 a, v16si8 b) { return a % b; }
|
| - v16ui8 Sz_urem_v16i8(v16ui8 a, v16ui8 b) { return a % b; }
|
| -
|
| - v4f32 Sz_frem_v4f32(v4f32 a, v4f32 b) {
|
| - v4f32 Result;
|
| - for (int i = 0; i < 4; ++i)
|
| - Result[i] = fmodf(a[i], b[i]);
|
| - return Result;
|
| - }
|
| -}
|
|
|