27 lines
681 B
Zig
27 lines
681 B
Zig
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);
|
|
}
|
|
};
|
|
}
|