diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h
index 16457507a512a8cdc28e31e759d62c31ad468c27..c7dd885fbfe5ee73cec405d1fd89ce7b08ad369a 100644
--- a/src/include/storage/s_lock.h
+++ b/src/include/storage/s_lock.h
@@ -63,7 +63,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- *	  $Id: s_lock.h,v 1.102 2002/11/10 00:33:43 momjian Exp $
+ *	  $Id: s_lock.h,v 1.103 2002/11/22 01:13:16 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -150,7 +150,8 @@ tas(volatile slock_t *lock)
 
 #endif	 /* __arm__ */
 
-#if defined(__s390__) || defined(__s390x__)
+
+#if defined(__s390__) && !defined(__s390x__)
 /*
  * S/390 Linux
  */
@@ -176,6 +177,32 @@ tas(volatile slock_t *lock)
 
 #endif	 /* __s390__ */
 
+#if defined(__s390x__)
+/*
+ * S/390x Linux (64-bit zSeries)
+ */
+#define TAS(lock)	   tas(lock)
+
+static __inline__ int
+tas(volatile slock_t *lock)
+{
+	int			_res;
+
+	__asm__	__volatile__(
+		"	la	1,1			\n"
+		"	lg 	2,%2		\n"
+		"	slr 0,0			\n"
+		"	cs 	0,1,0(2)	\n"
+		"	lr 	%1,0		\n"
+:		"=m"(lock), "=d"(_res)
+:		"m"(lock)
+:		"0", "1", "2");
+
+	return (_res);
+}
+
+#endif	 /* __s390x__ */
+
 
 #if defined(__sparc__)
 #define TAS(lock) tas(lock)