diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index a8409143c1e1d16070f538cd70de55e3d324bfeb..182fef1cab35022f291a42b3ac7140322654cd4f 100644
--- a/boehm-gc/ChangeLog
+++ b/boehm-gc/ChangeLog
@@ -1,3 +1,9 @@
+2004-04-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* include/private/gcconfig.h (PREFETCH): Use __builtin_prefetch
+	for gcc >= 3.0.
+	(PREFETCH_FOR_WRITE): Likewise.
+
 2004-03-10  Kelley Cook  <kcook@gcc.gnu.org>
 
 	* configure.ac: Bump AC_PREREQ to 2.59.
diff --git a/boehm-gc/include/private/gcconfig.h b/boehm-gc/include/private/gcconfig.h
index a13ad2ef835fb3bc334f17418b21825a2ee9b3e2..32b6e482cfe95bac6b9912919c6729dfaccaca1f 100644
--- a/boehm-gc/include/private/gcconfig.h
+++ b/boehm-gc/include/private/gcconfig.h
@@ -1801,10 +1801,10 @@
 	     extern int etext[];
 #            define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
 #       endif
-#	define PREFETCH(x) \
-	  __asm__ __volatile__ ("	prefetch	%0": : "m"(*(char *)(x)))
-#	define PREFETCH_FOR_WRITE(x) \
-	  __asm__ __volatile__ ("	prefetchw	%0": : "m"(*(char *)(x)))
+#	if defined(__GNUC__) && __GNUC__ >= 3
+#	    define PREFETCH(x) __builtin_prefetch ((x), 0, 0)
+#	    define PREFETCH_FOR_WRITE(x) __builtin_prefetch ((x), 1)
+#	endif
 #   endif
 # endif