aboutsummaryrefslogtreecommitdiff
path: root/util/bufferiszero.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/bufferiszero.c')
-rw-r--r--util/bufferiszero.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/util/bufferiszero.c b/util/bufferiszero.c
index bafd3d159c..abe65f9d88 100644
--- a/util/bufferiszero.c
+++ b/util/bufferiszero.c
@@ -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);