Subject: Re: copystr
To: None <tech-kern@netbsd.org>
From: David Laight <david@l8s.co.uk>
List: tech-kern
Date: 09/03/2002 14:54:50
> This isn't true on all architectures. On NetBSD/arm, for instance, memcpy()
> and memmove() are identical (from sys/lib/libkern/arch/arm/memcpy.S):
>
> ENTRY(memcpy)
> ENTRY_NP(memmove)
>
> Perhaps this should be changed. If nothing else, the ENTRY_NP should come
> first.
It is useful to have a copy that will be don in a 'generally forward'
direction regardless of the addresses.
There is also a bug in the first 2 instructions!
ENTRY(memcpy)
ENTRY_NP(memmove)
/* Determine copy direction */
cmp r1, r0
moveq r0, #0 /* Quick abort for len=0 */
#ifdef __APCS_26__
moveqs pc, lr
#else
moveq pc, lr
#endif
Surely the 'moveq r0,#0' should be 'cmpne r2,#0' ?
At the moment the return value of memcpy(x,x,n) is 0 instead of x.
I almost wonder if the 'zero length' optimisation is worth
the 2 instructions in the 'normal' path.
Certainly the src == dest optimisation is doubtful?
David
--
David Laight: david@l8s.co.uk