pub type GeneralRegisters = [u64; 31];
#[cfg(kernel_tls)]
pub use super::asm::{read_thread_pointer, write_thread_pointer};
pub use super::{asm::enable_fp, fp::FpState};
#[inline]
pub fn current_exception_level() -> usize {
let value: usize;
unsafe { core::arch::asm!("mrs {}, CurrentEL", out(reg) value, options(nostack)) };
(value >> 2) & 3
}
#[inline]
pub fn read_tpidr_el1() -> usize {
let value;
unsafe { core::arch::asm!("mrs {}, tpidr_el1", out(reg) value, options(nostack)) };
value
}
#[inline]
pub unsafe fn write_tpidr_el1(value: usize) {
unsafe { core::arch::asm!("msr tpidr_el1, {}", in(reg) value, options(nostack)) };
}
#[inline]
pub fn read_tpidr_el2() -> usize {
let value;
unsafe { core::arch::asm!("mrs {}, tpidr_el2", out(reg) value, options(nostack)) };
value
}
#[inline]
pub unsafe fn write_tpidr_el2(value: usize) {
unsafe { core::arch::asm!("msr tpidr_el2, {}", in(reg) value, options(nostack)) };
}
#[inline]
pub fn read_sp_el0() -> usize {
let value;
unsafe { core::arch::asm!("mrs {}, sp_el0", out(reg) value, options(nostack)) };
value
}
#[inline]
pub unsafe fn write_sp_el0(value: usize) {
unsafe { core::arch::asm!("msr sp_el0, {}", in(reg) value, options(nostack)) };
}