mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
800d775e42
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>.
203 lines
4.7 KiB
ArmAsm
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
|