rmm: Assert constants at compile time

This commit is contained in:
bjorn3
2026-03-28 21:57:41 +01:00
parent 5c480806be
commit a3843f8fb5
5 changed files with 84 additions and 98 deletions
+15 -22
View File
@@ -103,27 +103,20 @@ impl Arch for AArch64Arch {
}
}
#[cfg(test)]
mod tests {
use super::AArch64Arch;
use crate::Arch;
const _: () = {
assert!(AArch64Arch::PAGE_SIZE == 4096);
assert!(AArch64Arch::PAGE_OFFSET_MASK == 0xFFF);
assert!(AArch64Arch::PAGE_ADDRESS_SHIFT == 48);
assert!(AArch64Arch::PAGE_ADDRESS_SIZE == 0x0001_0000_0000_0000);
assert!(AArch64Arch::PAGE_ADDRESS_MASK == 0x0000_FFFF_FFFF_F000);
assert!(AArch64Arch::PAGE_ENTRY_SIZE == 8);
assert!(AArch64Arch::PAGE_ENTRIES == 512);
assert!(AArch64Arch::PAGE_ENTRY_MASK == 0x1FF);
assert!(AArch64Arch::PAGE_NEGATIVE_MASK == 0xFFFF_0000_0000_0000);
#[test]
fn constants() {
assert_eq!(AArch64Arch::PAGE_SIZE, 4096);
assert_eq!(AArch64Arch::PAGE_OFFSET_MASK, 0xFFF);
assert_eq!(AArch64Arch::PAGE_ADDRESS_SHIFT, 48);
assert_eq!(AArch64Arch::PAGE_ADDRESS_SIZE, 0x0001_0000_0000_0000);
assert_eq!(AArch64Arch::PAGE_ADDRESS_MASK, 0x0000_FFFF_FFFF_F000);
assert_eq!(AArch64Arch::PAGE_ENTRY_SIZE, 8);
assert_eq!(AArch64Arch::PAGE_ENTRIES, 512);
assert_eq!(AArch64Arch::PAGE_ENTRY_MASK, 0x1FF);
assert_eq!(AArch64Arch::PAGE_NEGATIVE_MASK, 0xFFFF_0000_0000_0000);
assert!(AArch64Arch::ENTRY_ADDRESS_SIZE == 0x0000_0100_0000_0000);
assert!(AArch64Arch::ENTRY_ADDRESS_MASK == 0x0000_00FF_FFFF_FFFF);
assert!(AArch64Arch::ENTRY_FLAGS_MASK == 0xFFF0_0000_0000_0FFF);
assert_eq!(AArch64Arch::ENTRY_ADDRESS_SIZE, 0x0000_0100_0000_0000);
assert_eq!(AArch64Arch::ENTRY_ADDRESS_MASK, 0x0000_00FF_FFFF_FFFF);
assert_eq!(AArch64Arch::ENTRY_FLAGS_MASK, 0xFFF0_0000_0000_0FFF);
assert_eq!(AArch64Arch::PHYS_OFFSET, 0xFFFF_8000_0000_0000);
}
}
assert!(AArch64Arch::PHYS_OFFSET == 0xFFFF_8000_0000_0000);
};
+18 -18
View File
@@ -79,29 +79,29 @@ impl Arch for RiscV64Sv39Arch {
}
}
const _: () = {
assert!(RiscV64Sv39Arch::PAGE_SIZE == 4096);
assert!(RiscV64Sv39Arch::PAGE_OFFSET_MASK == 0xFFF);
assert!(RiscV64Sv39Arch::PAGE_ADDRESS_SHIFT == 39);
assert!(RiscV64Sv39Arch::PAGE_ADDRESS_SIZE == 0x0000_0080_0000_0000);
assert!(RiscV64Sv39Arch::PAGE_ADDRESS_MASK == 0x0000_007F_FFFF_F000);
assert!(RiscV64Sv39Arch::PAGE_ENTRY_SIZE == 8);
assert!(RiscV64Sv39Arch::PAGE_ENTRIES == 512);
assert!(RiscV64Sv39Arch::PAGE_ENTRY_MASK == 0x1FF);
assert!(RiscV64Sv39Arch::PAGE_NEGATIVE_MASK == 0xFFFF_FF80_0000_0000);
assert!(RiscV64Sv39Arch::ENTRY_ADDRESS_SIZE == 0x0000_1000_0000_0000);
assert!(RiscV64Sv39Arch::ENTRY_ADDRESS_MASK == 0x0000_0FFF_FFFF_FFFF);
assert!(RiscV64Sv39Arch::ENTRY_FLAGS_MASK == 0xFFC0_0000_0000_03FF);
assert!(RiscV64Sv39Arch::PHYS_OFFSET == 0xFFFF_FFC0_0000_0000);
};
#[cfg(test)]
mod tests {
use super::RiscV64Sv39Arch;
use crate::Arch;
#[test]
fn constants() {
assert_eq!(RiscV64Sv39Arch::PAGE_SIZE, 4096);
assert_eq!(RiscV64Sv39Arch::PAGE_OFFSET_MASK, 0xFFF);
assert_eq!(RiscV64Sv39Arch::PAGE_ADDRESS_SHIFT, 39);
assert_eq!(RiscV64Sv39Arch::PAGE_ADDRESS_SIZE, 0x0000_0080_0000_0000);
assert_eq!(RiscV64Sv39Arch::PAGE_ADDRESS_MASK, 0x0000_007F_FFFF_F000);
assert_eq!(RiscV64Sv39Arch::PAGE_ENTRY_SIZE, 8);
assert_eq!(RiscV64Sv39Arch::PAGE_ENTRIES, 512);
assert_eq!(RiscV64Sv39Arch::PAGE_ENTRY_MASK, 0x1FF);
assert_eq!(RiscV64Sv39Arch::PAGE_NEGATIVE_MASK, 0xFFFF_FF80_0000_0000);
assert_eq!(RiscV64Sv39Arch::ENTRY_ADDRESS_SIZE, 0x0000_1000_0000_0000);
assert_eq!(RiscV64Sv39Arch::ENTRY_ADDRESS_MASK, 0x0000_0FFF_FFFF_FFFF);
assert_eq!(RiscV64Sv39Arch::ENTRY_FLAGS_MASK, 0xFFC0_0000_0000_03FF);
assert_eq!(RiscV64Sv39Arch::PHYS_OFFSET, 0xFFFF_FFC0_0000_0000);
}
#[test]
fn is_canonical() {
use super::VirtualAddress;
+18 -18
View File
@@ -76,29 +76,29 @@ impl Arch for RiscV64Sv48Arch {
}
}
const _: () = {
assert!(RiscV64Sv48Arch::PAGE_SIZE == 4096);
assert!(RiscV64Sv48Arch::PAGE_OFFSET_MASK == 0xFFF);
assert!(RiscV64Sv48Arch::PAGE_ADDRESS_SHIFT == 48);
assert!(RiscV64Sv48Arch::PAGE_ADDRESS_SIZE == 0x0001_0000_0000_0000);
assert!(RiscV64Sv48Arch::PAGE_ADDRESS_MASK == 0x0000_FFFF_FFFF_F000);
assert!(RiscV64Sv48Arch::PAGE_ENTRY_SIZE == 8);
assert!(RiscV64Sv48Arch::PAGE_ENTRIES == 512);
assert!(RiscV64Sv48Arch::PAGE_ENTRY_MASK == 0x1FF);
assert!(RiscV64Sv48Arch::PAGE_NEGATIVE_MASK == 0xFFFF_0000_0000_0000);
assert!(RiscV64Sv48Arch::ENTRY_ADDRESS_SIZE == 0x0000_1000_0000_0000);
assert!(RiscV64Sv48Arch::ENTRY_ADDRESS_MASK == 0x0000_0FFF_FFFF_FFFF);
assert!(RiscV64Sv48Arch::ENTRY_FLAGS_MASK == 0xFFC0_0000_0000_03FF);
assert!(RiscV64Sv48Arch::PHYS_OFFSET == 0xFFFF_8000_0000_0000);
};
#[cfg(test)]
mod tests {
use super::RiscV64Sv48Arch;
use crate::Arch;
#[test]
fn constants() {
assert_eq!(RiscV64Sv48Arch::PAGE_SIZE, 4096);
assert_eq!(RiscV64Sv48Arch::PAGE_OFFSET_MASK, 0xFFF);
assert_eq!(RiscV64Sv48Arch::PAGE_ADDRESS_SHIFT, 48);
assert_eq!(RiscV64Sv48Arch::PAGE_ADDRESS_SIZE, 0x0001_0000_0000_0000);
assert_eq!(RiscV64Sv48Arch::PAGE_ADDRESS_MASK, 0x0000_FFFF_FFFF_F000);
assert_eq!(RiscV64Sv48Arch::PAGE_ENTRY_SIZE, 8);
assert_eq!(RiscV64Sv48Arch::PAGE_ENTRIES, 512);
assert_eq!(RiscV64Sv48Arch::PAGE_ENTRY_MASK, 0x1FF);
assert_eq!(RiscV64Sv48Arch::PAGE_NEGATIVE_MASK, 0xFFFF_0000_0000_0000);
assert_eq!(RiscV64Sv48Arch::ENTRY_ADDRESS_SIZE, 0x0000_1000_0000_0000);
assert_eq!(RiscV64Sv48Arch::ENTRY_ADDRESS_MASK, 0x0000_0FFF_FFFF_FFFF);
assert_eq!(RiscV64Sv48Arch::ENTRY_FLAGS_MASK, 0xFFC0_0000_0000_03FF);
assert_eq!(RiscV64Sv48Arch::PHYS_OFFSET, 0xFFFF_8000_0000_0000);
}
#[test]
fn is_canonical() {
use super::VirtualAddress;
+15 -22
View File
@@ -54,27 +54,20 @@ impl Arch for X86Arch {
}
}
#[cfg(test)]
mod tests {
use super::{VirtualAddress, X86Arch};
use crate::Arch;
const _: () = {
assert!(X86Arch::PAGE_SIZE == 4096);
assert!(X86Arch::PAGE_OFFSET_MASK == 0xFFF);
assert!(X86Arch::PAGE_ADDRESS_SHIFT == 32);
assert!(X86Arch::PAGE_ADDRESS_SIZE == 0x0000_0001_0000_0000);
assert!(X86Arch::PAGE_ADDRESS_MASK == 0xFFFF_F000);
assert!(X86Arch::PAGE_ENTRY_SIZE == 4);
assert!(X86Arch::PAGE_ENTRIES == 1024);
assert!(X86Arch::PAGE_ENTRY_MASK == 0x3FF);
assert!(X86Arch::PAGE_NEGATIVE_MASK == 0x0000_0000_0000);
#[test]
fn constants() {
assert_eq!(X86Arch::PAGE_SIZE, 4096);
assert_eq!(X86Arch::PAGE_OFFSET_MASK, 0xFFF);
assert_eq!(X86Arch::PAGE_ADDRESS_SHIFT, 32);
assert_eq!(X86Arch::PAGE_ADDRESS_SIZE, 0x0000_0001_0000_0000);
assert_eq!(X86Arch::PAGE_ADDRESS_MASK, 0xFFFF_F000);
assert_eq!(X86Arch::PAGE_ENTRY_SIZE, 4);
assert_eq!(X86Arch::PAGE_ENTRIES, 1024);
assert_eq!(X86Arch::PAGE_ENTRY_MASK, 0x3FF);
assert_eq!(X86Arch::PAGE_NEGATIVE_MASK, 0x0000_0000_0000);
assert!(X86Arch::ENTRY_ADDRESS_SIZE == 0x0000_0000_0010_0000);
assert!(X86Arch::ENTRY_ADDRESS_MASK == 0x000F_FFFF);
assert!(X86Arch::ENTRY_FLAGS_MASK == 0x0000_0FFF);
assert_eq!(X86Arch::ENTRY_ADDRESS_SIZE, 0x0000_0000_0010_0000);
assert_eq!(X86Arch::ENTRY_ADDRESS_MASK, 0x000F_FFFF);
assert_eq!(X86Arch::ENTRY_FLAGS_MASK, 0x0000_0FFF);
assert_eq!(X86Arch::PHYS_OFFSET, 0x8000_0000);
}
}
assert!(X86Arch::PHYS_OFFSET == 0x8000_0000);
};
+18 -18
View File
@@ -63,29 +63,29 @@ impl Arch for X8664Arch {
}
}
const _: () = {
assert!(X8664Arch::PAGE_SIZE == 4096);
assert!(X8664Arch::PAGE_OFFSET_MASK == 0xFFF);
assert!(X8664Arch::PAGE_ADDRESS_SHIFT == 48);
assert!(X8664Arch::PAGE_ADDRESS_SIZE == 0x0001_0000_0000_0000);
assert!(X8664Arch::PAGE_ADDRESS_MASK == 0x0000_FFFF_FFFF_F000);
assert!(X8664Arch::PAGE_ENTRY_SIZE == 8);
assert!(X8664Arch::PAGE_ENTRIES == 512);
assert!(X8664Arch::PAGE_ENTRY_MASK == 0x1FF);
assert!(X8664Arch::PAGE_NEGATIVE_MASK == 0xFFFF_0000_0000_0000);
assert!(X8664Arch::ENTRY_ADDRESS_SIZE == 0x0000_0100_0000_0000);
assert!(X8664Arch::ENTRY_ADDRESS_MASK == 0x0000_00FF_FFFF_FFFF);
assert!(X8664Arch::ENTRY_FLAGS_MASK == 0xFFF0_0000_0000_0FFF);
assert!(X8664Arch::PHYS_OFFSET == 0xFFFF_8000_0000_0000);
};
#[cfg(test)]
mod tests {
use super::{VirtualAddress, X8664Arch};
use crate::Arch;
#[test]
fn constants() {
assert_eq!(X8664Arch::PAGE_SIZE, 4096);
assert_eq!(X8664Arch::PAGE_OFFSET_MASK, 0xFFF);
assert_eq!(X8664Arch::PAGE_ADDRESS_SHIFT, 48);
assert_eq!(X8664Arch::PAGE_ADDRESS_SIZE, 0x0001_0000_0000_0000);
assert_eq!(X8664Arch::PAGE_ADDRESS_MASK, 0x0000_FFFF_FFFF_F000);
assert_eq!(X8664Arch::PAGE_ENTRY_SIZE, 8);
assert_eq!(X8664Arch::PAGE_ENTRIES, 512);
assert_eq!(X8664Arch::PAGE_ENTRY_MASK, 0x1FF);
assert_eq!(X8664Arch::PAGE_NEGATIVE_MASK, 0xFFFF_0000_0000_0000);
assert_eq!(X8664Arch::ENTRY_ADDRESS_SIZE, 0x0000_0100_0000_0000);
assert_eq!(X8664Arch::ENTRY_ADDRESS_MASK, 0x0000_00FF_FFFF_FFFF);
assert_eq!(X8664Arch::ENTRY_FLAGS_MASK, 0xFFF0_0000_0000_0FFF);
assert_eq!(X8664Arch::PHYS_OFFSET, 0xFFFF_8000_0000_0000);
}
#[test]
fn is_canonical() {
fn yes(address: usize) {