This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix POWER4/POWER7 optimized strncmp to not read past differing bytes


2011-03-28  Andreas Schwab  <schwab@linux-m68k.org>

	* sysdeps/powerpc/powerpc32/power4/strncmp.S: Don't read past
	differing bytes.
	* sysdeps/powerpc/powerpc64/power4/strncmp.S: Likewise.
	* sysdeps/powerpc/powerpc32/power7/strncmp.S: Likewise.
	* sysdeps/powerpc/powerpc64/power7/strncmp.S: Likewise.
---
 sysdeps/powerpc/powerpc32/power4/strncmp.S |   11 ++++++-----
 sysdeps/powerpc/powerpc32/power7/strncmp.S |   11 ++++++-----
 sysdeps/powerpc/powerpc64/power4/strncmp.S |   11 ++++++-----
 sysdeps/powerpc/powerpc64/power7/strncmp.S |   11 ++++++-----
 4 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/sysdeps/powerpc/powerpc32/power4/strncmp.S b/sysdeps/powerpc/powerpc32/power4/strncmp.S
index fc0835e..f5d47af 100644
--- a/sysdeps/powerpc/powerpc32/power4/strncmp.S
+++ b/sysdeps/powerpc/powerpc32/power4/strncmp.S
@@ -1,5 +1,5 @@
 /* Optimized strcmp implementation for PowerPC32.
-   Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2006, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -139,30 +139,31 @@ L(u1):
 	bdz	L(u4)
 	cmpw	rWORD1, rWORD2
 	beq-	cr1, L(u4)
+	bne-	L(u4)
 	lbzu    rWORD3, 1(rSTR1)
 	lbzu	rWORD4, 1(rSTR2)
-	bne-	L(u4)
 	cmpwi	cr1, rWORD3, 0
 	bdz	L(u3)
 	cmpw	rWORD3, rWORD4
 	beq-    cr1, L(u3)
+	bne-    L(u3)
 	lbzu	rWORD1, 1(rSTR1)
 	lbzu	rWORD2, 1(rSTR2)
-	bne-    L(u3)
 	cmpwi	cr1, rWORD1, 0
 	bdz	L(u4)
 	cmpw	rWORD1, rWORD2
 	beq-	cr1, L(u4)
+	bne-	L(u4)
 	lbzu	rWORD3, 1(rSTR1)
 	lbzu	rWORD4, 1(rSTR2)
-	bne-	L(u4)
 	cmpwi	cr1, rWORD3, 0
 	bdz	L(u3)
 	cmpw	rWORD3, rWORD4
 	beq-    cr1, L(u3)
+	bne-	L(u3)
 	lbzu	rWORD1, 1(rSTR1)
 	lbzu	rWORD2, 1(rSTR2)
-	beq+    L(u1)
+	b       L(u1)
 
 L(u3):  sub     rRTN, rWORD3, rWORD4
         blr
diff --git a/sysdeps/powerpc/powerpc32/power7/strncmp.S b/sysdeps/powerpc/powerpc32/power7/strncmp.S
index ba72d0a..7ee9e03 100644
--- a/sysdeps/powerpc/powerpc32/power7/strncmp.S
+++ b/sysdeps/powerpc/powerpc32/power7/strncmp.S
@@ -1,5 +1,5 @@
 /* Optimized strcmp implementation for POWER7/PowerPC32.
-   Copyright (C) 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -141,30 +141,31 @@ L(u1):
 	bdz	L(u4)
 	cmpw	rWORD1,rWORD2
 	beq	cr1,L(u4)
+	bne	L(u4)
 	lbzu	rWORD3,1(rSTR1)
 	lbzu	rWORD4,1(rSTR2)
-	bne	L(u4)
 	cmpwi	cr1,rWORD3,0
 	bdz	L(u3)
 	cmpw	rWORD3,rWORD4
 	beq	cr1,L(u3)
+	bne	L(u3)
 	lbzu	rWORD1,1(rSTR1)
 	lbzu	rWORD2,1(rSTR2)
-	bne	L(u3)
 	cmpwi	cr1,rWORD1,0
 	bdz	L(u4)
 	cmpw	rWORD1,rWORD2
 	beq	cr1,L(u4)
+	bne	L(u4)
 	lbzu	rWORD3,1(rSTR1)
 	lbzu	rWORD4,1(rSTR2)
-	bne	L(u4)
 	cmpwi	cr1,rWORD3,0
 	bdz	L(u3)
 	cmpw	rWORD3,rWORD4
 	beq	cr1,L(u3)
+	bne	L(u3)
 	lbzu	rWORD1,1(rSTR1)
 	lbzu	rWORD2,1(rSTR2)
-	beq	L(u1)
+	b	L(u1)
 
 L(u3):  sub	rRTN,rWORD3,rWORD4
 	blr
diff --git a/sysdeps/powerpc/powerpc64/power4/strncmp.S b/sysdeps/powerpc/powerpc64/power4/strncmp.S
index 7a1665d..94ae85b 100644
--- a/sysdeps/powerpc/powerpc64/power4/strncmp.S
+++ b/sysdeps/powerpc/powerpc64/power4/strncmp.S
@@ -1,5 +1,5 @@
 /* Optimized strcmp implementation for PowerPC64.
-   Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2006, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -143,30 +143,31 @@ L(u1):
 	bdz	L(u4)
 	cmpd	rWORD1, rWORD2
 	beq-	cr1, L(u4)
+	bne-	L(u4)
 	lbzu    rWORD3, 1(rSTR1)
 	lbzu	rWORD4, 1(rSTR2)
-	bne-	L(u4)
 	cmpdi	cr1, rWORD3, 0
 	bdz	L(u3)
 	cmpd	rWORD3, rWORD4
 	beq-    cr1, L(u3)
+	bne-    L(u3)
 	lbzu	rWORD1, 1(rSTR1)
 	lbzu	rWORD2, 1(rSTR2)
-	bne-    L(u3)
 	cmpdi	cr1, rWORD1, 0
 	bdz	L(u4)
 	cmpd	rWORD1, rWORD2
 	beq-	cr1, L(u4)
+	bne-	L(u4)
 	lbzu	rWORD3, 1(rSTR1)
 	lbzu	rWORD4, 1(rSTR2)
-	bne-	L(u4)
 	cmpdi	cr1, rWORD3, 0
 	bdz	L(u3)
 	cmpd	rWORD3, rWORD4
 	beq-    cr1, L(u3)
+	bne-    L(u3)
 	lbzu	rWORD1, 1(rSTR1)
 	lbzu	rWORD2, 1(rSTR2)
-	beq+    L(u1)
+	b       L(u1)
 
 L(u3):  sub     rRTN, rWORD3, rWORD4
         blr
diff --git a/sysdeps/powerpc/powerpc64/power7/strncmp.S b/sysdeps/powerpc/powerpc64/power7/strncmp.S
index 34f1e52..5ee5e2e 100644
--- a/sysdeps/powerpc/powerpc64/power7/strncmp.S
+++ b/sysdeps/powerpc/powerpc64/power7/strncmp.S
@@ -1,5 +1,5 @@
 /* Optimized strcmp implementation for POWER7/PowerPC64.
-   Copyright (C) 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -145,30 +145,31 @@ L(u1):
 	bdz	L(u4)
 	cmpd	rWORD1,rWORD2
 	beq	cr1,L(u4)
+	bne	L(u4)
 	lbzu	rWORD3,1(rSTR1)
 	lbzu	rWORD4,1(rSTR2)
-	bne	L(u4)
 	cmpdi	cr1,rWORD3,0
 	bdz	L(u3)
 	cmpd	rWORD3,rWORD4
 	beq	cr1,L(u3)
+	bne	L(u3)
 	lbzu	rWORD1,1(rSTR1)
 	lbzu	rWORD2,1(rSTR2)
-	bne	L(u3)
 	cmpdi	cr1,rWORD1,0
 	bdz	L(u4)
 	cmpd	rWORD1,rWORD2
 	beq	cr1,L(u4)
+	bne	L(u4)
 	lbzu	rWORD3,1(rSTR1)
 	lbzu	rWORD4,1(rSTR2)
-	bne	L(u4)
 	cmpdi	cr1,rWORD3,0
 	bdz	L(u3)
 	cmpd	rWORD3,rWORD4
 	beq	cr1,L(u3)
+	bne	L(u3)
 	lbzu	rWORD1,1(rSTR1)
 	lbzu	rWORD2,1(rSTR2)
-	beq	L(u1)
+	b	L(u1)
 
 L(u3):  sub	rRTN,rWORD3,rWORD4
 	blr
-- 
1.7.4.2


-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]