optimized C memset
authorRich Felker <dalias@aerifal.cx>
Tue, 27 Aug 2013 22:08:29 +0000 (18:08 -0400)
committerRich Felker <dalias@aerifal.cx>
Tue, 27 Aug 2013 22:08:29 +0000 (18:08 -0400)
commita543369e3b06a51eacd392c738fc10c5267a195f
tree7f7b59c2a45d22ad4a3e66774dcc547ae45b06ac
parent06ceee8ca34999c5c35e5dfb85133d4b35c9689b
optimized C memset

this version of memset is optimized both for small and large values of
n, and makes no misaligned writes, so it is usable (and near-optimal)
on all archs. it is capable of filling up to 52 or 56 bytes without
entering a loop and with at most 7 branches, all of which can be fully
predicted if memset is called multiple times with the same size.

it also uses the attribute extension to inform the compiler that it is
violating the aliasing rules, unlike the previous code which simply
assumed it was safe to violate the aliasing rules since translation
unit boundaries hide the violations from the compiler. for non-GNUC
compilers, 100% portable fallback code in the form of a naive loop is
provided. I intend to eventually apply this approach to all of the
string/memory functions which are doing word-at-a-time accesses.
src/string/memset.c