Author: mjg
Date: Fri Sep  8 20:09:14 2017
New Revision: 323329
URL: https://svnweb.freebsd.org/changeset/base/323329

Log:
  Allow __builtin_memset instead of bzero for small buffers of known size
  
  In particular this eliminates function calls and related register save/restore
  when only few writes would suffice.
  
  Example speed up can be seen in a fstat microbenchmark on AMD Ryzen cpus, 
where
  the throughput went up by ~4.5%.
  
  Thanks to cem@ for benchmarking and reviewing the patch.
  
  MFC after:    1 week

Modified:
  head/sys/sys/systm.h

Modified: head/sys/sys/systm.h
==============================================================================
--- head/sys/sys/systm.h        Fri Sep  8 20:07:53 2017        (r323328)
+++ head/sys/sys/systm.h        Fri Sep  8 20:09:14 2017        (r323329)
@@ -258,6 +258,12 @@ void       hexdump(const void *ptr, int length, const char 
*
 #define ovbcopy(f, t, l) bcopy((f), (t), (l))
 void   bcopy(const void * _Nonnull from, void * _Nonnull to, size_t len);
 void   bzero(void * _Nonnull buf, size_t len);
+#define bzero(buf, len) ({                             \
+       if (__builtin_constant_p(len) && (len) <= 64)   \
+               __builtin_memset((buf), 0, (len));      \
+       else                                            \
+               bzero((buf), (len));                    \
+})
 void   explicit_bzero(void * _Nonnull, size_t);
 
 void   *memcpy(void * _Nonnull to, const void * _Nonnull from, size_t len);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to