From 079f503d962ad9e5ae4394c083e6877828c798ec Mon Sep 17 00:00:00 2001 From: Sonia Zaldana Calles Date: Fri, 22 Nov 2024 18:55:31 +0000 Subject: [PATCH] 8344568: Renaming ceil_log2 to log2i_ceil Reviewed-by: kbarrett --- src/hotspot/share/classfile/dictionary.cpp | 2 +- src/hotspot/share/classfile/stringTable.cpp | 2 +- src/hotspot/share/classfile/symbolTable.cpp | 2 +- .../share/services/finalizerService.cpp | 2 +- src/hotspot/share/services/threadIdTable.cpp | 2 +- src/hotspot/share/utilities/powerOfTwo.hpp | 14 +++--- .../gtest/utilities/test_powerOfTwo.cpp | 48 +++++++++---------- 7 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/hotspot/share/classfile/dictionary.cpp b/src/hotspot/share/classfile/dictionary.cpp index 92f362860eb..a6df19ef915 100644 --- a/src/hotspot/share/classfile/dictionary.cpp +++ b/src/hotspot/share/classfile/dictionary.cpp @@ -44,7 +44,7 @@ const size_t REHASH_LEN = 100; Dictionary::Dictionary(ClassLoaderData* loader_data, size_t table_size) : _number_of_entries(0), _loader_data(loader_data) { - size_t start_size_log_2 = MAX2(ceil_log2(table_size), 2); // 2 is minimum size even though some dictionaries only have one entry + size_t start_size_log_2 = MAX2(log2i_ceil(table_size), 2); // 2 is minimum size even though some dictionaries only have one entry size_t current_size = ((size_t)1) << start_size_log_2; log_info(class, loader, data)("Dictionary start size: " SIZE_FORMAT " (" SIZE_FORMAT ")", current_size, start_size_log_2); diff --git a/src/hotspot/share/classfile/stringTable.cpp b/src/hotspot/share/classfile/stringTable.cpp index 4de4b8e333c..d6aedcbb157 100644 --- a/src/hotspot/share/classfile/stringTable.cpp +++ b/src/hotspot/share/classfile/stringTable.cpp @@ -309,7 +309,7 @@ public: }; void StringTable::create_table() { - size_t start_size_log_2 = ceil_log2(StringTableSize); + size_t start_size_log_2 = log2i_ceil(StringTableSize); _current_size = ((size_t)1) << start_size_log_2; log_trace(stringtable)("Start size: " SIZE_FORMAT " (" SIZE_FORMAT ")", _current_size, start_size_log_2); diff --git a/src/hotspot/share/classfile/symbolTable.cpp b/src/hotspot/share/classfile/symbolTable.cpp index 50453cee61d..040ba4795e4 100644 --- a/src/hotspot/share/classfile/symbolTable.cpp +++ b/src/hotspot/share/classfile/symbolTable.cpp @@ -212,7 +212,7 @@ private: }; void SymbolTable::create_table () { - size_t start_size_log_2 = ceil_log2(SymbolTableSize); + size_t start_size_log_2 = log2i_ceil(SymbolTableSize); _current_size = ((size_t)1) << start_size_log_2; log_trace(symboltable)("Start size: " SIZE_FORMAT " (" SIZE_FORMAT ")", _current_size, start_size_log_2); diff --git a/src/hotspot/share/services/finalizerService.cpp b/src/hotspot/share/services/finalizerService.cpp index fd46827ee00..92d1111ce26 100644 --- a/src/hotspot/share/services/finalizerService.cpp +++ b/src/hotspot/share/services/finalizerService.cpp @@ -266,7 +266,7 @@ void FinalizerService::do_concurrent_work(JavaThread* service_thread) { void FinalizerService::init() { assert(_table == nullptr, "invariant"); - const size_t start_size_log_2 = ceil_log2(DEFAULT_TABLE_SIZE); + const size_t start_size_log_2 = log2i_ceil(DEFAULT_TABLE_SIZE); _table = new FinalizerHashtable(start_size_log_2, MAX_SIZE, FinalizerHashtable::DEFAULT_GROW_HINT); } diff --git a/src/hotspot/share/services/threadIdTable.cpp b/src/hotspot/share/services/threadIdTable.cpp index 0a9c1233971..90d17532c4d 100644 --- a/src/hotspot/share/services/threadIdTable.cpp +++ b/src/hotspot/share/services/threadIdTable.cpp @@ -112,7 +112,7 @@ void ThreadIdTable::lazy_initialize(const ThreadsList *threads) { void ThreadIdTable::create_table(size_t size) { assert(_local_table == nullptr, "Thread table is already created"); - size_t size_log = ceil_log2(size); + size_t size_log = log2i_ceil(size); size_t start_size_log = size_log > DEFAULT_TABLE_SIZE_LOG ? size_log : DEFAULT_TABLE_SIZE_LOG; _current_size = (size_t)1 << start_size_log; diff --git a/src/hotspot/share/utilities/powerOfTwo.hpp b/src/hotspot/share/utilities/powerOfTwo.hpp index 6c1e413f403..b40c3fb7404 100644 --- a/src/hotspot/share/utilities/powerOfTwo.hpp +++ b/src/hotspot/share/utilities/powerOfTwo.hpp @@ -79,6 +79,13 @@ inline int log2i_exact(T value) { return count_trailing_zeros(value); } +// Ceiling of log2 of a positive, integral value, i.e., smallest i such that value <= 2^i. +template ::value)> +inline int log2i_ceil(T value) { + assert(value > 0, "Invalid value"); + return log2i_graceful(value - 1) + 1; +} + // Preconditions: value != 0, and the unsigned representation of value is a power of two inline int exact_log2(intptr_t value) { return log2i_exact((uintptr_t)value); @@ -120,13 +127,6 @@ inline T next_power_of_2(T value) { return T(round_up_power_of_2(value + 1)); } -// Find log2 value greater than this input -template ::value)> -inline int ceil_log2(T value) { - assert(value > 0, "Invalid value"); - return log2i_graceful(value - 1) + 1; -} - // Return the largest power of two that is a submultiple of the given value. // This is the same as the numeric value of the least-significant set bit. // For unsigned values, it replaces the old trick of (value & -value). diff --git a/test/hotspot/gtest/utilities/test_powerOfTwo.cpp b/test/hotspot/gtest/utilities/test_powerOfTwo.cpp index fc4080bcefd..850421a5517 100644 --- a/test/hotspot/gtest/utilities/test_powerOfTwo.cpp +++ b/test/hotspot/gtest/utilities/test_powerOfTwo.cpp @@ -306,43 +306,43 @@ TEST(power_of_2, log2i) { check_log2i_variants_for((jlong)0); } -template void test_ceil_log2() { - EXPECT_EQ(ceil_log2(T(1)), 0) << "value = " << T(1); - EXPECT_EQ(ceil_log2(T(2)), 1) << "value = " << T(2); - EXPECT_EQ(ceil_log2(T(3)), 2) << "value = " << T(3); - EXPECT_EQ(ceil_log2(T(4)), 2) << "value = " << T(4); - EXPECT_EQ(ceil_log2(T(5)), 3) << "value = " << T(5); - EXPECT_EQ(ceil_log2(T(6)), 3) << "value = " << T(6); - EXPECT_EQ(ceil_log2(T(7)), 3) << "value = " << T(7); - EXPECT_EQ(ceil_log2(T(8)), 3) << "value = " << T(8); - EXPECT_EQ(ceil_log2(T(9)), 4) << "value = " << T(9); - EXPECT_EQ(ceil_log2(T(10)), 4) << "value = " << T(10); +template void test_log2i_ceil() { + EXPECT_EQ(log2i_ceil(T(1)), 0) << "value = " << T(1); + EXPECT_EQ(log2i_ceil(T(2)), 1) << "value = " << T(2); + EXPECT_EQ(log2i_ceil(T(3)), 2) << "value = " << T(3); + EXPECT_EQ(log2i_ceil(T(4)), 2) << "value = " << T(4); + EXPECT_EQ(log2i_ceil(T(5)), 3) << "value = " << T(5); + EXPECT_EQ(log2i_ceil(T(6)), 3) << "value = " << T(6); + EXPECT_EQ(log2i_ceil(T(7)), 3) << "value = " << T(7); + EXPECT_EQ(log2i_ceil(T(8)), 3) << "value = " << T(8); + EXPECT_EQ(log2i_ceil(T(9)), 4) << "value = " << T(9); + EXPECT_EQ(log2i_ceil(T(10)), 4) << "value = " << T(10); // Test max values if (std::is_unsigned::value) { - EXPECT_EQ(ceil_log2(std::numeric_limits::max()), + EXPECT_EQ(log2i_ceil(std::numeric_limits::max()), (int)(sizeof(T) * 8)) << "value = " << std::numeric_limits::max(); } else { - EXPECT_EQ(ceil_log2(std::numeric_limits::max()), + EXPECT_EQ(log2i_ceil(std::numeric_limits::max()), (int)(sizeof(T) * 8 - 1)) << "value = " << std::numeric_limits::max(); } } -TEST(power_of_2, ceil_log2) { - test_ceil_log2(); - test_ceil_log2(); - test_ceil_log2(); - test_ceil_log2(); - test_ceil_log2(); - test_ceil_log2(); - test_ceil_log2(); - test_ceil_log2(); +TEST(power_of_2, log2i_ceil) { + test_log2i_ceil(); + test_log2i_ceil(); + test_log2i_ceil(); + test_log2i_ceil(); + test_log2i_ceil(); + test_log2i_ceil(); + test_log2i_ceil(); + test_log2i_ceil(); } #ifdef ASSERT -TEST_VM_ASSERT_MSG(power_of_2, ceil_log2_invalid, +TEST_VM_ASSERT_MSG(power_of_2, log2i_ceil_invalid, ".*Invalid value") { - ceil_log2(0); + log2i_ceil(0); } #endif // ASSERT