Support for AES on ppc64le
Hiroshi H Horii
HORII at jp.ibm.com
Tue Mar 15 09:31:22 UTC 2016
Hi Vladimir,
Thank you a lots for your quick response and review.
To use load_array_element, SEGV happened, I needed the following change.
Could you also review this change is reasonable?
diff --git a/src/share/vm/opto/graphKit.cpp
b/src/share/vm/opto/graphKit.cpp
--- a/src/share/vm/opto/graphKit.cpp
+++ b/src/share/vm/opto/graphKit.cpp
@@ -1680,6 +1680,8 @@
Node* GraphKit::load_array_element(Node* ctl, Node* ary, Node* idx, const
TypeAryPtr* arytype) {
const Type* elemtype = arytype->elem();
BasicType elembt = elemtype->array_element_basic_type();
+ if (elembt == T_NARROWOOP)
+ elembt = T_OBJECT;
Node* adr = array_element_address(ary, idx, elembt, arytype->size());
Node* ld = make_load(ctl, adr, elemtype, elembt, arytype,
MemNode::unordered);
return ld;
I attached a full diff that is applied your kind suggestions.
Regards,
Hiroshi
-----------------------
Hiroshi Horii, Ph.D.
IBM Research - Tokyo
Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote on 03/15/2016 05:24:49:
> From: Vladimir Kozlov <vladimir.kozlov at oracle.com>
> To: Hiroshi H Horii/Japan/IBM at IBMJP,
hotspot-compiler-dev at openjdk.java.net
> Cc: "Simonis, Volker" <volker.simonis at sap.com>, Tim Ellison
> <Tim_Ellison at uk.ibm.com>
> Date: 03/15/2016 05:25
> Subject: Re: Support for AES on ppc64le
>
> 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
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20160315/1b93abd9/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ppc64le_aes_support_20160315.diff
Type: application/octet-stream
Size: 22280 bytes
Desc: not available
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20160315/1b93abd9/ppc64le_aes_support_20160315-0001.diff>
More information about the hotspot-compiler-dev
mailing list