Hallo,

Since there were some issues with the x86-64 prefetch I decided
to switch the standard prefetch over to gcc's __builtin_prefetch.
Since gcc supports this on all architectures I did that change
for everybody: if you don't define a ARCH_HAS_PREFETCH it will
use __builtin_prefetch(x) and the same with ARCH_HAS_PREFETCHW.

If you know of any problems with the __builtin_prefetch
(e.g. gcc miscompiling it) please complain now. The right fix
would be then to define a ARCH_HAS_PREFETCH{,w}

-Andi

Use __builtin_prefetch 

gcc 3.2+ supports __builtin_prefetch, so it's possible to use it on all 
architectures.
Change the generic fallback in linux/prefetch.h to use it instead of noping it 
out.
gcc should do the right thing when the architecture doesn't support prefetching

Undefine the x86-64 inline assembler version and use the fallback.

Signed-off-by: Andi Kleen <[EMAIL PROTECTED]>

Index: linux/include/asm-x86_64/processor.h
===================================================================
--- linux.orig/include/asm-x86_64/processor.h
+++ linux/include/asm-x86_64/processor.h
@@ -368,12 +368,6 @@ static inline void sync_core(void)
        asm volatile("cpuid" : "=a" (tmp) : "0" (1) : 
"ebx","ecx","edx","memory");
 } 
 
-#define ARCH_HAS_PREFETCH
-static inline void prefetch(void *x) 
-{ 
-       asm volatile("prefetcht0 %0" :: "m" (*(unsigned long *)x));
-} 
-
 #define ARCH_HAS_PREFETCHW 1
 static inline void prefetchw(void *x) 
 { 
Index: linux/include/linux/prefetch.h
===================================================================
--- linux.orig/include/linux/prefetch.h
+++ linux/include/linux/prefetch.h
@@ -34,17 +34,12 @@
        
 */
 
-/*
- *     These cannot be do{}while(0) macros. See the mental gymnastics in
- *     the loop macro.
- */
- 
 #ifndef ARCH_HAS_PREFETCH
-static inline void prefetch(const void *x) {;}
+#define prefetch(x) __builtin_prefetch(x) 
 #endif
 
 #ifndef ARCH_HAS_PREFETCHW
-static inline void prefetchw(const void *x) {;}
+#define prefetchw(x) __builtin_prefetch(x,1)
 #endif
 
 #ifndef ARCH_HAS_SPINLOCK_PREFETCH
-
To unsubscribe from this list: send the line "unsubscribe linux-arch" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to