+ * architecture-abstracting patches for CSR's SPARC port. -- WHN
+ * 2002-02-15) */
+
+#ifdef LISP_FEATURE_SB_THREAD
+
+extern never_returns lose(char *fmt, ...);
+
+static inline void
+get_spinlock(volatile lispobj *word,int value)
+{
+ u32 eax=0;
+ if(*word==value)
+ lose("recursive get_spinlock: 0x%x,%d\n",word,value);
+ do {
+ asm ("xor %0,%0\n\
+ lock cmpxchg %1,%2"
+ : "=a" (eax)
+ : "r" (value), "m" (*word)
+ : "memory", "cc");
+ } while(eax!=0);
+}
+
+static inline void
+release_spinlock(volatile lispobj *word)
+{
+ *word=0;
+}
+
+#else
+
+static inline void
+get_spinlock(lispobj *word, int value)
+{
+ *word = value;
+}
+
+static inline void
+release_spinlock(lispobj *word) {
+ *word = 0;
+}