glibc/sysdeps/powerpc/memset.s
Ulrich Drepper 800d775e42 Update.
1997-08-29 21:45  Ulrich Drepper  <drepper@cygnus.com>

	* sunrpc/auth_des.c: New file.  Copied from former secure_rpc add-on.
	* sunrpc/authdes_prot.c: New file.  Likewise.
	* sunrpc/des.h: New file.  Likewise.
	* sunrpc/des_crypt.c: New file.  Likewise.
	* sunrpc/des_soft.c: New file.  Likewise.
	* sunrpc/key_call.c: New file.  Likewise.
	* sunrpc/key_prot.c: New file.  Likewise.
	* sunrpc/netname.c: New file.  Likewise.
	* sunrpc/openchild.c: New file.  Likewise.
	* sunrpc/rtime.c: New file.  Likewise.
	* sunrpc/svc_auth.c: New file.  Likewise.
	* sunrpc/svcauth_des.c: New file.  Likewise.
	* sunrpc/xcrypt.c: New file.  Likewise.
	* sunrpc/rpc/auth.h: New file.  Likewise.
	* sunrpc/rpc/auth_des.h: New file.  Likewise.
	* sunrpc/rpc/des_crypt.h: New file.  Likewise.
	* sunrpc/rpc/key_prot.h: New file.  Likewise.
	* sunrpc/rpcsvc/key_prot.x: New file.  Likewise.
	* sysdeps/generic/svc_auth.h: Removed.
	* sysdeps/generic/rpc/auth.h: Removed.
	* sysdeps/generic/rpc/auth_des.h: Removed.
	* sysdeps/stub/des_impl.c: New file.  Stub version for DES.
	* sunrpc/Makefile (rpcsvc): Add keyprot.x.
	(headers): Add des_crypt.h and key_prot.h.
	(routines): Add auth_des, authdes_prot, des_crypt, des_impl, des_soft,
	key_call, key_prot, netname, openchild, rtime, svcauth_des, xcrypt.
	(distribute): Add des.h.

	* db2/Makefile: Add all headers and other files to distribute.
	(others): Add db_printlog.

	* sysdeps/mach/hurd/Dist: Add net/* headers.
	* sysdeps/mach/hurd/mips/Dist: New file.
	* sysdeps/powerpc/Dist: Add fe_nomask.c and t_sqrt.c.
	* sysdeps/sparc/Dist: Add sys/trap.h.
	* sysdeps/sparc/sparc32/Dist: Remove sys/trap.h.
	* sysdeps/sparc/sparc32/sparcv8/Dist: New file.
	* sysdeps/unix/sysv/linux/mips/Dist: Add sgidefs.h.
	* sysdeps/unix/sysv/linux/sparc/Dist: Add sys/trap.h.
	* sysdeps/unix/sysv/linux/sparc/sparc32/Dist: Remove sys/trap.h.

	Add previously missing assembler files for PPC.
	* sysdeps/powerpc/add_n.s: New file.
	* sysdeps/powerpc/addmul_1.s: New file.
	* sysdeps/powerpc/lshift.s: New file.
	* sysdeps/powerpc/memset.s: New file.
	* sysdeps/powerpc/mul_1.s: New file.
	* sysdeps/powerpc/rshift.s: New file.
	* sysdeps/powerpc/strchr.s: New file.
	* sysdeps/powerpc/strcmp.s: New file.
	* sysdeps/powerpc/sub_n.s: New file.
	* sysdeps/powerpc/submul_1.s: New file.

1997-08-28 18:42  Thorsten Kukuk  <kukuk@uni-paderborn.de>

	* nis/nis_server.c: Rewritten to fix a lot of bugs.

1997-08-28  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* md5-crypt/Makefile (LDFLAGS-md5crypt.so, libmd5crypt-map): New
	variables.

	in NLSPATH environment variable.  Patch by HJ Lu <hjl@gnu.ai.mit.edu>.
1997-08-29 21:01:47 +00:00

203 lines
4.7 KiB
ArmAsm

# Optimized memset implementation for PowerPC.
# Copyright (C) 1997 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
# modify it under the terms of the GNU Library General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# The GNU C Library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with the GNU C Library; see the file COPYING.LIB. If not,
# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
.section ".text"
.align 5
nop
.globl memset
.type memset,@function
memset:
# __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5]));
# Returns 's'.
# The memset is done in three sizes: byte (8 bits), word (32 bits),
# cache line (256 bits). There is a special case for setting cache lines
# to 0, to take advantage of the dcbz instruction.
# r6: current address we are storing at
# r7: number of bytes we are setting now (when aligning)
# take care of case for size <= 4
cmplwi %cr1,%r5,4
andi. %r7,%r3,3
mr %r6,%r3
ble- %cr1,small
# align to word boundary
cmplwi %cr5,%r5,31
rlwimi %r4,%r4,8,16,23
beq+ aligned # 8th instruction from .align
mtcrf 0x01,%r3
subfic %r7,%r7,4
add %r6,%r6,%r7
sub %r5,%r5,%r7
bf+ 31,0f
stb %r4,0(%r3)
bt 30,aligned
0: sth %r4,-2(%r6) # 16th instruction from .align
# take care of case for size < 31
aligned:
mtcrf 0x01,%r5
rlwimi %r4,%r4,16,0,15
ble %cr5,medium
# align to cache line boundary...
andi. %r7,%r6,0x1C
subfic %r7,%r7,0x20
beq caligned
mtcrf 0x01,%r7
add %r6,%r6,%r7
sub %r5,%r5,%r7
cmplwi %cr1,%r7,0x10
mr %r8,%r6
bf 28,1f
stw %r4,-4(%r8)
stwu %r4,-8(%r8)
1: blt %cr1,2f
stw %r4,-4(%r8) # 32nd instruction from .align
stw %r4,-8(%r8)
stw %r4,-12(%r8)
stwu %r4,-16(%r8)
2: bf 29,caligned
stw %r4,-4(%r8)
# now aligned to a cache line.
caligned:
cmplwi %cr1,%r4,0
clrrwi. %r7,%r5,5
mtcrf 0x01,%r5 # 40th instruction from .align
beq %cr1,zloopstart # special case for clearing memory using dcbz
srwi %r0,%r7,5
mtctr %r0
beq medium # we may not actually get to do a full line
clrlwi. %r5,%r5,27
add %r6,%r6,%r7
0: li %r8,-0x40
bdz cloopdone # 48th instruction from .align
cloop: dcbz %r8,%r6
stw %r4,-4(%r6)
stw %r4,-8(%r6)
stw %r4,-12(%r6)
stw %r4,-16(%r6)
nop # let 601 fetch last 4 instructions of loop
stw %r4,-20(%r6)
stw %r4,-24(%r6) # 56th instruction from .align
nop # let 601 fetch first 8 instructions of loop
stw %r4,-28(%r6)
stwu %r4,-32(%r6)
bdnz cloop
cloopdone:
stw %r4,-4(%r6)
stw %r4,-8(%r6)
stw %r4,-12(%r6)
stw %r4,-16(%r6) # 64th instruction from .align
stw %r4,-20(%r6)
cmplwi %cr1,%r5,16
stw %r4,-24(%r6)
stw %r4,-28(%r6)
stwu %r4,-32(%r6)
beqlr
add %r6,%r6,%r7
b medium_tail2 # 72nd instruction from .align
.align 5
nop
# clear lines of memory in 128-byte chunks.
zloopstart:
clrlwi %r5,%r5,27
mtcrf 0x02,%r7
srwi. %r0,%r7,7
mtctr %r0
li %r7,0x20
li %r8,-0x40
cmplwi %cr1,%r5,16 # 8
bf 26,0f
dcbz 0,%r6
addi %r6,%r6,0x20
0: li %r9,-0x20
bf 25,1f
dcbz 0,%r6
dcbz %r7,%r6
addi %r6,%r6,0x40 # 16
1: cmplwi %cr5,%r5,0
beq medium
zloop:
dcbz 0,%r6
dcbz %r7,%r6
addi %r6,%r6,0x80
dcbz %r8,%r6
dcbz %r9,%r6
bdnz zloop
beqlr %cr5
b medium_tail2
.align 5
small:
# Memset of 4 bytes or less.
cmplwi %cr5,%r5,1
cmplwi %cr1,%r5,3
bltlr %cr5
stb %r4,0(%r6)
beqlr %cr5
nop
stb %r4,1(%r6)
bltlr %cr1
stb %r4,2(%r6)
beqlr %cr1
nop
stb %r4,3(%r6)
blr
# memset of 0-31 bytes
.align 5
medium:
cmplwi %cr1,%r5,16
medium_tail2:
add %r6,%r6,%r5
medium_tail:
bt- 31,medium_31t
bt- 30,medium_30t
medium_30f:
bt- 29,medium_29t
medium_29f:
bge- %cr1,medium_27t
bflr- 28
stw %r4,-4(%r6) # 8th instruction from .align
stw %r4,-8(%r6)
blr
medium_31t:
stbu %r4,-1(%r6)
bf- 30,medium_30f
medium_30t:
sthu %r4,-2(%r6)
bf- 29,medium_29f
medium_29t:
stwu %r4,-4(%r6)
blt- %cr1,medium_27f # 16th instruction from .align
medium_27t:
stw %r4,-4(%r6)
stw %r4,-8(%r6)
stw %r4,-12(%r6)
stwu %r4,-16(%r6)
medium_27f:
bflr- 28
medium_28t:
stw %r4,-4(%r6)
stw %r4,-8(%r6)
blr