Support for AES on ppc64le
Vladimir Kozlov
vladimir.kozlov at oracle.com
Mon Mar 14 20:24:49 UTC 2016
Hi Hiroshi
About library_call.cpp changes.
You don't need GraphKit::
And you can use load_array_element() instead:
Node* objAESCryptKey = load_array_element(control(), objSessionK,
intcon(0), TypeAryPtr::OOPS);
You may need additional check and cast because next expression expects
the objAESCryptKey points to int[]:
Node* k_start = array_element_address(objAESCryptKey, intcon(0), T_INT);
Thanks,
Vladimir
On 3/14/16 9:34 AM, Hiroshi H Horii wrote:
> Dear all:
>
> Can I please request reviews for the following change?
> This change was created for JDK 9.
>
> 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-bit, 192-bit 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.
>
> Code change:
> Please see an attached diff file that was generated with "hg diff
> -g" under
> the latest hotspot directory.
>
> Passed tests:
> jtreg compiler/codegen/7184394/
> jtreg compiler/cpuflags/ (after removing @ignored annotation)
>
> * This is my first post of a change. I'm sorry in advance if I don't
> follow the
> community manners.
>
> * I wrote this description based on the follows.
> http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2013-November/012670.html
>
>
>
> Regards,
> Hiroshi
> -----------------------
> Hiroshi Horii,
> IBM Research - Tokyo
>
More information about the hotspot-compiler-dev
mailing list