34 lines
827 B
D
34 lines
827 B
D
struct PageTableEntry
|
|
{
|
|
ulong entry;
|
|
|
|
this(ulong address, ulong no_execute, ulong global,
|
|
ulong huge, ulong disable_cache, ulong write_through, ulong user,
|
|
ulong writable, ulong present)
|
|
{
|
|
entry = (present |
|
|
(writable << 1) |
|
|
(user << 2) |
|
|
(write_through << 3) |
|
|
(disable_cache << 4) |
|
|
(huge << 7) |
|
|
(global << 8) |
|
|
(no_execute << 63)) | address;
|
|
}
|
|
|
|
bool present()
|
|
{
|
|
return (entry & 0x1u) != 0u;
|
|
}
|
|
|
|
PageTableEntry * next()
|
|
{
|
|
return cast(PageTableEntry *)(entry & 0x7FFF_FFFF_FFFF_F000u);
|
|
}
|
|
|
|
static ulong page_table_index(ulong address, size_t level)
|
|
{
|
|
return ((address >> (39u - 9u * level)) & 0x1FFu);
|
|
}
|
|
}
|