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 */

Reply via email to