diff options
author | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2012-07-31 15:30:38 +0000 |
---|---|---|
committer | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2012-07-31 15:30:38 +0000 |
commit | dd3105b347f432016fcdc1abd472c3717f557c9e (patch) | |
tree | cbaaecdaa1d3ad240177c9040f7f46c1387716ce /libc/sysdeps/s390/s390-32/memset.S | |
parent | 20f73aac36c2b2c240dcc379d5117488fe44960c (diff) | |
download | eglibc2-dd3105b347f432016fcdc1abd472c3717f557c9e.tar.gz |
Merge changes between r19464 and r19920 from /fsf/trunk.
git-svn-id: svn://svn.eglibc.org/trunk@19921 7b3dc134-2b1b-0410-93df-9e9f96275f8d
Diffstat (limited to 'libc/sysdeps/s390/s390-32/memset.S')
-rw-r--r-- | libc/sysdeps/s390/s390-32/memset.S | 61 |
1 files changed, 41 insertions, 20 deletions
diff --git a/libc/sysdeps/s390/s390-32/memset.S b/libc/sysdeps/s390/s390-32/memset.S index 00e908278..31a70f0c9 100644 --- a/libc/sysdeps/s390/s390-32/memset.S +++ b/libc/sysdeps/s390/s390-32/memset.S @@ -1,7 +1,6 @@ /* Set a block of memory to some byte value. For IBM S390 - Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc. + Copyright (C) 2012 Free Software Foundation, Inc. This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -17,28 +16,50 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -/* - * R2 = address to memory area - * R3 = byte to fill memory with - * R4 = number of bytes to fill - */ #include "sysdep.h" #include "asm-syntax.h" - .text +/* INPUT PARAMETERS + %r2 = address to memory area + %r3 = byte to fill memory with + %r4 = number of bytes to fill. */ + + .text + +#ifdef USE_MULTIARCH +ENTRY(memset_g5) +#else ENTRY(memset) - ltr %r4,%r4 - jz .L1 - lr %r0,%r2 # save source address - lr %r1,%r3 # move pad byte to R1 - lr %r3,%r4 - sr %r4,%r4 # no source for MVCLE, only a pad byte - sr %r5,%r5 -.L0: mvcle %r2,%r4,0(%r1) # thats it, MVCLE is your friend - jo .L0 - lr %r2,%r0 # return value is source address -.L1: - br %r14 +#endif + .machine "g5" + basr %r5,0 +.L_G5_19: + ltr %r4,%r4 + je .L_G5_4 + stc %r3,0(%r2) + chi %r4,1 + lr %r1,%r2 + je .L_G5_4 + ahi %r4,-2 + lr %r3,%r4 + srl %r3,8 + ltr %r3,%r3 + jne .L_G5_14 + ex %r4,.L_G5_20-.L_G5_19(%r5) +.L_G5_4: + br %r14 +.L_G5_14: + mvc 1(256,%r1),0(%r1) + la %r1,256(%r1) + brct %r3,.L_G5_14 + ex %r4,.L_G5_20-.L_G5_19(%r5) + j .L_G5_4 +.L_G5_20: + mvc 1(1,%r1),0(%r1) +#ifdef USE_MULTIARCH +END(memset_g5) +#else END(memset) libc_hidden_builtin_def (memset) +#endif |