aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/memory
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/src/memory')
-rw-r--r--arch/x86_64/src/memory/paging/page_entry.cpp17
1 files changed, 2 insertions, 15 deletions
diff --git a/arch/x86_64/src/memory/paging/page_entry.cpp b/arch/x86_64/src/memory/paging/page_entry.cpp
index 8b4aa36..f3b5be1 100644
--- a/arch/x86_64/src/memory/paging/page_entry.cpp
+++ b/arch/x86_64/src/memory/paging/page_entry.cpp
@@ -18,25 +18,12 @@ namespace teachos::arch::memory::paging
{
if (contains_flags(PRESENT))
{
- auto physical_address = calculate_physical_address();
- return allocator::physical_frame::containing_address(physical_address & 0x000ffffffffff000);
+ constexpr std::size_t mask = 0x000fffff'fffff000;
+ return allocator::physical_frame::containing_address(flags.to_ullong() & mask);
}
return std::nullopt;
}
- auto entry::calculate_physical_address() const -> std::size_t
- {
- constexpr std::size_t start_bit = 12U;
- constexpr std::size_t end_bit = 52U;
- size_t value = 0U;
-
- for (auto i = start_bit; i < end_bit; i++)
- {
- value |= (flags[i] ? (1 << (i - start_bit)) : 0);
- }
- return value;
- }
-
auto entry::contains_flags(std::bitset<64U> other) const -> bool { return (flags & other) == other; }
auto entry::set_entry(allocator::physical_frame frame, std::bitset<64U> additional_flags) -> void