aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Kubaj <pkubaj@FreeBSD.org>2022-04-01 19:13:13 +0000
committerPiotr Kubaj <pkubaj@FreeBSD.org>2022-04-05 00:33:22 +0000
commit16c3f5d03e984a6039a888eec5bcc58735a7d965 (patch)
tree8278f93b93fb7e3164bbdd768a4d7de7dcefdcbc
parent123b4031e96da7953704d027c41d72d8ec0bf77d (diff)
downloadsrc-16c3f5d03e984a6039a888eec5bcc58735a7d965.tar.gz
src-16c3f5d03e984a6039a888eec5bcc58735a7d965.zip
powerpc: implement __clear_cache
Merge LLVM commit 81f5c6270cdfcdf80e6296df216b696a7a37c8b5. This fixes runtime of most notably pcre libraries (currently patched in ports), and probably also other ports since currently __clear_cache() just calls SIGABRT on powerpc. Reviewed by: dim Differential Revision: https://reviews.freebsd.org/D34736 (cherry picked from commit 57b6ac48a96c99e684ab4dc85b8a87097797dc9f)
-rw-r--r--contrib/llvm-project/compiler-rt/lib/builtins/clear_cache.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/contrib/llvm-project/compiler-rt/lib/builtins/clear_cache.c b/contrib/llvm-project/compiler-rt/lib/builtins/clear_cache.c
index da0715914b41..1f1efbff3ab2 100644
--- a/contrib/llvm-project/compiler-rt/lib/builtins/clear_cache.c
+++ b/contrib/llvm-project/compiler-rt/lib/builtins/clear_cache.c
@@ -130,7 +130,10 @@ void __clear_cache(void *start, void *end) {
__asm __volatile("dsb ish");
}
__asm __volatile("isb sy");
-#elif defined(__powerpc64__)
+#elif defined(__powerpc__)
+ // Newer CPUs have a bigger line size made of multiple blocks, so the
+ // following value is a minimal common denominator for what used to be
+ // a single block cache line and is therefore inneficient.
const size_t line_size = 32;
const size_t len = (uintptr_t)end - (uintptr_t)start;