diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d0c245..ac0e91f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,4 +17,10 @@ This release includes basical aclint functionalities. ### Fixed +## [v0.1.1] + +### Fixed + +- replace `#[naked]` with `#[unsafe(naked)]` for stable Rust + [v0.1.0]: https://github.com/rustsbi/aclint/releases/tag/v0.1.0 diff --git a/src/lib.rs b/src/lib.rs index 80e23b9..4f6fc01 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,7 +2,6 @@ //! //! RISC-V ACLINT is defined in . #![no_std] -#![feature(naked_functions)] #![deny(warnings)] use core::{arch::naked_asm, cell::UnsafeCell}; @@ -85,122 +84,108 @@ impl SifiveClint { } impl SifiveClint { - #[naked] + #[unsafe(naked)] pub extern "C" fn read_mtime_naked(&self) -> u64 { - unsafe { - naked_asm!( - " addi sp, sp, -8 - sd a1, (sp) - - li a1, {offset} - add a0, a0, a1 - - ld a1, (sp) - addi sp, sp, 8 - - ld a0, (a0) - ret - ", - offset = const Self::MTIME_OFFSET, - ) - } + naked_asm!( + " addi sp, sp, -8 + sd a1, (sp) + + li a1, {offset} + add a0, a0, a1 + + ld a1, (sp) + addi sp, sp, 8 + + ld a0, (a0) + ret + ", + offset = const Self::MTIME_OFFSET, + ) } - #[naked] + #[unsafe(naked)] pub extern "C" fn write_mtime_naked(&self, val: u64) -> u64 { - unsafe { - naked_asm!( - " addi sp, sp, -8 - sd a1, (sp) - - li a1, {offset} - add a0, a0, a1 - - ld a1, (sp) - addi sp, sp, 8 - - sd a1, (a0) - ret - ", - offset = const Self::MTIME_OFFSET, - ) - } + naked_asm!( + " addi sp, sp, -8 + sd a1, (sp) + + li a1, {offset} + add a0, a0, a1 + + ld a1, (sp) + addi sp, sp, 8 + + sd a1, (a0) + ret + ", + offset = const Self::MTIME_OFFSET, + ) } - #[naked] + #[unsafe(naked)] pub extern "C" fn read_mtimecmp_naked(&self, hart_idx: usize) -> u64 { - unsafe { - naked_asm!( - " slli a1, a1, 3 - add a0, a0, a1 - - li a1, {offset} - add a0, a0, a1 - - ld a0, (a0) - ret - ", - offset = const Self::MTIMER_OFFSET, - ) - } + naked_asm!( + " slli a1, a1, 3 + add a0, a0, a1 + + li a1, {offset} + add a0, a0, a1 + + ld a0, (a0) + ret + ", + offset = const Self::MTIMER_OFFSET, + ) } - #[naked] + #[unsafe(naked)] pub extern "C" fn write_mtimecmp_naked(&self, hart_idx: usize, val: u64) { - unsafe { - naked_asm!( - " slli a1, a1, 3 - add a0, a0, a1 - - li a1, {offset} - add a0, a0, a1 - - sd a2, (a0) - ret - ", - offset = const Self::MTIMER_OFFSET, - ) - } + naked_asm!( + " slli a1, a1, 3 + add a0, a0, a1 + + li a1, {offset} + add a0, a0, a1 + + sd a2, (a0) + ret + ", + offset = const Self::MTIMER_OFFSET, + ) } - #[naked] + #[unsafe(naked)] pub extern "C" fn read_msip_naked(&self, hart_idx: usize) -> bool { - unsafe { - naked_asm!( - " slli a1, a1, 2 - add a0, a0, a1 - lw a0, (a0) - ret - ", - ) - } + naked_asm!( + " slli a1, a1, 2 + add a0, a0, a1 + lw a0, (a0) + ret + ", + ) } - #[naked] + #[unsafe(naked)] pub extern "C" fn set_msip_naked(&self, hart_idx: usize) { - unsafe { - naked_asm!( - " slli a1, a1, 2 - add a0, a0, a1 - addi a1, zero, 1 - sw a1, (a0) - ret - ", - ) - } + naked_asm!( + " slli a1, a1, 2 + add a0, a0, a1 + addi a1, zero, 1 + sw a1, (a0) + ret + ", + ) } - #[naked] + #[unsafe(naked)] pub extern "C" fn clear_msip_naked(&self, hart_idx: usize) { - unsafe { - naked_asm!( - " slli a1, a1, 2 - add a0, a0, a1 - sw zero, (a0) - ret - ", - ) - } + naked_asm!( + " slli a1, a1, 2 + add a0, a0, a1 + sw zero, (a0) + ret + ", + ) } }