static inline void prefetch_range(void *addr, size_t len) { char *cp; char *end = addr + len; if (__builtin_constant_p(len) && (len <= 5*PREFETCH_STRIDE)) { if (len <= PREFETCH_STRIDE) prefetch(cp); else if (len <= 2*PREFETCH_STRIDE) { prefetch(cp); prefetch(cp + PREFETCH_STRIDE); } else if (len <= 3*PREFETCH_STRIDE) { prefetch(cp); prefetch(cp + PREFETCH_STRIDE); prefetch(cp + 2*PREFETCH_STRIDE); } else if (len <= 4*PREFETCH_STRIDE) { prefetch(cp); prefetch(cp + PREFETCH_STRIDE); prefetch(cp + 2*PREFETCH_STRIDE); prefetch(cp + 3*PREFETCH_STRIDE); } else if (len <= 5*PREFETCH_STRIDE) { prefetch(cp); prefetch(cp + PREFETCH_STRIDE); prefetch(cp + 2*PREFETCH_STRIDE); prefetch(cp + 3*PREFETCH_STRIDE); prefetch(cp + 4*PREFETCH_STRIDE); } } else for (; cp < end; cp += PREFETCH_STRIDE) prefetch(cp); }