diff --git a/src/backend/storage/ipc/s_lock.c b/src/backend/storage/ipc/s_lock.c
index 75dd8dcc83a6483554c86febd951e958ec819208..449b34d12c72cd993dc909a8bd6fef60577ac4be 100644
--- a/src/backend/storage/ipc/s_lock.c
+++ b/src/backend/storage/ipc/s_lock.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/storage/ipc/Attic/s_lock.c,v 1.13 1997/04/24 02:35:35 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/storage/ipc/Attic/s_lock.c,v 1.14 1997/06/06 01:37:14 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -486,4 +486,40 @@ S_INIT_LOCK(slock_t *lock)
 
 #endif /* defined(linux) && defined(sparc) */
 
+#if defined(NEED_NS32K_TAS_ASM)
+
+int
+tas(slock_t *m)
+{
+    slock_t res = 0;
+    __asm__("movd 8(fp), r1");
+    __asm__("movqd 0, r0");
+    __asm__("sbitd r0, 0(r1)");
+    __asm__("sprb us, %0" : "=r" (res));
+    res =  (res >> 5) & 1;
+    return res;
+}
+
+void
+S_LOCK(slock_t *lock)
+{
+    while (tas(lock))
+	;
+}
+
+void
+S_UNLOCK(slock_t *lock)
+{
+    *lock = 0;
+}
+
+void
+S_INIT_LOCK(slock_t *lock)
+{
+    S_UNLOCK(lock);
+}
+
+#endif /* NEED_NS32K_TAS_ASM */
+
+
 #endif /* HAS_TEST_AND_SET */
diff --git a/src/include/port/BSD44_derived.h b/src/include/port/BSD44_derived.h
index 4d11f20e90b2519556b5345b0ee81a88c4e4bd68..e89c0094170c9d97e04f499ed0011be04e8e25f3 100644
--- a/src/include/port/BSD44_derived.h
+++ b/src/include/port/BSD44_derived.h
@@ -5,6 +5,9 @@
 #  if defined(sparc)
 #    define NEED_SPARC_TAS_ASM
 #  endif
+#  if defined(ns32k)
+#    define NEED_NS32k_TAS_ASM
+#  endif
 #  define HAS_TEST_AND_SET
 #  if defined(__mips__)
 /* #    undef HAS_TEST_AND_SET */