RFR (S) 8035974: Refactor DigestBase.engineUpdate() method for better code generation by JIT compiler
james.cheng at oracle.com
Fri May 23 17:27:32 UTC 2014
On 5/23/2014 3:17 AM, Remi Forax wrote:
> On 05/23/2014 11:06 AM, Paul Sandoz wrote:
>> On May 22, 2014, at 1:34 AM, Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote:
>>> Contributed by James Cheng and modified by me.
>> Looks good to me.
> implCompressMultiBlock should be private thus don't need to be final.
I pulled it out of engineUpdate() so kept it "protected final" as before. I
just tried it with "private" and it still could be intrinsified. So either way
is okay in terms of intrinsification.
>>> To use intrinsics to accelerate SHA operations on multiple blocks , it is needed to pull a loop out of DigestBase.engineUpdate() and make a new method
>>> implCompressMultiBlock() which contains only the loop and can be intrinsified.
>>> On platforms which does not use intrinsic implCompressMultiBlock() method will be inlined by JIT and the same code will be generated as before. So no performance
>>> regression with the pure Java SUN provider is expected.
>>> About arithmetic change. limit = ofs + len will not overflow integer because ofs <= b.length - len (there is check).
>>> Tested with jdk jtreg tests and new hotspot jtreg test James wrote for 8035968.
>>>  https://bugs.openjdk.java.net/browse/JDK-8035968
More information about the core-libs-dev