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[][].
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
>
More information about the hotspot-compiler-dev
mailing list