comparison test/test_arith.h @ 28:c6c99ab1088a

*: add min/max functions and a big big refactor (again) agh, this time I added a few more implementations (and generally made the code just a little faster...)
author Paper <paper@tflc.us>
date Thu, 24 Apr 2025 00:54:02 -0400
parents 92156fe32755
children bf6ad516f1e6
comparison
equal deleted inserted replaced
27:d00b95f95dd1 28:c6c99ab1088a
63 CREATE_TEST(sign, psign, csign, bits, size, or, orig_a[i] | orig_b[i]) \ 63 CREATE_TEST(sign, psign, csign, bits, size, or, orig_a[i] | orig_b[i]) \
64 CREATE_TEST(sign, psign, csign, bits, size, xor, orig_a[i] ^ orig_b[i]) \ 64 CREATE_TEST(sign, psign, csign, bits, size, xor, orig_a[i] ^ orig_b[i]) \
65 CREATE_TEST(sign, psign, csign, bits, size, avg, vec_##sign##avg(orig_a[i], orig_b[i])) \ 65 CREATE_TEST(sign, psign, csign, bits, size, avg, vec_##sign##avg(orig_a[i], orig_b[i])) \
66 CREATE_TEST_SHIFT(sign, psign, csign, bits, size, rshift, vec_##sign##rshift(orig_a[i], orig_b[i])) \ 66 CREATE_TEST_SHIFT(sign, psign, csign, bits, size, rshift, vec_##sign##rshift(orig_a[i], orig_b[i])) \
67 CREATE_TEST_SHIFT(sign, psign, csign, bits, size, lshift, vec_##sign##lshift(orig_a[i], orig_b[i])) \ 67 CREATE_TEST_SHIFT(sign, psign, csign, bits, size, lshift, vec_##sign##lshift(orig_a[i], orig_b[i])) \
68 CREATE_TEST_SHIFT(sign, psign, csign, bits, size, lrshift, vec_lrshift((vec_uint##bits)orig_a[i], orig_b[i])) 68 CREATE_TEST_SHIFT(sign, psign, csign, bits, size, lrshift, vec_lrshift((vec_uint##bits)orig_a[i], orig_b[i])) \
69 CREATE_TEST(sign, psign, csign, bits, size, min, (orig_a[i] < orig_b[i]) ? (orig_a[i]) : (orig_b[i])) \
70 CREATE_TEST(sign, psign, csign, bits, size, max, (orig_a[i] > orig_b[i]) ? (orig_a[i]) : (orig_b[i]))
69 71
70 #define CREATE_TESTS(bits, size) \ 72 #define CREATE_TESTS(bits, size) \
71 CREATE_TESTS_SIGN(, d, , bits, size) \ 73 CREATE_TESTS_SIGN(, d, , bits, size) \
72 CREATE_TESTS_SIGN(u, u, U, bits, size) 74 CREATE_TESTS_SIGN(u, u, U, bits, size)
73 75
115 ret |= test_arith_v##sign##int##bits##x##size##_div(a, b); \ 117 ret |= test_arith_v##sign##int##bits##x##size##_div(a, b); \
116 ret |= test_arith_v##sign##int##bits##x##size##_and(a, b); \ 118 ret |= test_arith_v##sign##int##bits##x##size##_and(a, b); \
117 ret |= test_arith_v##sign##int##bits##x##size##_or(a, b); \ 119 ret |= test_arith_v##sign##int##bits##x##size##_or(a, b); \
118 ret |= test_arith_v##sign##int##bits##x##size##_xor(a, b); \ 120 ret |= test_arith_v##sign##int##bits##x##size##_xor(a, b); \
119 ret |= test_arith_v##sign##int##bits##x##size##_avg(a, b); \ 121 ret |= test_arith_v##sign##int##bits##x##size##_avg(a, b); \
122 ret |= test_arith_v##sign##int##bits##x##size##_min(a, b); \
123 ret |= test_arith_v##sign##int##bits##x##size##_max(a, b); \
120 } \ 124 } \
121 } \ 125 } \
122 \ 126 \
123 for (size_t i = 0U; i < ARRAY_SIZE(testval##sign##bits); i++) { \ 127 for (size_t i = 0U; i < ARRAY_SIZE(testval##sign##bits); i++) { \
124 const v##sign##int##bits##x##size a = vtest##sign##bits##x##size(i); \ 128 const v##sign##int##bits##x##size a = vtest##sign##bits##x##size(i); \