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