Print this page
rev 1838 : 6961690: load oops from constant table on SPARC
Summary: oops should be loaded from the constant table of an nmethod instead of materializing them with a long code sequence.
Reviewed-by:

Split Close
Expand all
Collapse all
          --- old/src/cpu/sparc/vm/assembler_sparc.hpp
          +++ new/src/cpu/sparc/vm/assembler_sparc.hpp
↓ open down ↓ 1610 lines elided ↑ open up ↑
1611 1611    inline void stdc(  int crd, Register s1, int simm13a);
1612 1612    inline void stcsr( int crd, Register s1, Register s2 );
1613 1613    inline void stcsr( int crd, Register s1, int simm13a);
1614 1614    inline void stdcq( int crd, Register s1, Register s2 );
1615 1615    inline void stdcq( int crd, Register s1, int simm13a);
1616 1616  
1617 1617    // pp 230
1618 1618  
1619 1619    void sub(    Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sub_op3              ) | rs1(s1) | rs2(s2) ); }
1620 1620    void sub(    Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sub_op3              ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
     1621 +
     1622 +  // Note: offset is added to s2.
     1623 +  inline void sub(Register s1, RegisterOrConstant s2, Register d, int offset = 0);
     1624 +
1621 1625    void subcc(  Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sub_op3 | cc_bit_op3 ) | rs1(s1) | rs2(s2) ); }
1622 1626    void subcc(  Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sub_op3 | cc_bit_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
1623 1627    void subc(   Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(subc_op3             ) | rs1(s1) | rs2(s2) ); }
1624 1628    void subc(   Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(subc_op3             ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
1625 1629    void subccc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(subc_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
1626 1630    void subccc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(subc_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
1627 1631  
1628 1632    // pp 231
1629 1633  
1630 1634    inline void swap( Register s1, Register s2, Register d );
↓ open down ↓ 253 lines elided ↑ open up ↑
1884 1888  private:
1885 1889    void internal_set(const AddressLiteral& al, Register d, bool ForceRelocatable);
1886 1890  public:
1887 1891    void set(const AddressLiteral& addrlit, Register d);
1888 1892    void set(intptr_t value, Register d);
1889 1893    void set(address addr, Register d, RelocationHolder const& rspec);
1890 1894    void patchable_set(const AddressLiteral& addrlit, Register d);
1891 1895    void patchable_set(intptr_t value, Register d);
1892 1896    void set64(jlong value, Register d, Register tmp);
1893 1897  
     1898 +  // Compute size of set64.
     1899 +  static int size_of_set64(jlong value);
     1900 +
1894 1901    // sign-extend 32 to 64
1895 1902    inline void signx( Register s, Register d ) { sra( s, G0, d); }
1896 1903    inline void signx( Register d )             { sra( d, G0, d); }
1897 1904  
1898 1905    inline void not1( Register s, Register d ) { xnor( s, G0, d ); }
1899 1906    inline void not1( Register d )             { xnor( d, G0, d ); }
1900 1907  
1901 1908    inline void neg( Register s, Register d ) { sub( G0, s, d ); }
1902 1909    inline void neg( Register d )             { sub( G0, d, d ); }
1903 1910  
↓ open down ↓ 599 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX