Support for AES on ppc64le
Hiroshi H Horii
HORII at jp.ibm.com
Mon Mar 14 16:34:16 UTC 2016
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20160314/4a68c629/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ppc64le_aes_support.diff
Type: application/octet-stream
Size: 21684 bytes
Desc: not available
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20160314/4a68c629/ppc64le_aes_support-0001.diff>
More information about the hotspot-compiler-dev
mailing list