< prev index next >

src/cpu/aarch64/vm/macroAssembler_aarch64.hpp

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) 1997, 2012, 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) 1997, 2012, 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.
*** 165,175 **** virtual void notify(int type); // aliases defined in AARCH64 spec - template<class T> inline void cmpw(Register Rd, T imm) { subsw(zr, Rd, imm); } inline void cmp(Register Rd, unsigned imm) { subs(zr, Rd, imm); } inline void cmnw(Register Rd, unsigned imm) { addsw(zr, Rd, imm); } --- 165,174 ----
*** 1119,1131 **** void string_indexof(Register str1, Register str2, Register cnt1, Register cnt2, Register tmp1, Register tmp2, Register tmp3, Register tmp4, int int_cnt1, Register result); ! // ISB may be needed because of a safepoint void maybe_isb() { isb(); } }; // Used by aarch64.ad to control code generation #define treat_as_volatile(MEM_NODE) \ (MacroAssembler::use_acq_rel_for_volatile_fields() ? (MEM_NODE)->is_volatile() : false) --- 1118,1155 ---- void string_indexof(Register str1, Register str2, Register cnt1, Register cnt2, Register tmp1, Register tmp2, Register tmp3, Register tmp4, int int_cnt1, Register result); ! private: ! void add2_with_carry(Register final_dest_hi, Register dest_hi, Register dest_lo, ! Register src1, Register src2); ! void add2_with_carry(Register dest_hi, Register dest_lo, Register src1, Register src2) { ! add2_with_carry(dest_hi, dest_hi, dest_lo, src1, src2); ! } ! void multiply_64_x_64_loop(Register x, Register xstart, Register x_xstart, ! Register y, Register y_idx, Register z, ! Register carry, Register product, ! Register idx, Register kdx); ! void multiply_128_x_128_loop(Register y, Register z, ! Register carry, Register carry2, ! Register idx, Register jdx, ! Register yz_idx1, Register yz_idx2, ! Register tmp, Register tmp3, Register tmp4, ! Register tmp7, Register product_hi); ! public: ! void multiply_to_len(Register x, Register xlen, Register y, Register ylen, Register z, ! Register zlen, Register tmp1, Register tmp2, Register tmp3, ! Register tmp4, Register tmp5, Register tmp6, Register tmp7); // ISB may be needed because of a safepoint void maybe_isb() { isb(); } + + private: + // Return the effective address r + (r1 << ext) + offset. + // Uses rscratch2. + Address offsetted_address(Register r, Register r1, Address::extend ext, + int offset, int size); }; // Used by aarch64.ad to control code generation #define treat_as_volatile(MEM_NODE) \ (MacroAssembler::use_acq_rel_for_volatile_fields() ? (MEM_NODE)->is_volatile() : false)
< prev index next >