diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-06-21 10:16:07 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-06-21 10:16:07 -0700 |
commit | 3f422f51cbcae44360f99b386661ab974a8246cf (patch) | |
tree | 4a88b477dffa84ea9c985b0e398b4db9849b71d5 | |
parent | 04a4c8ed54e0f5c987bb90c1d9bb4f9d036c1f09 (diff) | |
download | glibc-3f422f51cbcae44360f99b386661ab974a8246cf.tar.gz |
Add do_test2hjl/memcmp/avx2
-rw-r--r-- | benchtests/bench-memcmp.c | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/benchtests/bench-memcmp.c b/benchtests/bench-memcmp.c index 84cba9a274..a159cf4250 100644 --- a/benchtests/bench-memcmp.c +++ b/benchtests/bench-memcmp.c @@ -120,7 +120,48 @@ do_test (size_t align1, size_t align2, size_t len, int exp_result) s2[len] = align2; s2[len - 1] -= exp_result; - printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2); + printf ("Length %4zd, Diff %4zd, alignment %2zd/%2zd:", + len, len, align1, align2); + + FOR_EACH_IMPL (impl, 0) + do_one_test (impl, s1, s2, len, exp_result); + + putchar ('\n'); +} + +static void +do_test2 (size_t align1, size_t align2, size_t len, size_t diff, + int exp_result) +{ + size_t i; + CHAR *s1, *s2; + + if (len == 0) + return; + + if (diff > len) + return; + + align1 &= 63; + if (align1 + (len + 1) * CHARBYTES >= page_size) + return; + + align2 &= 63; + if (align2 + (len + 1) * CHARBYTES >= page_size) + return; + + s1 = (CHAR *) (buf1 + align1); + s2 = (CHAR *) (buf2 + align2); + + for (i = 0; i < len; i++) + s1[i] = s2[i] = 1 + (23 << ((CHARBYTES - 1) * 8)) * i % CHAR__MAX; + + s1[len] = align1; + s2[len] = align2; + s2[diff - 1] -= exp_result; + + printf ("Length %4zd, Diff %4zd, alignment %2zd/%2zd:", + len, diff, align1, align2); FOR_EACH_IMPL (impl, 0) do_one_test (impl, s1, s2, len, exp_result); @@ -140,6 +181,13 @@ test_main (void) printf ("\t%s", impl->name); putchar ('\n'); + for (i = 32; i < 64; ++i) + { + do_test2 (0, 0, i, 31, 1); + do_test2 (0, 0, i, 31, -1); + do_test2 (0, 0, i, 31, 0); + } + for (i = 1; i < 16; ++i) { do_test (i * CHARBYTES, i * CHARBYTES, i, 0); |