Module Name: src
Committed By: nakayama
Date: Fri Apr 5 12:16:13 UTC 2019
Modified Files:
src/sys/arch/sparc64/include: ctlreg.h
Log Message:
Add dummy constraints to avoid excessive optimization in clang.
GENERIC kernel compiled with clang now boot at least on my Fire V100.
To generate a diff of this commit:
cvs rdiff -u -r1.64 -r1.65 src/sys/arch/sparc64/include/ctlreg.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/ctlreg.h
diff -u src/sys/arch/sparc64/include/ctlreg.h:1.64 src/sys/arch/sparc64/include/ctlreg.h:1.65
--- src/sys/arch/sparc64/include/ctlreg.h:1.64 Wed Dec 28 19:16:25 2016
+++ src/sys/arch/sparc64/include/ctlreg.h Fri Apr 5 12:16:13 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: ctlreg.h,v 1.64 2016/12/28 19:16:25 martin Exp $ */
+/* $NetBSD: ctlreg.h,v 1.65 2019/04/05 12:16:13 nakayama Exp $ */
/*
* Copyright (c) 1996-2002 Eduardo Horvath
@@ -485,12 +485,13 @@
#ifdef __arch64__
/* 64-bit kernel, non-constant */
-#define SPARC64_LD_NONCONST(ld) \
+#define SPARC64_LD_NONCONST(ld, type) \
__asm volatile( \
"wr %2,%%g0,%%asi; " \
#ld " [%1]%%asi,%0 " \
: "=r" (_v) \
- : "r" ((__uintptr_t)(loc)), "r" (asi))
+ : "r" ((__uintptr_t)(loc)), "r" (asi), \
+ "m" (*(type *)(__uintptr_t)(loc)))
#if defined(__GNUC__) && defined(__OPTIMIZE__)
#define SPARC64_LD_DEF(ld, type, vtype) \
@@ -501,9 +502,10 @@ static __inline type ld(paddr_t loc, int
__asm volatile( \
#ld " [%1]%2,%0 " \
: "=r" (_v) \
- : "r" ((__uintptr_t)(loc)), "n" (asi)); \
+ : "r" ((__uintptr_t)(loc)), "n" (asi), \
+ "m" (*(type *)(__uintptr_t)(loc))); \
else \
- SPARC64_LD_NONCONST(ld); \
+ SPARC64_LD_NONCONST(ld, type); \
return _v; \
}
#else
@@ -511,7 +513,7 @@ static __inline type ld(paddr_t loc, int
static __inline type ld(paddr_t loc, int asi) \
{ \
vtype _v; \
- SPARC64_LD_NONCONST(ld); \
+ SPARC64_LD_NONCONST(ld, type); \
return _v; \
}
#endif
@@ -677,12 +679,12 @@ SPARC64_LD_DEF64(ldxa, uint64_t)
#ifdef __arch64__
/* 64-bit kernel, non-constant */
-#define SPARC64_ST_NONCONST(st) \
+#define SPARC64_ST_NONCONST(st, type) \
__asm volatile( \
"wr %2,%%g0,%%asi; " \
#st " %0,[%1]%%asi " \
: : "r" (value), "r" ((__uintptr_t)(loc)), \
- "r" (asi))
+ "r" (asi), "m" (*(type *)(__uintptr_t)(loc)))
#if defined(__GNUC__) && defined(__OPTIMIZE__)
#define SPARC64_ST_DEF(st, type) \
@@ -692,15 +694,15 @@ static __inline void st(paddr_t loc, int
__asm volatile( \
#st " %0,[%1]%2 " \
: : "r" (value), "r" ((__uintptr_t)(loc)), \
- "n" (asi)); \
+ "n" (asi), "m" (*(type *)(__uintptr_t)(loc))); \
else \
- SPARC64_ST_NONCONST(st); \
+ SPARC64_ST_NONCONST(st, type); \
}
#else
#define SPARC64_ST_DEF(st, type) \
static __inline void st(paddr_t loc, int asi, type value) \
{ \
- SPARC64_ST_NONCONST(st); \
+ SPARC64_ST_NONCONST(st, type); \
}
#endif
#define SPARC64_ST_DEF64(st, type) SPARC64_ST_DEF(st, type)