svn commit: r213326 - head/lib/libc/i386/string

Xin LI delphij at delphij.net
Fri Oct 1 21:47:05 UTC 2010


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

On 2010/10/01 06:22, Roman Divacky wrote:
> On Fri, Oct 01, 2010 at 01:10:11PM +0000, Jilles Tjoelker wrote:
>> Author: jilles
>> Date: Fri Oct  1 13:10:11 2010
>> New Revision: 213326
>> URL: http://svn.freebsd.org/changeset/base/213326
>>
>> Log:
>>   libc: Remove the i386 assembler version of strlen(3).
>>   
>>   On anything modern, the C version, which processes a word at a time, is much
>>   faster. The Intel optimization manual explicitly warns against using REP
>>   prefixes with SCAS or CMPS, which is exactly what the assembler version
>>   does.
> 
> there's "rep cmps" in bcmp.S and memcmp.S in both amd64/i386
> 
> they both have C counterparts, no idea how fast those are (they
> are going char by char).

char by char will be slower than word-by-word in both aligned and
unaligned case.  There are some other factors like inline expanding,
etc. which also affects their speed and require careful tuning.

> does this wisdom apply to those too?

I'm not quite sure about bcmp() and memcmp() case, especially when the
two pointers are not aligned (say, (p1 & (sizeof(word)-1)) != (p2 &
(sizeof(word)-1))).  Branching for different aligning cases MAY give
better performance, BUT they can also hurt due to the added complexity,
so if we want to do it in a MI way we will need to benchmark.

===

By the way I have a memchr(3) implementation using the similar algorithm
strlen(3) uses, and microbenchmark shows a 2x to 3x improvement but it's
still in my queue and needs to do real-world testing.

Cheers,
- -- 
Xin LI <delphij at delphij.net>	http://www.delphij.net/
FreeBSD - The Power to Serve!	       Live free or die
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.16 (FreeBSD)

iQEcBAEBCAAGBQJMplbNAAoJEATO+BI/yjfBgWwH/2MSNvH0QNhEcyhKBU/Pzh8C
862myDjcxA4l1+ca2en9igPgWno+ZMUaiH4Td5qCBdX8tsFLlGCgC0o0a0HC51+7
mv8qTfWrYAFcU2NrmX8wsnprLijmS2NH3wBC0uJJXpJhmJUraTHbG9YcctIUe363
Yvy+d7HqraPvCShWEgj54V5q/vPPy5vT6gPFwhMpe0J9/gmSMwwxCF1RctE2K/Br
89TWb/g4vrFJCk3Ks3j8viJJN2Zd9sbBYeF/LBnMLPkVSJNCnw0j1gSs+uFbfgzw
Gv5WMNNpDu338dFMVJDddgxqWa+OW1oMgtHcLUmoxMQI87sir+NJQFBD6+EK22I=
=2+Hh
-----END PGP SIGNATURE-----


More information about the svn-src-all mailing list