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

This commit is contained in:
Andreas Schwab 2011-04-17 22:03:53 -04:00 committed by Ulrich Drepper
parent 75ea32abcd
commit 4420675c9d
5 changed files with 32 additions and 20 deletions

View File

@ -1,3 +1,11 @@
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.
2011-04-17 Ulrich Drepper <drepper@gmail.com> 2011-04-17 Ulrich Drepper <drepper@gmail.com>
[BZ #12420] [BZ #12420]

View File

@ -1,5 +1,5 @@
/* Optimized strcmp implementation for PowerPC32. /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -139,30 +139,31 @@ L(u1):
bdz L(u4) bdz L(u4)
cmpw rWORD1, rWORD2 cmpw rWORD1, rWORD2
beq- cr1, L(u4) beq- cr1, L(u4)
bne- L(u4)
lbzu rWORD3, 1(rSTR1) lbzu rWORD3, 1(rSTR1)
lbzu rWORD4, 1(rSTR2) lbzu rWORD4, 1(rSTR2)
bne- L(u4)
cmpwi cr1, rWORD3, 0 cmpwi cr1, rWORD3, 0
bdz L(u3) bdz L(u3)
cmpw rWORD3, rWORD4 cmpw rWORD3, rWORD4
beq- cr1, L(u3) beq- cr1, L(u3)
bne- L(u3)
lbzu rWORD1, 1(rSTR1) lbzu rWORD1, 1(rSTR1)
lbzu rWORD2, 1(rSTR2) lbzu rWORD2, 1(rSTR2)
bne- L(u3)
cmpwi cr1, rWORD1, 0 cmpwi cr1, rWORD1, 0
bdz L(u4) bdz L(u4)
cmpw rWORD1, rWORD2 cmpw rWORD1, rWORD2
beq- cr1, L(u4) beq- cr1, L(u4)
bne- L(u4)
lbzu rWORD3, 1(rSTR1) lbzu rWORD3, 1(rSTR1)
lbzu rWORD4, 1(rSTR2) lbzu rWORD4, 1(rSTR2)
bne- L(u4)
cmpwi cr1, rWORD3, 0 cmpwi cr1, rWORD3, 0
bdz L(u3) bdz L(u3)
cmpw rWORD3, rWORD4 cmpw rWORD3, rWORD4
beq- cr1, L(u3) beq- cr1, L(u3)
bne- L(u3)
lbzu rWORD1, 1(rSTR1) lbzu rWORD1, 1(rSTR1)
lbzu rWORD2, 1(rSTR2) lbzu rWORD2, 1(rSTR2)
beq+ L(u1) b L(u1)
L(u3): sub rRTN, rWORD3, rWORD4 L(u3): sub rRTN, rWORD3, rWORD4
blr blr

View File

@ -1,5 +1,5 @@
/* Optimized strcmp implementation for POWER7/PowerPC32. /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -141,30 +141,31 @@ L(u1):
bdz L(u4) bdz L(u4)
cmpw rWORD1,rWORD2 cmpw rWORD1,rWORD2
beq cr1,L(u4) beq cr1,L(u4)
bne L(u4)
lbzu rWORD3,1(rSTR1) lbzu rWORD3,1(rSTR1)
lbzu rWORD4,1(rSTR2) lbzu rWORD4,1(rSTR2)
bne L(u4)
cmpwi cr1,rWORD3,0 cmpwi cr1,rWORD3,0
bdz L(u3) bdz L(u3)
cmpw rWORD3,rWORD4 cmpw rWORD3,rWORD4
beq cr1,L(u3) beq cr1,L(u3)
bne L(u3)
lbzu rWORD1,1(rSTR1) lbzu rWORD1,1(rSTR1)
lbzu rWORD2,1(rSTR2) lbzu rWORD2,1(rSTR2)
bne L(u3)
cmpwi cr1,rWORD1,0 cmpwi cr1,rWORD1,0
bdz L(u4) bdz L(u4)
cmpw rWORD1,rWORD2 cmpw rWORD1,rWORD2
beq cr1,L(u4) beq cr1,L(u4)
bne L(u4)
lbzu rWORD3,1(rSTR1) lbzu rWORD3,1(rSTR1)
lbzu rWORD4,1(rSTR2) lbzu rWORD4,1(rSTR2)
bne L(u4)
cmpwi cr1,rWORD3,0 cmpwi cr1,rWORD3,0
bdz L(u3) bdz L(u3)
cmpw rWORD3,rWORD4 cmpw rWORD3,rWORD4
beq cr1,L(u3) beq cr1,L(u3)
bne L(u3)
lbzu rWORD1,1(rSTR1) lbzu rWORD1,1(rSTR1)
lbzu rWORD2,1(rSTR2) lbzu rWORD2,1(rSTR2)
beq L(u1) b L(u1)
L(u3): sub rRTN,rWORD3,rWORD4 L(u3): sub rRTN,rWORD3,rWORD4
blr blr

View File

@ -1,5 +1,5 @@
/* Optimized strcmp implementation for PowerPC64. /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -143,30 +143,31 @@ L(u1):
bdz L(u4) bdz L(u4)
cmpd rWORD1, rWORD2 cmpd rWORD1, rWORD2
beq- cr1, L(u4) beq- cr1, L(u4)
bne- L(u4)
lbzu rWORD3, 1(rSTR1) lbzu rWORD3, 1(rSTR1)
lbzu rWORD4, 1(rSTR2) lbzu rWORD4, 1(rSTR2)
bne- L(u4)
cmpdi cr1, rWORD3, 0 cmpdi cr1, rWORD3, 0
bdz L(u3) bdz L(u3)
cmpd rWORD3, rWORD4 cmpd rWORD3, rWORD4
beq- cr1, L(u3) beq- cr1, L(u3)
bne- L(u3)
lbzu rWORD1, 1(rSTR1) lbzu rWORD1, 1(rSTR1)
lbzu rWORD2, 1(rSTR2) lbzu rWORD2, 1(rSTR2)
bne- L(u3)
cmpdi cr1, rWORD1, 0 cmpdi cr1, rWORD1, 0
bdz L(u4) bdz L(u4)
cmpd rWORD1, rWORD2 cmpd rWORD1, rWORD2
beq- cr1, L(u4) beq- cr1, L(u4)
bne- L(u4)
lbzu rWORD3, 1(rSTR1) lbzu rWORD3, 1(rSTR1)
lbzu rWORD4, 1(rSTR2) lbzu rWORD4, 1(rSTR2)
bne- L(u4)
cmpdi cr1, rWORD3, 0 cmpdi cr1, rWORD3, 0
bdz L(u3) bdz L(u3)
cmpd rWORD3, rWORD4 cmpd rWORD3, rWORD4
beq- cr1, L(u3) beq- cr1, L(u3)
bne- L(u3)
lbzu rWORD1, 1(rSTR1) lbzu rWORD1, 1(rSTR1)
lbzu rWORD2, 1(rSTR2) lbzu rWORD2, 1(rSTR2)
beq+ L(u1) b L(u1)
L(u3): sub rRTN, rWORD3, rWORD4 L(u3): sub rRTN, rWORD3, rWORD4
blr blr

View File

@ -1,5 +1,5 @@
/* Optimized strcmp implementation for POWER7/PowerPC64. /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -145,30 +145,31 @@ L(u1):
bdz L(u4) bdz L(u4)
cmpd rWORD1,rWORD2 cmpd rWORD1,rWORD2
beq cr1,L(u4) beq cr1,L(u4)
bne L(u4)
lbzu rWORD3,1(rSTR1) lbzu rWORD3,1(rSTR1)
lbzu rWORD4,1(rSTR2) lbzu rWORD4,1(rSTR2)
bne L(u4)
cmpdi cr1,rWORD3,0 cmpdi cr1,rWORD3,0
bdz L(u3) bdz L(u3)
cmpd rWORD3,rWORD4 cmpd rWORD3,rWORD4
beq cr1,L(u3) beq cr1,L(u3)
bne L(u3)
lbzu rWORD1,1(rSTR1) lbzu rWORD1,1(rSTR1)
lbzu rWORD2,1(rSTR2) lbzu rWORD2,1(rSTR2)
bne L(u3)
cmpdi cr1,rWORD1,0 cmpdi cr1,rWORD1,0
bdz L(u4) bdz L(u4)
cmpd rWORD1,rWORD2 cmpd rWORD1,rWORD2
beq cr1,L(u4) beq cr1,L(u4)
bne L(u4)
lbzu rWORD3,1(rSTR1) lbzu rWORD3,1(rSTR1)
lbzu rWORD4,1(rSTR2) lbzu rWORD4,1(rSTR2)
bne L(u4)
cmpdi cr1,rWORD3,0 cmpdi cr1,rWORD3,0
bdz L(u3) bdz L(u3)
cmpd rWORD3,rWORD4 cmpd rWORD3,rWORD4
beq cr1,L(u3) beq cr1,L(u3)
bne L(u3)
lbzu rWORD1,1(rSTR1) lbzu rWORD1,1(rSTR1)
lbzu rWORD2,1(rSTR2) lbzu rWORD2,1(rSTR2)
beq L(u1) b L(u1)
L(u3): sub rRTN,rWORD3,rWORD4 L(u3): sub rRTN,rWORD3,rWORD4
blr blr