| //===-- AddressableBits.cpp -----------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "lldb/Utility/AddressableBits.h" |
| #include "lldb/lldb-types.h" |
| |
| #include <cassert> |
| |
| using namespace lldb; |
| using namespace lldb_private; |
| |
| void AddressableBits::SetAddressableBits(uint32_t addressing_bits) { |
| m_low_memory_addr_bits = m_high_memory_addr_bits = addressing_bits; |
| } |
| |
| void AddressableBits::SetAddressableBits(uint32_t lowmem_addressing_bits, |
| uint32_t highmem_addressing_bits) { |
| m_low_memory_addr_bits = lowmem_addressing_bits; |
| m_high_memory_addr_bits = highmem_addressing_bits; |
| } |
| |
| void AddressableBits::SetLowmemAddressableBits( |
| uint32_t lowmem_addressing_bits) { |
| m_low_memory_addr_bits = lowmem_addressing_bits; |
| } |
| |
| uint32_t AddressableBits::GetLowmemAddressableBits() const { |
| return m_low_memory_addr_bits; |
| } |
| |
| void AddressableBits::SetHighmemAddressableBits( |
| uint32_t highmem_addressing_bits) { |
| m_high_memory_addr_bits = highmem_addressing_bits; |
| } |
| |
| uint32_t AddressableBits::GetHighmemAddressableBits() const { |
| return m_high_memory_addr_bits; |
| } |
| |
| addr_t AddressableBits::AddressableBitToMask(uint32_t addressable_bits) { |
| assert(addressable_bits <= sizeof(addr_t) * 8); |
| if (addressable_bits == 64) |
| return 0; // all bits used for addressing |
| else |
| return ~((1ULL << addressable_bits) - 1); |
| } |