moa_memops 0.5.0

底层内存操作(clear_page 等)
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//! 底层内存操作
#![no_std]

#[cfg(any(aarch64_moana, aarch64_moana_std))]
mod aarch64;
#[cfg(any(riscv64_moana, riscv64_moana_std))]
mod riscv64;

#[cfg(not(any(aarch64_moana_std, riscv64_moana_std)))]
unsafe extern "C" {
    /// 将一个页面清零
    pub fn clear_page(addr: usize);
}

// memcpy / memmove / memset / memcmp 是编译器自动生成调用的 intrinsic 符号,分别在各架构
// 的 naked_asm 实现(见 aarch64.rs / riscv64.rs):用字长(`ldp/stp` / `ld/sd`)循环 + 字节
// 收尾,比逐字节快约一个数量级。不放 Rust:`+strict-align` target feature 会把 `usize` 的
// 非对齐读写降级成逐字节,naked asm 才能利用硬件允许的非对齐访问(SCTLR.A=0)。