Fix cmpli usage in power6 memset.
authorJoseph Myers <joseph@codesourcery.com>
Tue, 25 Oct 2016 15:54:16 +0000 (15:54 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 25 Oct 2016 15:54:16 +0000 (15:54 +0000)
Building glibc for powerpc64 with recent (2.27.51.20161012) binutils,
with multi-arch enabled, I get the error:

../sysdeps/powerpc/powerpc64/power6/memset.S: Assembler messages:
../sysdeps/powerpc/powerpc64/power6/memset.S:254: Error: operand out of range (5 is not between 0 and 1)
../sysdeps/powerpc/powerpc64/power6/memset.S:254: Error: operand out of range (128 is not between 0 and 31)
../sysdeps/powerpc/powerpc64/power6/memset.S:254: Error: missing operand

Indeed, cmpli is documented as a four-operand instruction, and looking
at nearby code it seems likely cmpldi was intended.  This patch fixes
this powerpc64 code accordingly, and makes a corresponding change to
the powerpc32 code.

Tested for powerpc, powerpc64 and powerpc64le by Tulio Magno Quites
Machado Filho

* sysdeps/powerpc/powerpc32/power6/memset.S (memset): Use cmplwi
instead of cmpli.
* sysdeps/powerpc/powerpc64/power6/memset.S (memset): Use cmpldi
instead of cmpli.

ChangeLog
sysdeps/powerpc/powerpc32/power6/memset.S
sysdeps/powerpc/powerpc64/power6/memset.S

index c0fcabf517de7c99b22c6dfe72d169f832d80e2e..824ce66cbf827024c04448a32c1dd02df7f0667a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2016-10-25  Joseph Myers  <joseph@codesourcery.com>
+
+       * sysdeps/powerpc/powerpc32/power6/memset.S (memset): Use cmplwi
+       instead of cmpli.
+       * sysdeps/powerpc/powerpc64/power6/memset.S (memset): Use cmpldi
+       instead of cmpli.
+
 2016-10-24  Yury Norov  <ynorov@caviumnetworks.com>
 
        * sysdeps/unix/sysv/linux/fxstat.c: Remove useless cast.
index b2a222edd22a5c21a3edb6bf010f69f3772f4c8a..d5dbe83af2fd9d46d0e237707901096ddc298e81 100644 (file)
@@ -394,7 +394,7 @@ L(cacheAlignedx):
 /* A simple loop for the longer (>640 bytes) lengths.  This form limits
    the branch miss-predicted to exactly 1 at loop exit.*/
 L(cacheAligned512):
-       cmpl  cr1,rLEN,128
+       cmplwi  cr1,rLEN,128
        blt     cr1,L(cacheAligned1)
        dcbz    0,rMEMP
        addi    rLEN,rLEN,-128
index c2d1c4e600c810fd967c1331d7fc974070b64384..d445b1e1ef18597635830089d315d9fdeb89bccc 100644 (file)
@@ -251,7 +251,7 @@ L(cacheAlignedx):
 /* A simple loop for the longer (>640 bytes) lengths.  This form limits
    the branch miss-predicted to exactly 1 at loop exit.*/
 L(cacheAligned512):
-       cmpl  cr1,rLEN,128
+       cmpldi  cr1,rLEN,128
        blt     cr1,L(cacheAligned1)
        dcbz    0,rMEMP
        addi    rLEN,rLEN,-128