src/cpu/sparc/vm/assembler_sparc.hpp

changeset 1058
9adddb8c0fc8
parent 1057
56aae7be60d4
child 1079
c517646eef23
     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

mercurial