diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h
index 8d8155d65f..4bf1445d23 100644
--- a/src/include/storage/s_lock.h
+++ b/src/include/storage/s_lock.h
@@ -66,7 +66,7 @@
  * Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- *	  $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.129 2004/09/02 17:10:58 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.130 2004/09/24 00:21:29 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -658,6 +658,18 @@ typedef unsigned char slock_t;
 #endif
 
 
+/* out-of-line assembler from src/backend/port/tas/*.s */
+
+#if defined(__sun) && defined(__i386)
+/*
+ * Solaris/386 (we only get here for non-gcc case)
+ */
+#define HAS_TEST_AND_SET
+
+typedef unsigned char slock_t;
+#endif
+
+
 #endif	/* !defined(HAS_TEST_AND_SET) */
 
 
diff --git a/src/template/solaris b/src/template/solaris
index f2e7aaa047..4b6d9cdb58 100644
--- a/src/template/solaris
+++ b/src/template/solaris
@@ -3,10 +3,21 @@ if test "$GCC" != yes ; then
   CFLAGS="-O -v"		# -v is like gcc -Wall
 fi
 
-# Pick right test-and-set (TAS) code.
+# Pick right test-and-set (TAS) code.  We need out-of-line assembler
+# when not using gcc.
 case $host in
-  sparc-*-solaris*)  need_tas=yes; tas_file=solaris_sparc.s ;;
-  i?86-*-solaris*)   need_tas=yes; tas_file=solaris_i386.s ;;
+  sparc-*-solaris*)
+	if test "$GCC" != yes ; then
+		need_tas=yes
+		tas_file=solaris_sparc.s
+	fi
+    ;;
+  i?86-*-solaris*)
+	if test "$GCC" != yes ; then
+		need_tas=yes
+		tas_file=solaris_i386.s
+	fi
+    ;;
 esac
 
 # -D_POSIX_PTHREAD_SEMANTICS enables 5-arg getpwuid_r, among other things