29 lines
719 B
Zig
29 lines
719 B
Zig
pub const PAGE_SIZE: usize = 0x1000;
|
|
|
|
pub fn TranslationLevel(comptime shift: usize) type {
|
|
return struct {
|
|
pub const SHIFT: usize = shift;
|
|
pub const SIZE: usize = 1 << shift;
|
|
|
|
pub inline fn index(addr: usize) usize {
|
|
return (addr >> shift) & 511;
|
|
}
|
|
|
|
pub inline fn offset(addr: usize) usize {
|
|
return addr & (SIZE - 1);
|
|
}
|
|
|
|
pub inline fn address(idx: usize) usize {
|
|
return idx << shift;
|
|
}
|
|
|
|
pub inline fn align_down(addr: usize) usize {
|
|
return addr & ~(SIZE - 1);
|
|
}
|
|
|
|
pub inline fn align_up(addr: usize) usize {
|
|
return (addr + SIZE - 1) & ~(SIZE - 1);
|
|
}
|
|
};
|
|
}
|