From 14c996c83b265c31aae5f64480d393fa5d3364f3 Mon Sep 17 00:00:00 2001 From: Andreas Krebbel Date: Thu, 6 Sep 2012 10:28:52 +0200 Subject: [PATCH] S/390: Fix optimized mem* running on 31 bit kernels. --- ChangeLog | 11 +++++++++++ sysdeps/s390/s390-32/multiarch/Makefile | 6 ------ sysdeps/s390/s390-32/multiarch/ifunc-resolve.c | 3 ++- sysdeps/s390/s390-32/multiarch/memcmp.S | 2 ++ sysdeps/s390/s390-32/multiarch/memcpy.S | 2 ++ sysdeps/s390/s390-32/multiarch/memset.S | 2 ++ 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index c69a7c4c6f..b978444773 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2012-09-06 Andreas Krebbel + + * sysdeps/s390/s390-32/multiarch/Makefile: Remove -mzarch + assembler flag. + * sysdeps/s390/s390-32/multiarch/memcmp.S: Use .machinemode + zarch_nohighgprs around the zarch optimized routines. + * sysdeps/s390/s390-32/multiarch/memcpy.S: Likewise. + * sysdeps/s390/s390-32/multiarch/memset.S: Likewise. + * sysdeps/s390/s390-32/multiarch/ifunc-resolve.c: Explicitly check + for zarch. + 2012-09-05 David S. Miller * sysdeps/sparc/fpu/libm-test-ulps: Update. diff --git a/sysdeps/s390/s390-32/multiarch/Makefile b/sysdeps/s390/s390-32/multiarch/Makefile index 5b0cd49c72..9baeecda64 100644 --- a/sysdeps/s390/s390-32/multiarch/Makefile +++ b/sysdeps/s390/s390-32/multiarch/Makefile @@ -1,9 +1,3 @@ -ASFLAGS-.o += -Wa,-mzarch -ASFLAGS-.os += -Wa,-mzarch -ASFLAGS-.op += -Wa,-mzarch -ASFLAGS-.og += -Wa,-mzarch -ASFLAGS-.ob += -Wa,-mzarch -ASFLAGS-.oS += -Wa,-mzarch ifeq ($(subdir),string) sysdep_routines += ifunc-resolve memset memcpy memcmp endif diff --git a/sysdeps/s390/s390-32/multiarch/ifunc-resolve.c b/sysdeps/s390/s390-32/multiarch/ifunc-resolve.c index 6a86c03c25..f1bf8a3dc4 100644 --- a/sysdeps/s390/s390-32/multiarch/ifunc-resolve.c +++ b/sysdeps/s390/s390-32/multiarch/ifunc-resolve.c @@ -41,7 +41,8 @@ void *resolve_##FUNC (unsigned long int dl_hwcap) \ { \ if ((dl_hwcap & HWCAP_S390_STFLE) \ - && (dl_hwcap & HWCAP_S390_HIGH_GPRS)) /* Implies zarch */ \ + && (dl_hwcap & HWCAP_S390_ZARCH) \ + && (dl_hwcap & HWCAP_S390_HIGH_GPRS)) \ { \ /* We want just 1 double word to be returned. */ \ register unsigned long reg0 asm("0") = 0; \ diff --git a/sysdeps/s390/s390-32/multiarch/memcmp.S b/sysdeps/s390/s390-32/multiarch/memcmp.S index cd8ea86b0c..9ca88911c8 100644 --- a/sysdeps/s390/s390-32/multiarch/memcmp.S +++ b/sysdeps/s390/s390-32/multiarch/memcmp.S @@ -31,6 +31,7 @@ ENTRY(memcmp_z196) .machine "z196" + .machinemode "zarch_nohighgprs" ltr %r4,%r4 je .L_Z196_4 ahi %r4,-1 @@ -64,6 +65,7 @@ END(memcmp_z196) ENTRY(memcmp_z10) .machine "z10" + .machinemode "zarch_nohighgprs" ltr %r4,%r4 je .L_Z10_4 ahi %r4,-1 diff --git a/sysdeps/s390/s390-32/multiarch/memcpy.S b/sysdeps/s390/s390-32/multiarch/memcpy.S index 40f4acfbb6..7b85602aa3 100644 --- a/sysdeps/s390/s390-32/multiarch/memcpy.S +++ b/sysdeps/s390/s390-32/multiarch/memcpy.S @@ -31,6 +31,7 @@ ENTRY(memcpy_z196) .machine "z196" + .machinemode "zarch_nohighgprs" llgfr %r4,%r4 ltgr %r4,%r4 je .L_Z196_4 @@ -61,6 +62,7 @@ END(memcpy_z196) ENTRY(memcpy_z10) .machine "z10" + .machinemode "zarch_nohighgprs" llgfr %r4,%r4 cgije %r4,0,.L_Z10_4 aghi %r4,-1 diff --git a/sysdeps/s390/s390-32/multiarch/memset.S b/sysdeps/s390/s390-32/multiarch/memset.S index 5ce7b4de83..ba43d671c2 100644 --- a/sysdeps/s390/s390-32/multiarch/memset.S +++ b/sysdeps/s390/s390-32/multiarch/memset.S @@ -31,6 +31,7 @@ ENTRY(memset_z196) .machine "z196" + .machinemode "zarch_nohighgprs" llgfr %r4,%r4 ltgr %r4,%r4 je .L_Z196_4 @@ -62,6 +63,7 @@ END(memset_z196) ENTRY(memset_z10) .machine "z10" + .machinemode "zarch_nohighgprs" llgfr %r4,%r4 cgije %r4,0,.L_Z10_4 stc %r3,0(%r2) -- 2.43.5