Commit 6d54f20c47

YANG Xudong <yangxudong@ymatrix.cn>
2024-08-10 10:24:01
loongarch: add __clear_cache builtin implementation (#21008)
1 parent 5415142
Changed files (1)
lib
compiler_rt
lib/compiler_rt/clear_cache.zig
@@ -28,6 +28,10 @@ fn clear_cache(start: usize, end: usize) callconv(.C) void {
         .aarch64, .aarch64_be => true,
         else => false,
     };
+    const loongarch64 = switch (arch) {
+        .loongarch64 => true,
+        else => false,
+    };
     const mips = switch (arch) {
         .mips, .mipsel, .mips64, .mips64el => true,
         else => false,
@@ -159,6 +163,12 @@ fn clear_cache(start: usize, end: usize) callconv(.C) void {
         // On Darwin, sys_icache_invalidate() provides this functionality
         sys_icache_invalidate(start, end - start);
         exportIt();
+    } else if (os == .linux and loongarch64) {
+        // See: https://github.com/llvm/llvm-project/blob/cf54cae26b65fc3201eff7200ffb9b0c9e8f9a13/compiler-rt/lib/builtins/clear_cache.c#L94-L95
+        asm volatile (
+            \\ ibar 0
+        );
+        exportIt();
     }
 }