[compiler-rt] r309423 - Add clear_cache implementation for ppc64. Fix buffer to meet ppc64 alignment.
Sterling Augustine via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 28 12:49:22 PDT 2017
Author: saugustine
Date: Fri Jul 28 12:49:22 2017
New Revision: 309423
URL: http://llvm.org/viewvc/llvm-project?rev=309423&view=rev
Log:
Add clear_cache implementation for ppc64. Fix buffer to meet ppc64 alignment.
Modified:
compiler-rt/trunk/lib/builtins/clear_cache.c
compiler-rt/trunk/test/builtins/Unit/clear_cache_test.c
Modified: compiler-rt/trunk/lib/builtins/clear_cache.c
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/clear_cache.c?rev=309423&r1=309422&r2=309423&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/clear_cache.c (original)
+++ compiler-rt/trunk/lib/builtins/clear_cache.c Fri Jul 28 12:49:22 2017
@@ -165,6 +165,21 @@ 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 (__powerpc64__) && defined(__LITTLE_ENDIAN__)
+ const size_t line_size = 32;
+ const size_t len = (uintptr_t)end - (uintptr_t)start;
+
+ const uintptr_t mask = ~(line_size - 1);
+ const uintptr_t start_line = ((uintptr_t)start) & mask;
+ const uintptr_t end_line = ((uintptr_t)start + len + line_size - 1) & mask;
+
+ for (uintptr_t line = start_line; line < end_line; line += line_size)
+ __asm__ volatile("dcbf 0, %0" : : "r"(line));
+ __asm__ volatile("sync");
+
+ for (uintptr_t line = start_line; line < end_line; line += line_size)
+ __asm__ volatile("icbi 0, %0" : : "r"(line));
+ __asm__ volatile("isync");
#else
#if __APPLE__
/* On Darwin, sys_icache_invalidate() provides this functionality */
@@ -174,4 +189,3 @@ void __clear_cache(void *start, void *en
#endif
#endif
}
-
Modified: compiler-rt/trunk/test/builtins/Unit/clear_cache_test.c
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/builtins/Unit/clear_cache_test.c?rev=309423&r1=309422&r2=309423&view=diff
==============================================================================
--- compiler-rt/trunk/test/builtins/Unit/clear_cache_test.c (original)
+++ compiler-rt/trunk/test/builtins/Unit/clear_cache_test.c Fri Jul 28 12:49:22 2017
@@ -52,7 +52,7 @@ memcpy_f(void *dst, const void *src, siz
#endif
}
-unsigned char execution_buffer[128];
+unsigned char execution_buffer[128] __attribute__((aligned(8)));
int main()
{
More information about the llvm-commits
mailing list