< 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 >