diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h
index 1fa644cb09374cb63693e033f8bad29a9566297e..49bb9f64c210e4a5e06c567f95233442b90b57f6 100644
--- a/src/include/storage/s_lock.h
+++ b/src/include/storage/s_lock.h
@@ -66,7 +66,7 @@
  * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- *	  $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.133 2004/12/31 22:03:42 pgsql Exp $
+ *	  $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.134 2005/03/10 21:41:01 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -168,7 +168,7 @@ spin_delay(void)
 #endif	 /* __i386__ || __x86_64__ */
 
 
-#if defined(__ia64__) || defined(__ia64)  /* __ia64 used by ICC compiler? */
+#if defined(__ia64__) || defined(__ia64)
 /* Intel Itanium */
 #define HAS_TEST_AND_SET
 
@@ -176,6 +176,8 @@ typedef unsigned int slock_t;
 
 #define TAS(lock) tas(lock)
 
+#ifndef __INTEL_COMPILER
+
 static __inline__ int
 tas(volatile slock_t *lock)
 {
@@ -189,6 +191,19 @@ tas(volatile slock_t *lock)
 	return (int) ret;
 }
 
+#else
+
+static __inline__ int
+tas(volatile slock_t *lock)
+{
+	int		ret;
+
+	ret = _InterlockedExchange(lock,1);	/* this is a xchg asm macro */
+
+	return ret;
+}
+
+#endif
 #endif	 /* __ia64__ || __ia64 */