summaryrefslogtreecommitdiffstats
path: root/sys/mips/include
diff options
context:
space:
mode:
authorneel <neel@FreeBSD.org>2010-03-26 07:15:27 +0000
committerneel <neel@FreeBSD.org>2010-03-26 07:15:27 +0000
commit8457716f882f5feb02c818b7480432bdc5e46216 (patch)
treeca7b23c478605565ef78ca96a965cd23514ce80d /sys/mips/include
parent2652efe7b0c81df25b08709ff0955eae669c0556 (diff)
downloadFreeBSD-src-8457716f882f5feb02c818b7480432bdc5e46216.zip
FreeBSD-src-8457716f882f5feb02c818b7480432bdc5e46216.tar.gz
Replace sb_store64()/sb_load64() with mips3_sd()/mips3_ld() respectively.
Obtained from NetBSD. Suggested by: jmallett@
Diffstat (limited to 'sys/mips/include')
-rw-r--r--sys/mips/include/cpufunc.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/sys/mips/include/cpufunc.h b/sys/mips/include/cpufunc.h
index d4ca0f1..f9100ea 100644
--- a/sys/mips/include/cpufunc.h
+++ b/sys/mips/include/cpufunc.h
@@ -283,6 +283,35 @@ breakpoint(void)
__asm __volatile ("break");
}
+#if defined(__GNUC__) && !defined(__mips_o32)
+static inline uint64_t
+mips3_ld(const volatile uint64_t *va)
+{
+ uint64_t rv;
+
+#if defined(_LP64)
+ rv = *va;
+#else
+ __asm volatile("ld %0,0(%1)" : "=d"(rv) : "r"(va));
+#endif
+
+ return (rv);
+}
+
+static inline void
+mips3_sd(volatile uint64_t *va, uint64_t v)
+{
+#if defined(_LP64)
+ *va = v;
+#else
+ __asm volatile("sd %0,0(%1)" :: "r"(v), "r"(va));
+#endif
+}
+#else
+uint64_t mips3_ld(volatile uint64_t *va);
+void mips3_sd(volatile uint64_t *, uint64_t);
+#endif /* __GNUC__ */
+
#endif /* _KERNEL */
#define readb(va) (*(volatile uint8_t *) (va))
OpenPOWER on IntegriCloud