| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/allocator/partition_allocator/compressed_pointer.h" |
| |
| #if PA_CONFIG(POINTER_COMPRESSION) |
| |
| namespace partition_alloc::internal { |
| |
| // We keep the useful part in |g_base_| as 1s to speed up decompression. |
| alignas(kPartitionCachelineSize) |
| PA_COMPONENT_EXPORT(PARTITION_ALLOC) CompressedPointerBaseGlobal::Base |
| CompressedPointerBaseGlobal::g_base_ = {.base = kUsefulBitsMask}; |
| |
| void CompressedPointerBaseGlobal::SetBase(uintptr_t base) { |
| PA_DCHECK(!IsSet()); |
| PA_DCHECK((base & kUsefulBitsMask) == 0); |
| g_base_.base = base | kUsefulBitsMask; |
| } |
| |
| void CompressedPointerBaseGlobal::ResetBaseForTesting() { |
| g_base_.base = kUsefulBitsMask; |
| } |
| |
| } // namespace partition_alloc::internal |
| |
| #endif // PA_CONFIG(POINTER_COMPRESSION) |