moa_memops 0.1.4

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

#[cfg(aarch64_moana)]
mod aarch64;
#[cfg(riscv64_moana)]
mod riscv64;

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)。