Module Name: src
Committed By: nakayama
Date: Fri Dec 4 17:31:06 UTC 2009
Modified Files:
src/sys/arch/sparc64/include: psl.h
Log Message:
Bring together similar definitions of inline functions manipulating
privileged registers using macro. no functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.42 -r1.43 src/sys/arch/sparc64/include/psl.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/sparc64/include/psl.h
diff -u src/sys/arch/sparc64/include/psl.h:1.42 src/sys/arch/sparc64/include/psl.h:1.43
--- src/sys/arch/sparc64/include/psl.h:1.42 Wed Nov 25 14:28:50 2009
+++ src/sys/arch/sparc64/include/psl.h Fri Dec 4 17:31:06 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: psl.h,v 1.42 2009/11/25 14:28:50 rmind Exp $ */
+/* $NetBSD: psl.h,v 1.43 2009/12/04 17:31:06 nakayama Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -251,92 +251,58 @@
/*
* Inlines for manipulating privileged registers
*/
-static __inline uint64_t
-gettick(void)
-{
-#ifdef __arch64__
- uint64_t tick;
-
- __asm volatile("rdpr %%tick, %0" : "=r" (tick));
- return tick;
-#else
- uint32_t tick_hi, tick_lo;
-
- __asm volatile("rdpr %%tick, %0; srl %0,0,%1; srlx %0,32,%0"
- : "=r" (tick_hi), "=r" (tick_lo));
- return ((uint64_t)tick_hi << 32) | tick_lo;
-#endif
+#define SPARC64_GETPR_DEF(pr, type) \
+static __inline type get##pr(void) \
+{ \
+ type pr; \
+ __asm volatile("rdpr %%" #pr ",%0" : "=r" (pr)); \
+ return pr; \
+}
+#define SPARC64_SETPR_DEF(pr, type) \
+static __inline void set##pr(type pr) \
+{ \
+ __asm volatile("wrpr %0,0,%%" #pr : : "r" (pr) : "memory"); \
}
-static __inline void
-settick(uint64_t newtick)
-{
#ifdef __arch64__
- __asm volatile("wrpr %0, 0, %%tick" : : "r" (newtick) : "memory");
+#define SPARC64_GETPR64_DEF(pr) SPARC64_GETPR_DEF(pr, uint64_t)
+#define SPARC64_SETPR64_DEF(pr) SPARC64_SETPR_DEF(pr, uint64_t)
#else
- uint32_t tick_hi = newtick >> 32, tick_lo = newtick;
-
- __asm volatile("sllx %1,32,%0; or %0,%2,%0; wrpr %0, 0, %%tick"
- : "=&r" (tick_hi) /* scratch register */
- : "r" (tick_hi), "r" (tick_lo) : "memory");
-#endif
+#define SPARC64_GETPR64_DEF(pr) \
+static __inline uint64_t get##pr(void) \
+{ \
+ uint32_t _hi, _lo; \
+ __asm volatile("rdpr %%" #pr ",%0; srl %0,0,%1; srlx %0,32,%0" \
+ : "=r" (_hi), "=r" (_lo)); \
+ return ((uint64_t)_hi << 32) | _lo; \
+}
+#define SPARC64_SETPR64_DEF(pr) \
+static __inline void set##pr(uint64_t pr) \
+{ \
+ uint32_t _hi = pr >> 32, _lo = pr; \
+ __asm volatile("sllx %1,32,%0; or %0,%2,%0; wrpr %0,0,%%" #pr \
+ : "=&r" (_hi) /* scratch register */ \
+ : "r" (_hi), "r" (_lo) : "memory"); \
}
+#endif
-static __inline int
-getpstate(void)
-{
- int pstate;
-
- __asm volatile("rdpr %%pstate,%0" : "=r" (pstate));
- return pstate;
-}
-
-static __inline void
-setpstate(int newpstate)
-{
- __asm volatile("wrpr %0,0,%%pstate" : : "r" (newpstate) : "memory");
-}
-
-static __inline int
-gettl(void)
-{
- int tl;
-
- __asm volatile("rdpr %%tl, %0" : "=r" (tl));
- return tl;
-}
-
-static __inline int
-getcwp(void)
-{
- int cwp;
-
- __asm volatile("rdpr %%cwp,%0" : "=r" (cwp));
- return cwp;
-}
-
-static __inline void
-setcwp(int newcwp)
-{
- __asm volatile("wrpr %0,0,%%cwp" : : "r" (newcwp) : "memory");
-}
-
-static __inline uint64_t
-getver(void)
-{
-#ifdef __arch64__
- uint64_t ver;
-
- __asm volatile("rdpr %%ver,%0" : "=r" (ver));
- return ver;
-#else
- uint32_t ver_hi, ver_lo;
+/* Tick Register (PR 4) */
+SPARC64_GETPR64_DEF(tick)
+SPARC64_SETPR64_DEF(tick)
+
+/* Processor State Register (PR 6) */
+SPARC64_GETPR_DEF(pstate, int)
+SPARC64_SETPR_DEF(pstate, int)
+
+/* Trap Level Register (PR 7) */
+SPARC64_GETPR_DEF(tl, int)
+
+/* Current Window Pointer Register (PR 9) */
+SPARC64_GETPR_DEF(cwp, int)
+SPARC64_SETPR_DEF(cwp, int)
- __asm volatile("rdpr %%ver,%0; srl %0,0,%1; srlx %0,32,%0"
- : "=r" (ver_hi), "=r" (ver_lo));
- return (uint64_t)ver_hi << 32 | ver_lo;
-#endif
-}
+/* Version Register (PR 31) */
+SPARC64_GETPR64_DEF(ver)
static __inline int
intr_disable(void)
@@ -419,7 +385,7 @@
ipl_t _ipl;
} ipl_cookie_t;
-static inline ipl_cookie_t
+static __inline ipl_cookie_t
makeiplcookie(ipl_t ipl)
{