Module Name: src
Committed By: joerg
Date: Wed May 24 21:45:40 UTC 2017
Modified Files:
src/lib/libc/compiler_rt: Makefile.inc
src/sys/external/bsd/compiler_rt/dist/lib/builtins: clear_cache.c
Log Message:
Add __clear_cache implementatin for SPARC/SPARC64.
To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 src/lib/libc/compiler_rt/Makefile.inc
cvs rdiff -u -r1.1.1.4 -r1.2 \
src/sys/external/bsd/compiler_rt/dist/lib/builtins/clear_cache.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libc/compiler_rt/Makefile.inc
diff -u src/lib/libc/compiler_rt/Makefile.inc:1.31 src/lib/libc/compiler_rt/Makefile.inc:1.32
--- src/lib/libc/compiler_rt/Makefile.inc:1.31 Wed Mar 30 07:25:33 2016
+++ src/lib/libc/compiler_rt/Makefile.inc Wed May 24 21:45:40 2017
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile.inc,v 1.31 2016/03/30 07:25:33 martin Exp $
+# $NetBSD: Makefile.inc,v 1.32 2017/05/24 21:45:40 joerg Exp $
COMPILER_RT_SRCDIR= ${NETBSDSRCDIR}/sys/external/bsd/compiler_rt/dist
@@ -242,6 +242,11 @@ GENERIC_SRCS+= \
clear_cache.c
.endif
+.if ${LIBC_MACHINE_CPU} == "sparc" || ${LIBC_MACHINE_CPU} == "sparc64"
+GENERIC_SRCS+= \
+ clear_cache.c
+.endif
+
.if ${LIBC_MACHINE_CPU} == "arm"
.if !empty(LIBC_MACHINE_ARCH:Mearm*)
GENERIC_SRCS+= \
Index: src/sys/external/bsd/compiler_rt/dist/lib/builtins/clear_cache.c
diff -u src/sys/external/bsd/compiler_rt/dist/lib/builtins/clear_cache.c:1.1.1.4 src/sys/external/bsd/compiler_rt/dist/lib/builtins/clear_cache.c:1.2
--- src/sys/external/bsd/compiler_rt/dist/lib/builtins/clear_cache.c:1.1.1.4 Sat Feb 27 18:59:29 2016
+++ src/sys/external/bsd/compiler_rt/dist/lib/builtins/clear_cache.c Wed May 24 21:45:40 2017
@@ -147,6 +147,13 @@ void __clear_cache(void *start, void *en
for (addr = xstart; addr < xend; addr += icache_line_size)
__asm __volatile("ic ivau, %0" :: "r"(addr));
__asm __volatile("isb sy");
+#elif defined(__sparc__)
+ uintptr_t xstart = (uintptr_t) start & ~(uintptr_t)3;
+ uintptr_t xend = (uintptr_t) end;
+
+ for (; xstart < xend; xstart += 4) {
+ __asm __volatile("flush %0" :: "r" (xstart));
+ }
#else
#if __APPLE__
/* On Darwin, sys_icache_invalidate() provides this functionality */