This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] powerpc: strcasecmp/strncasecmp optmization for power8 [BZ 20327]
- From: Rajalakshmi Srinivasaraghavan <raji at linux dot vnet dot ibm dot com>
- To: Florian Weimer <fweimer at redhat dot com>, libc-alpha at sourceware dot org
- Date: Tue, 5 Jul 2016 17:39:17 +0530
- Subject: Re: [PATCH] powerpc: strcasecmp/strncasecmp optmization for power8 [BZ 20327]
- Authentication-results: sourceware.org; auth=none
- References: <1461919871-30348-1-git-send-email-raji@linux.vnet.ibm.com> <87eg809a1i.fsf@totoro.br.ibm.com> <575FD251.7010705@linux.vnet.ibm.com> <6b38e864-0607-0bba-ff18-617f536f4146@redhat.com>
On 07/04/2016 07:46 PM, Florian Weimer wrote:
On 06/14/2016 11:45 AM, Rajalakshmi Srinivasaraghavan wrote:
Committed as c8376f3e07602aaef9cb843bb73cb5f2b860634a
after removing those lines.
This appears to have caused bug 20327.
Could you have a look?
Thanks,
Florian
I have fixed it in the attached patch.
--
Thanks
Rajalakshmi S
>From 42c2aeecdb371b7544b81cb09cfcb12c2f873c72 Mon Sep 17 00:00:00 2001
From: Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>
Date: Tue, 5 Jul 2016 04:41:51 -0400
Subject: [PATCH] POWER8: Fix return code of strcasecmp for unaligned inputs
If the input values are unaligned and if there are null characters in the
memory before the starting address of the input values, strcasecmp
gives incorrect return code. Fixed it by adding mask the bits that
are not part of the string.
Tested on ppc64 and ppc64le.
[BZ #20327]
* sysdeps/powerpc/powerpc64/power8/strcasecmp.S: Mask bits that
are not part of the string.
---
sysdeps/powerpc/powerpc64/power8/strcasecmp.S | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/sysdeps/powerpc/powerpc64/power8/strcasecmp.S b/sysdeps/powerpc/powerpc64/power8/strcasecmp.S
index 63f6217..d6a4df2 100644
--- a/sysdeps/powerpc/powerpc64/power8/strcasecmp.S
+++ b/sysdeps/powerpc/powerpc64/power8/strcasecmp.S
@@ -44,7 +44,9 @@
#ifdef __LITTLE_ENDIAN__
#define GET16BYTES(reg1, reg2, reg3) \
lvx reg1, 0, reg2; \
- vcmpequb. v8, v0, reg1; \
+ vspltisb v8, -1; \
+ vperm v8, v8, reg1, reg3; \
+ vcmpequb. v8, v0, v8; \
beq cr6, 1f; \
vspltisb v9, 0; \
b 2f; \
@@ -57,7 +59,9 @@
#else
#define GET16BYTES(reg1, reg2, reg3) \
lvx reg1, 0, reg2; \
- vcmpequb. v8, v0, reg1; \
+ vspltisb v8, -1; \
+ vperm v8, reg1, v8, reg3; \
+ vcmpequb. v8, v0, v8; \
beq cr6, 1f; \
vspltisb v9, 0; \
b 2f; \
--
1.8.3.1