X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fmips-arch.h;h=4ac1b787b3e28f4f9c51d039103734812e6ed81f;hb=dd54f9e004a0a83d1328e94648f48dcc27e0be5b;hp=ee04c3e78f0c99ff8b97866dc6bdb494da4fd96d;hpb=5e2b057871cf47c795c75106899f5fb05dc3397e;p=sbcl.git diff --git a/src/runtime/mips-arch.h b/src/runtime/mips-arch.h index ee04c3e..4ac1b78 100644 --- a/src/runtime/mips-arch.h +++ b/src/runtime/mips-arch.h @@ -2,7 +2,7 @@ #define _MIPS_ARCH_H -static inline void +static inline void get_spinlock(volatile lispobj *word, long value) { #ifdef LISP_FEATURE_SB_THREAD @@ -11,28 +11,28 @@ get_spinlock(volatile lispobj *word, long value) 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 @@ -41,7 +41,23 @@ get_spinlock(volatile lispobj *word, long value) 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 */