8035974: Refactor DigestBase.engineUpdate() method for better code generation by JIT compiler

Move the lopp from DigestBase.engineUpdate() to new private method implCompressMultiBlock() which can be intrinsified.

Reviewed-by: psandoz, ascarpino, forax
This commit is contained in:
James Cheng 2014-05-26 18:34:26 -07:00 committed by Vladimir Kozlov
parent b47c2517ad
commit 9442603fcd

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -122,10 +122,10 @@ abstract class DigestBase extends MessageDigestSpi implements Cloneable {
}
}
// compress complete blocks
while (len >= blockSize) {
implCompress(b, ofs);
len -= blockSize;
ofs += blockSize;
if (len >= blockSize) {
int limit = ofs + len;
ofs = implCompressMultiBlock(b, ofs, limit - blockSize);
len = limit - ofs;
}
// copy remainder to buffer
if (len > 0) {
@ -134,6 +134,14 @@ abstract class DigestBase extends MessageDigestSpi implements Cloneable {
}
}
// compress complete blocks
private int implCompressMultiBlock(byte[] b, int ofs, int limit) {
for (; ofs <= limit; ofs += blockSize) {
implCompress(b, ofs);
}
return ofs;
}
// reset this object. See JCA doc.
protected final void engineReset() {
if (bytesProcessed == 0) {