On Fri, 10 May 2024 08:45:32 GMT, Daniel Jeliński <djelin...@openjdk.org> wrote:

>> Replace the custom unsigned divide / remainder functions with the 
>> compiler-optimized Long.divideUnsigned / remainderUnsigned.
>> 
>> No new tests. Existing tier1-3 tests continue to pass.
>> 
>> I added a new set of divide benchmarks. Results in thread.
>> 
>> I also removed the BigDecimal.toString benchmarks. They no longer serve 
>> their purpose - toString caches the returned value, so we were only 
>> benchmarking the cache access time.
>
> Daniel Jeliński has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Inline variable declaration

src/java.base/share/classes/java/math/MutableBigInteger.java line 1117:

> 1115:             rem = (int) Long.remainderUnsigned(dividendEstimate, 
> divisorLong);
> 1116:             quotient.value[intLen - xlen] = q;
> 1117:             remLong = rem & LONG_MASK;

What about removing one of the `int rem`, renaming `remLong` to `rem` and using 
it as follows?


        long rem = 0;
        for (int xlen = intLen; xlen > 0; xlen--) {
            long dividendEstimate = (rem << 32) |
                    (value[offset + intLen - xlen] & LONG_MASK);
            int q = (int) Long.divideUnsigned(dividendEstimate, divisorLong);
            rem = Long.remainderUnsigned(dividendEstimate, divisorLong);
            quotient.value[intLen - xlen] = q;
        }

        quotient.normalize();
        return (int) rem;

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/19134#discussion_r1596734060

Reply via email to