diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2010-04-15 07:49:30 -0700 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2010-04-15 07:49:30 -0700 |
commit | 6cc2b8a6dfc93212ce8437a2fb734a9225a4ba1c (patch) | |
tree | 2ac2af610b98cf2792b2170184bf737c34c9854f /string | |
parent | 94a27fabebf851f4722654aa118a7d5f29a9c2ee (diff) | |
download | glibc-6cc2b8a6dfc93212ce8437a2fb734a9225a4ba1c.tar.gz glibc-6cc2b8a6dfc93212ce8437a2fb734a9225a4ba1c.tar.xz glibc-6cc2b8a6dfc93212ce8437a2fb734a9225a4ba1c.zip |
Fix bugs in x86-32 strcmp-sse4.S and strcmp-ssse3.S
Diffstat (limited to 'string')
-rw-r--r-- | string/test-strncmp.c | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/string/test-strncmp.c b/string/test-strncmp.c index 5adf0eb311..3687879c25 100644 --- a/string/test-strncmp.c +++ b/string/test-strncmp.c @@ -1,5 +1,5 @@ /* Test and measure strncmp functions. - Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003, 2010 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Jakub Jelinek <jakub@redhat.com>, 1999. @@ -51,8 +51,8 @@ stupid_strncmp (const char *s1, const char *s2, size_t n) return ret; } -static void -do_one_test (impl_t *impl, const char *s1, const char *s2, size_t n, +static int +check_result (impl_t *impl, const char *s1, const char *s2, size_t n, int exp_result) { int result = CALL (impl, s1, s2, n); @@ -63,9 +63,19 @@ do_one_test (impl_t *impl, const char *s1, const char *s2, size_t n, error (0, 0, "Wrong result in function %s %d %d", impl->name, result, exp_result); ret = 1; - return; + return -1; } + return 0; +} + +static void +do_one_test (impl_t *impl, const char *s1, const char *s2, size_t n, + int exp_result) +{ + if (check_result (impl, s1, s2, n, exp_result) < 0) + return; + if (HP_TIMING_AVAIL) { hp_timing_t start __attribute ((unused)); @@ -283,6 +293,25 @@ do_random_tests (void) } } +static void +check1 (void) +{ + char *s1 = (char *)(buf1 + 0xb2c); + char *s2 = (char *)(buf1 + 0xfd8); + size_t i; + int exp_result; + + strcpy(s1, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs"); + strcpy(s2, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkLMNOPQRSTUV"); + + for (i = 0; i < 80; i++) + { + exp_result = simple_strncmp (s1, s2, i); + FOR_EACH_IMPL (impl, 0) + check_result (impl, s1, s2, i, exp_result); + } +} + int test_main (void) { @@ -290,6 +319,8 @@ test_main (void) test_init (); + check1 (); + printf ("%23s", ""); FOR_EACH_IMPL (impl, 0) printf ("\t%s", impl->name); |