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