RFR: 8331907: BigInteger and BigDecimal should use optimized division
Julian Waters
jwaters at openjdk.org
Fri May 10 01:04:04 UTC 2024
On Wed, 8 May 2024 08:19:54 GMT, Daniel JeliĆski <djelinski at 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.
src/java.base/share/classes/java/math/BigDecimal.java line 5683:
> 5681: tmp = (dividendHi << shift) | (dividendLo >>> 64 - shift);
> 5682: long u2 = tmp & LONG_MASK;
> 5683: long q1, r_tmp;
Nit: There doesn't seem to be a reason for splitting the q1 and r_tmp declarations from their assignments, why not the following instead? (Also applies to the cases below)
long q1 = Long.divideUnsigned(tmp, v1);
long r_tmp = Long.remainderUnsigned(tmp, v1);
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/19134#discussion_r1596137061
More information about the core-libs-dev
mailing list