1.1 --- a/src/cpu/sparc/vm/assembler_sparc.hpp Wed Mar 04 09:58:39 2009 -0800 1.2 +++ b/src/cpu/sparc/vm/assembler_sparc.hpp Fri Mar 06 21:36:50 2009 -0800 1.3 @@ -1859,6 +1859,7 @@ 1.4 // Functions for isolating 64 bit shifts for LP64 1.5 inline void sll_ptr( Register s1, Register s2, Register d ); 1.6 inline void sll_ptr( Register s1, int imm6a, Register d ); 1.7 + inline void sll_ptr( Register s1, RegisterConstant s2, Register d ); 1.8 inline void srl_ptr( Register s1, Register s2, Register d ); 1.9 inline void srl_ptr( Register s1, int imm6a, Register d ); 1.10 1.11 @@ -1986,6 +1987,25 @@ 1.12 void load_sized_value(Register s1, RegisterConstant s2, Register d, 1.13 int size_in_bytes, bool is_signed); 1.14 1.15 + // Helpers for address formation. 1.16 + // They update the dest in place, whether it is a register or constant. 1.17 + // They emit no code at all if src is a constant zero. 1.18 + // If dest is a constant and src is a register, the temp argument 1.19 + // is required, and becomes the result. 1.20 + // If dest is a register and src is a non-simm13 constant, 1.21 + // the temp argument is required, and is used to materialize the constant. 1.22 + void regcon_inc_ptr( RegisterConstant& dest, RegisterConstant src, 1.23 + Register temp = noreg ); 1.24 + void regcon_sll_ptr( RegisterConstant& dest, RegisterConstant src, 1.25 + Register temp = noreg ); 1.26 + RegisterConstant ensure_rs2(RegisterConstant rs2, Register sethi_temp) { 1.27 + guarantee(sethi_temp != noreg, "constant offset overflow"); 1.28 + if (is_simm13(rs2.constant_or_zero())) 1.29 + return rs2; // register or short constant 1.30 + set(rs2.as_constant(), sethi_temp); 1.31 + return sethi_temp; 1.32 + } 1.33 + 1.34 // -------------------------------------------------- 1.35 1.36 public: 1.37 @@ -2299,6 +2319,14 @@ 1.38 ); 1.39 void tlab_refill(Label& retry_tlab, Label& try_eden, Label& slow_case); 1.40 1.41 + // interface method calling 1.42 + void lookup_interface_method(Register recv_klass, 1.43 + Register intf_klass, 1.44 + RegisterConstant itable_index, 1.45 + Register method_result, 1.46 + Register temp_reg, Register temp2_reg, 1.47 + Label& no_such_interface); 1.48 + 1.49 // Stack overflow checking 1.50 1.51 // Note: this clobbers G3_scratch