RFR: 8234331: Add robust and optimized utility for rounding up to next power of two+

John Rose john.r.rose at oracle.com
Thu Nov 28 03:05:11 UTC 2019


I too would expect these things to be placed in globalDefinitions.hpp
rather than align.hpp, for the reasons already given:  There are already
similar functions in there.

I’m not against cleaning up globalDefinitions.hpp, but until there’s
a better proposal on the table, let’s stay with it for functions like this.

— John

On Nov 26, 2019, at 2:23 AM, David Holmes <david.holmes at oracle.com> wrote:
> 
> On 26/11/2019 8:06 pm, Claes Redestad wrote:
>> On 2019-11-26 10:50, David Holmes wrote:
>>> Hi Claes,
>>> 
>>> Just some high-level comments
>>> 
>>> - should next_power_of_two be defined in globalDefinitions.hpp along side the related functionality ie is_power_of_two ?
>> I thought we are trying to move things _out_ of globalDefinitions. I
> 
> We are? I don't recall hearing that. But wherever these go seems they all belong together.
> 
>> agree align.hpp might not be the best place, either, though..
> 
> I thought align.hpp as strange place too. :)
> 
>>> 
>>> - can next_power_of_two build on the existing log2_* functions (or vice versa)?
>> Yes, log2_intptr et al could probably be tamed to do a single step
>> operation, although we'd need to add 64-bit implementations in
>> count_leading_zeros. At least these log2_* functions already deal with
>> overflows without looping forever.
>>> 
>>> - do the existing ZUtils not cover the same general area?
>>> 
>>> ./share/gc/z/zUtils.inline.hpp
>>> 
>>> inline size_t ZUtils::round_up_power_of_2(size_t value) {
>>>    assert(value != 0, "Invalid value");
>>> 
>>>    if (is_power_of_2(value)) {
>>>      return value;
>>>    }
>>> 
>>>    return (size_t)1 << (log2_intptr(value) + 1);
>>> }
>>> 
>>> inline size_t ZUtils::round_down_power_of_2(size_t value) {
>>>    assert(value != 0, "Invalid value");
>>>    return (size_t)1 << log2_intptr(value);
>>> }
>> round_up_power_of_2 is similar, but not identical (next_power_of_two doesn't care if the value is already a power of 2, nor should it).
> 
> Okay but seems perhaps these should also be moved out of ZUtils and co-located with the other "power of two" functions.
> 
> Cheers,
> David
> -----
> 
>> /Claes



More information about the hotspot-runtime-dev mailing list