[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