RFR(M): 8152172: PPC64: Support AES intrinsics

Vladimir Kozlov vladimir.kozlov at oracle.com
Thu Mar 24 00:09:11 UTC 2016

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[][].


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

More information about the hotspot-compiler-dev mailing list