diff options
author | neel <neel@FreeBSD.org> | 2010-03-26 07:15:27 +0000 |
---|---|---|
committer | neel <neel@FreeBSD.org> | 2010-03-26 07:15:27 +0000 |
commit | 8457716f882f5feb02c818b7480432bdc5e46216 (patch) | |
tree | ca7b23c478605565ef78ca96a965cd23514ce80d /sys/mips/include | |
parent | 2652efe7b0c81df25b08709ff0955eae669c0556 (diff) | |
download | FreeBSD-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.h | 29 |
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)) |