< prev index next >
src/cpu/aarch64/vm/stubGenerator_aarch64.cpp
Print this page
rev 8067 : 8077615: AARCH64: Add C2 intrinsic for BigInteger::multiplyToLen() method
Summary: Add C2 intrinsic for BigInteger::multiplyToLen() on AArch64.
Reviewed-by: kvn
*** 1,8 ****
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
! * Copyright (c) 2014, Red Hat Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,8 ----
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
! * Copyright (c) 2014, 2015, Red Hat Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 2354,2365 ****
__ ret(lr);
return start;
}
! #undef __
! #define __ masm->
// Continuation point for throwing of implicit exceptions that are
// not handled in the current activation. Fabricates an exception
// oop and initiates normal exception dispatching in this
// frame. Since we need to preserve callee-saved values (currently
--- 2354,2402 ----
__ ret(lr);
return start;
}
! /**
! * Arguments:
! *
! * Input:
! * c_rarg0 - x address
! * c_rarg1 - x length
! * c_rarg2 - y address
! * c_rarg3 - y lenth
! * c_rarg4 - z address
! * c_rarg5 - z length
! */
! address generate_multiplyToLen() {
! __ align(CodeEntryAlignment);
! StubCodeMark mark(this, "StubRoutines", "multiplyToLen");
!
! address start = __ pc();
! const Register x = r0;
! const Register xlen = r1;
! const Register y = r2;
! const Register ylen = r3;
! const Register z = r4;
! const Register zlen = r5;
!
! const Register tmp1 = r10;
! const Register tmp2 = r11;
! const Register tmp3 = r12;
! const Register tmp4 = r13;
! const Register tmp5 = r14;
! const Register tmp6 = r15;
! const Register tmp7 = r16;
!
! BLOCK_COMMENT("Entry:");
! __ enter(); // required for proper stackwalking of RuntimeStub frame
! __ multiply_to_len(x, xlen, y, ylen, z, zlen, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7);
! __ leave(); // required for proper stackwalking of RuntimeStub frame
! __ ret(lr);
!
! return start;
! }
// Continuation point for throwing of implicit exceptions that are
// not handled in the current activation. Fabricates an exception
// oop and initiates normal exception dispatching in this
// frame. Since we need to preserve callee-saved values (currently
*** 2373,2382 ****
--- 2410,2422 ----
// implicit exceptions (e.g., NullPointerException or
// AbstractMethodError on entry) are either at call sites or
// otherwise assume that stack unwinding will be initiated, so
// caller saved registers were assumed volatile in the compiler.
+ #undef __
+ #define __ masm->
+
address generate_throw_exception(const char* name,
address runtime_entry,
Register arg1 = noreg,
Register arg2 = noreg) {
// Information about frame layout at time of blocking runtime call.
*** 2516,2525 ****
--- 2556,2569 ----
throw_NullPointerException_at_call));
// arraycopy stubs used by compilers
generate_arraycopy_stubs();
+ if (UseMultiplyToLenIntrinsic) {
+ StubRoutines::_multiplyToLen = generate_multiplyToLen();
+ }
+
#ifndef BUILTIN_SIM
if (UseAESIntrinsics) {
StubRoutines::_aescrypt_encryptBlock = generate_aescrypt_encryptBlock();
StubRoutines::_aescrypt_decryptBlock = generate_aescrypt_decryptBlock();
StubRoutines::_cipherBlockChaining_encryptAESCrypt = generate_cipherBlockChaining_encryptAESCrypt();
< prev index next >