mirror of
https://github.com/qemu/qemu.git
synced 2024-11-28 14:24:02 +08:00
cutils: Add generic prefetch
There's no real knowledge of the cacheline size, just prefetching one loop ahead. Signed-off-by: Richard Henderson <rth@twiddle.net> Message-Id: <1472496380-19706-7-git-send-email-rth@twiddle.net> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
86444f084b
commit
083d012a38
@ -38,6 +38,8 @@ static bool NAME(const void *buf, size_t len) \
|
|||||||
do { \
|
do { \
|
||||||
const VECTYPE *p = buf; \
|
const VECTYPE *p = buf; \
|
||||||
VECTYPE t; \
|
VECTYPE t; \
|
||||||
|
__builtin_prefetch(buf + SIZE); \
|
||||||
|
barrier(); \
|
||||||
if (SIZE == sizeof(VECTYPE) * 4) { \
|
if (SIZE == sizeof(VECTYPE) * 4) { \
|
||||||
t = (p[0] | p[1]) | (p[2] | p[3]); \
|
t = (p[0] | p[1]) | (p[2] | p[3]); \
|
||||||
} else if (SIZE == sizeof(VECTYPE) * 8) { \
|
} else if (SIZE == sizeof(VECTYPE) * 8) { \
|
||||||
@ -219,6 +221,9 @@ bool buffer_is_zero(const void *buf, size_t len)
|
|||||||
return true;
|
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
|
/* Use an optimized zero check if possible. Note that this also
|
||||||
includes a check for an unrolled loop over 64-bit integers. */
|
includes a check for an unrolled loop over 64-bit integers. */
|
||||||
return select_accel_fn(buf, len);
|
return select_accel_fn(buf, len);
|
||||||
|
Loading…
Reference in New Issue
Block a user