#cache #instructions #native #clear #flush #builtin-clear-cache #gcc-clang

无std clear-cache

无GCC/Clang依赖的__builtin___clear_cache的原生实现

1个不稳定版本

0.1.0 2024年8月9日

缓存类别中排名第97

Download history 160/week @ 2024-08-04

每月下载量160
用于static-keys

MIT/Apache

9KB
109

clear-cache

无GCC/Clang依赖的__builtin___clear_cache的原生实现。

来自GCC文档

此函数用于刷新处理器指令缓存,范围为begin(包含)到end(不包含)。某些目标要求在修改包含代码的内存后刷新指令缓存,以便获得确定性行为。

如果目标不需要指令缓存刷新,则__builtin___clear_cache没有任何效果。否则,要么直接在指令缓存中生成指令以清除指令缓存,要么调用libgcc中的__clear_cache函数。

来自LLVM文档

llvm.clear_cache内省确保指定的范围内对处理器执行单元的修改可见。在指令和数据缓存非统一的平台上,实现将刷新指令缓存。

在指令和数据缓存一致的平台上(例如x86),此内省是空操作。在指令和数据缓存非一致的平台上(例如ARM、MIPS),内省被降低为适当的指令或系统调用,如果缓存刷新需要特殊权限。

默认行为是发出对运行时库中的__clear_cache的调用。

此内省不会清空指令流水线。当前函数的修改超出了内省的作用域。

当前实现取自LLVM的实现

当前CI测试的平台

  • Linux

    • x86_64-unknown-linux-gnu
    • x86_64-unknown-linux-musl
    • i686-unknown-linux-gnu
    • aarch64-unknown-linux-gnu
    • riscv64gc-unknown-linux-gnu
    • loongarch64-unknown-linux-gnu
  • macOS

    • aarch64-apple-darwin
  • Windows

    • x86_64-pc-windows-msvc
    • i686-pc-windows-msvc

依赖项

约0–35MB
约527K SLoC