#define _MIPS_ARCH_H
-static inline void
+static inline void
get_spinlock(volatile lispobj *word, long value)
{
#ifdef LISP_FEATURE_SB_THREAD
int __cmp;
__asm__ __volatile__ (
- " .set push\n"
- " .set mips2\n"
- " .set noreorder\n"
- "1: ll %[__prev],%[__mem]\n"
- " bne %[__prev],%[__old],2f\n"
- " li %[__cmp],0\n"
- " move %[__cmp],%[__new]\n"
- " sc %[__cmp],%[__mem]\n"
- " beqz %[__cmp],1b\n"
- " nop\n"
- " sync\n"
- "2:\n"
- " .set pop"
- : [__prev] "=&r" (__prev),
- [__cmp] "=&r" (__cmp)
- : [__mem] "R" (*word),
- [__old] "r" (__old),
- [__new] "r" (value)
- : "memory");
+ " .set push\n"
+ " .set mips2\n"
+ " .set noreorder\n"
+ "1: ll %[__prev],%[__mem]\n"
+ " bne %[__prev],%[__old],2f\n"
+ " li %[__cmp],0\n"
+ " move %[__cmp],%[__new]\n"
+ " sc %[__cmp],%[__mem]\n"
+ " beqz %[__cmp],1b\n"
+ " nop\n"
+ " sync\n"
+ "2:\n"
+ " .set pop"
+ : [__prev] "=&r" (__prev),
+ [__cmp] "=&r" (__cmp)
+ : [__mem] "R" (*word),
+ [__old] "r" (__old),
+ [__new] "r" (value)
+ : "memory");
- if (!cmp)
- lose("recursive get_spinlock: 0x%x,%d\n", word, value);
+ if (!cmp)
+ lose("recursive get_spinlock: 0x%x,%d\n", word, value);
#else /* LISP_FEATURE_SB_THREAD */
*word=value;
#endif
static inline void
release_spinlock(volatile lispobj *word)
{
+#ifdef LISP_FEATURE_SB_THREAD
+ __asm__ __volatile__ (
+ " .set push\n"
+ " .set mips2\n"
+ " .set noreorder\n"
+ " sw $0,%[__mem]\n"
+ " sync\n"
+ " .set pop"
+ :
+ : [__mem] "R" (*word)
+ : "memory");
+#else /* LISP_FEATURE_SB_THREAD */
*word=0;
+#endif
}
+unsigned int arch_get_fp_control(void);
+void arch_set_fp_control(unsigned int fp);
+
#endif /* _MIPS_ARCH_H */