This question is for core libs. For JIT to generate optimal code we want to change type of AESCrypt::sessionK from Object[] to int[][]. Otherwise JIT have to generate checkcast code to make sure that elements of sessionK array are int[]. I see that sessionK field is private so we are not changing public API.
Thanks, Vladimir On 3/24/16 6:17 PM, Hiroshi H Horii wrote:
Hi Vladimir, Thank you for your reviewing. Is it possible to modify the type of sessionK from Object[] to int[][]? We can guess, the type was designed for flexibility. However, only int[] is used to store elements of sessionK, so far. In addition, this field is private. Though adding checkcast is another solution, it produces overheads. I attached an additional patch (generated with hg diff -g) to jdk directory. I would like to ask thoughts about this change of java code. Regards, Hiroshi ----------------------- Hiroshi Horii, IBM Research - Tokyo Vladimir Kozlov <[email protected]> wrote on 03/24/2016 09:09:11: > From: Vladimir Kozlov <[email protected]> > To: Hiroshi H Horii/Japan/IBM@IBMJP, "hotspot-compiler- > [email protected]" <[email protected]> > Cc: "Doerr, Martin" <[email protected]>, Tim Ellison > <[email protected]>, "Simonis, Volker" <[email protected]> > Date: 03/24/2016 09:19 > Subject: Re: RFR(M): 8152172: PPC64: Support AES intrinsics > > I think we need to add gen_checkcast for objAESCryptKey node since > java code has no guarantee that sessionK array elements are > initialized with int[]. Or we should modify java code to declare sessionK > as int[][]. > > Thanks, > Vladimir > > Note, intrinsics are correctly handle case when > On 3/22/16 8:47 AM, Hiroshi H Horii wrote: > > Dear all: > > > > Can I please request reviews for the following change? > > This change was created for JDK 9 to enable POWER8's AES > > instructions for AES calculation. > > > > This request follows this discussion. > > http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2016- > March/021926.html > > > > Description: > > This change adds stub routines support for single-block AES > > encryption and decryption operations on the POWER8 platform. > > They are available only when the application is configured to > > use SunJCE crypto provider on little endian. > > > > These stubs make use of efficient hardware AES instructions > > and thus offer significant performance improvements over > > JITed code on POWER8 as on x86 and SPARC. AES stub routines > > are enabled by default on POWER8 platforms that support AES > > instructions (vcipher). They can be explicitly enabled or > > disabled on the command-line using UseAES and > > UseAESIntrinsics JVM flags. Unlike x86 and SPARC, vcipher > > and vnchiper of POWER8 need the same round keys of AES. > > Therefore, inline_aescrypt_Block in library_call.cpp calls the > > stub with AESCrypt.sessionK[0] as round keys. > > > > Summary of source code changes: > > > > *src/cpu/ppc/vm/assembler_ppc.hpp > > *src/cpu/ppc/vm/assembler_ppc.inline.hpp > > - Adds support for vrld instruction to rotate vector register values > > with left doubleword. > > > > *src/cpu/ppc/vm/stubGenerator_ppc.cpp > > - Defines stubs for single-block AES encryption and decryption > > routines supporting all key sizes (128, 192 and 256-bit). > > - Current POWER AES decryption instructions are not compatible > > with SunJCE expanded decryption key format. Thus decryption > > stubs read the expanded encryption keys (sessionK[0]) with > > descendant order. > > - Encryption stubs use SunJCE expanded encryption key as their > > is no incompatibility issue between POWER8 AES encryption > > instructions and SunJCE expanded encryption keys. > > > > *src/cpu/ppc/vm/vm_version_ppc.cpp > > - Detects AES capabilities of the underlying CPU by using > > has_vcipher(). > > - Enables UseAES and UseAESIntrinsics flags if the underlying > > CPU supports AES instructions and neither of them is explicitly > > disabled on the command-line. Generate warning message if > > either of these flags are enabled on the command-line > > whereas the underlying CPU does not support AES instructions. > > > > *src/share/vm/opto/library_call.cpp > > - Passes the first input parameter, reference to sessionK[0] to the > > AES stubs only on the POWER platform. > > > > *src/share/vm/opto/graphKit.cpp > > - Supports T_NARROWOOP type for GraphKit::load_array_element. > > > > Bug: https://bugs.openjdk.java.net/browse/JDK-8152172 > > Webrev: http://cr.openjdk.java.net/~mdoerr/8152172_ppc64le_aes/webrev.00/ > > > > > > Regards, > > Hiroshi > > ----------------------- > > Hiroshi Horii, > > IBM Research - Tokyo > > >
