+2010-11-09 H.J. Lu <hongjiu.lu@intel.com>
+
+ [BZ #12205]
+ * string/test-strncasecmp.c (check_result): New function.
+ (do_one_test): Use it.
+ (check1): New function.
+ (test_main): Use it.
+ * sysdeps/i386/i686/multiarch/strcmp.S (nibble_ashr_use_sse4_2_exit):
+ Support strcasecmp and strncasecmp.
+
2010-11-08 Ulrich Drepper <drepper@gmail.com>
[BZ #12194]
-GNU C Library NEWS -- history of user-visible changes. 2010-11-8
+GNU C Library NEWS -- history of user-visible changes. 2010-11-10
Copyright (C) 1992-2009, 2010 Free Software Foundation, Inc.
See the end for copying conditions.
3268, 7066, 10851, 11611, 11640, 11701, 11840, 11856, 11883, 11903, 11904,
11968, 11979, 12005, 12037, 12067, 12077, 12078, 12092, 12093, 12107, 12108,
- 12113, 12140, 12159, 12167, 12191, 12194
+ 12113, 12140, 12159, 12167, 12191, 12194, 12205
* New Linux interfaces: prlimit, prlimit64, fanotify_init, fanotify_mark
return ret;
}
-static void
-do_one_test (impl_t *impl, const char *s1, const char *s2, size_t n,
- int exp_result)
+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);
if ((exp_result == 0 && result != 0)
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));
}
}
+
+static void
+check1 (void)
+{
+ static char cp [4096+16] __attribute__ ((aligned(4096)));
+ static char gotrel[4096] __attribute__ ((aligned(4096)));
+ char *s1 = cp + 0xffa;
+ char *s2 = gotrel + 0xcbe;
+ int exp_result;
+ size_t n = 6;
+
+ strcpy (s1, "gottpoff");
+ strcpy (s2, "GOTPLT");
+
+ exp_result = simple_strncasecmp (s1, s2, n);
+ FOR_EACH_IMPL (impl, 0)
+ check_result (impl, s1, s2, n, exp_result);
+}
+
int
test_main (void)
{
test_init ();
+ check1 ();
+
printf ("%23s", "");
FOR_EACH_IMPL (impl, 0)
printf ("\t%s", impl->name);
ja LABEL(loop_ashr_15_use_sse4_2)
LABEL(nibble_ashr_use_sse4_2_exit):
+# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
pcmpistri $0x1a,(%rsi,%rdx), %xmm0
+# else
+ movdqa (%rsi,%rdx), %xmm1
+ TOLOWER (%xmm0, %xmm1)
+ pcmpistri $0x1a, %xmm1, %xmm0
+# endif
.p2align 4
LABEL(use_sse4_2_exit):
jnc LABEL(strcmp_exitz_sse4_2)