提交 083d012a 编写于 作者: R Richard Henderson 提交者: Paolo Bonzini

cutils: Add generic prefetch

There's no real knowledge of the cacheline size,
just prefetching one loop ahead.
Signed-off-by: NRichard Henderson <rth@twiddle.net>
Message-Id: <1472496380-19706-7-git-send-email-rth@twiddle.net>
Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
上级 86444f08
......@@ -38,6 +38,8 @@ static bool NAME(const void *buf, size_t len) \
do { \
const VECTYPE *p = buf; \
VECTYPE t; \
__builtin_prefetch(buf + SIZE); \
barrier(); \
if (SIZE == sizeof(VECTYPE) * 4) { \
t = (p[0] | p[1]) | (p[2] | p[3]); \
} else if (SIZE == sizeof(VECTYPE) * 8) { \
......@@ -219,6 +221,9 @@ bool buffer_is_zero(const void *buf, size_t len)
return true;
}
/* Fetch the beginning of the buffer while we select the accelerator. */
__builtin_prefetch(buf);
/* Use an optimized zero check if possible. Note that this also
includes a check for an unrolled loop over 64-bit integers. */
return select_accel_fn(buf, len);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册