33 lines
813 B
Rust
33 lines
813 B
Rust
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
|
pub unsafe fn memset32(dst: *mut u32, val: u32, count: usize) {
|
|
if cfg!(not(any(target_arch = "x86", target_arch = "x86_64"))) {
|
|
let mut buf = dst;
|
|
unsafe {
|
|
while buf < dst.add(count) {
|
|
core::ptr::write_volatile(buf, val);
|
|
buf = buf.offset(1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
core::arch::asm!(
|
|
"rep stosd",
|
|
inout("ecx") count => _,
|
|
inout("edi") dst => _,
|
|
inout("eax") val => _
|
|
);
|
|
}
|
|
|
|
pub fn hcf() -> ! {
|
|
loop {
|
|
unsafe {
|
|
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
|
core::arch::asm!("hlt");
|
|
|
|
#[cfg(target_arch = "aarch64")]
|
|
core::arch::asm!("wfi");
|
|
}
|
|
}
|
|
}
|