diff options
author | Wilco Dijkstra <wdijkstr@arm.com> | 2015-02-27 14:41:46 +0000 |
---|---|---|
committer | Wilco Dijkstra <wdijkstr@arm.com> | 2015-02-27 14:41:46 +0000 |
commit | ddcf6798d35beca3c4eec80ea448b57fd45558f4 (patch) | |
tree | ef2d72b01b83d428669e2d37f871b42d7878e4a0 | |
parent | 49f476f4791ea6974a7f67bdc3251ab03822c2aa (diff) | |
download | glibc-ddcf6798d35beca3c4eec80ea448b57fd45558f4.tar.gz glibc-ddcf6798d35beca3c4eec80ea448b57fd45558f4.tar.xz glibc-ddcf6798d35beca3c4eec80ea448b57fd45558f4.zip |
Rather than using a C implementation of memset, directly call memset, which
typically has a much faster optimized implementation.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | string/bzero.c | 57 |
2 files changed, 6 insertions, 55 deletions
diff --git a/ChangeLog b/ChangeLog index 3b5caa532b..6eb5290fdb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-02-27 Wilco Dijkstra wdijkstr@arm.com + + * string/bzero.c (__bzero): Call memset for performance. + 2015-02-27 John David Anglin <dave.anglin@bell.net> * sysdeps/unix/sysv/linux/hppa/bits/fcntl.h (__O_SYNC): Change diff --git a/string/bzero.c b/string/bzero.c index a0e738e2a1..43e2b38780 100644 --- a/string/bzero.c +++ b/string/bzero.c @@ -17,66 +17,13 @@ <http://www.gnu.org/licenses/>. */ #include <string.h> -#include <memcopy.h> #undef __bzero /* Set N bytes of S to 0. */ void -__bzero (s, len) - void *s; - size_t len; +__bzero (void *s, size_t len) { - long int dstp = (long int) s; - const op_t zero = 0; - - if (len >= 8) - { - size_t xlen; - - /* There are at least some bytes to zero. No need to test - for LEN == 0 in this alignment loop. */ - while (dstp % OPSIZ != 0) - { - ((byte *) dstp)[0] = 0; - dstp += 1; - len -= 1; - } - - /* Write 8 op_t per iteration until less than 8 op_t remain. */ - xlen = len / (OPSIZ * 8); - while (xlen != 0) - { - ((op_t *) dstp)[0] = zero; - ((op_t *) dstp)[1] = zero; - ((op_t *) dstp)[2] = zero; - ((op_t *) dstp)[3] = zero; - ((op_t *) dstp)[4] = zero; - ((op_t *) dstp)[5] = zero; - ((op_t *) dstp)[6] = zero; - ((op_t *) dstp)[7] = zero; - dstp += 8 * OPSIZ; - xlen -= 1; - } - len %= OPSIZ * 8; - - /* Write 1 op_t per iteration until less than op_t remain. */ - xlen = len / OPSIZ; - while (xlen != 0) - { - ((op_t *) dstp)[0] = zero; - dstp += OPSIZ; - xlen -= 1; - } - len %= OPSIZ; - } - - /* Write the last few bytes. */ - while (len != 0) - { - ((byte *) dstp)[0] = 0; - dstp += 1; - len -= 1; - } + memset (s, '\0', len); } weak_alias (__bzero, bzero) |