hotspot/src/cpu/x86/vm/assembler_x86.hpp
changeset 2332 5c7b6f4ce0a1
parent 2256 82d4e10b7c6b
child 2338 a8660a1b709b
equal deleted inserted replaced
2259:d3c946e7f127 2332:5c7b6f4ce0a1
   210       _disp (disp) {
   210       _disp (disp) {
   211     assert(!index->is_valid() == (scale == Address::no_scale),
   211     assert(!index->is_valid() == (scale == Address::no_scale),
   212            "inconsistent address");
   212            "inconsistent address");
   213   }
   213   }
   214 
   214 
   215   Address(Register base, RegisterConstant index, ScaleFactor scale = times_1, int disp = 0)
   215   Address(Register base, RegisterOrConstant index, ScaleFactor scale = times_1, int disp = 0)
   216     : _base (base),
   216     : _base (base),
   217       _index(index.register_or_noreg()),
   217       _index(index.register_or_noreg()),
   218       _scale(scale),
   218       _scale(scale),
   219       _disp (disp + (index.constant_or_zero() * scale_size(scale))) {
   219       _disp (disp + (index.constant_or_zero() * scale_size(scale))) {
   220     if (!index.is_register())  scale = Address::no_scale;
   220     if (!index.is_register())  scale = Address::no_scale;
   254       _disp(in_bytes(disp)) {
   254       _disp(in_bytes(disp)) {
   255     assert(!index->is_valid() == (scale == Address::no_scale),
   255     assert(!index->is_valid() == (scale == Address::no_scale),
   256            "inconsistent address");
   256            "inconsistent address");
   257   }
   257   }
   258 
   258 
   259   Address(Register base, RegisterConstant index, ScaleFactor scale, ByteSize disp)
   259   Address(Register base, RegisterOrConstant index, ScaleFactor scale, ByteSize disp)
   260     : _base (base),
   260     : _base (base),
   261       _index(index.register_or_noreg()),
   261       _index(index.register_or_noreg()),
   262       _scale(scale),
   262       _scale(scale),
   263       _disp (in_bytes(disp) + (index.constant_or_zero() * scale_size(scale))) {
   263       _disp (in_bytes(disp) + (index.constant_or_zero() * scale_size(scale))) {
   264     if (!index.is_register())  scale = Address::no_scale;
   264     if (!index.is_register())  scale = Address::no_scale;
  1800   void tlab_refill(Label& retry_tlab, Label& try_eden, Label& slow_case);
  1800   void tlab_refill(Label& retry_tlab, Label& try_eden, Label& slow_case);
  1801 
  1801 
  1802   // interface method calling
  1802   // interface method calling
  1803   void lookup_interface_method(Register recv_klass,
  1803   void lookup_interface_method(Register recv_klass,
  1804                                Register intf_klass,
  1804                                Register intf_klass,
  1805                                RegisterConstant itable_index,
  1805                                RegisterOrConstant itable_index,
  1806                                Register method_result,
  1806                                Register method_result,
  1807                                Register scan_temp,
  1807                                Register scan_temp,
  1808                                Label& no_such_interface);
  1808                                Label& no_such_interface);
  1809 
  1809 
  1810   // Test sub_klass against super_klass, with fast and slow paths.
  1810   // Test sub_klass against super_klass, with fast and slow paths.
  1817                                      Register super_klass,
  1817                                      Register super_klass,
  1818                                      Register temp_reg,
  1818                                      Register temp_reg,
  1819                                      Label* L_success,
  1819                                      Label* L_success,
  1820                                      Label* L_failure,
  1820                                      Label* L_failure,
  1821                                      Label* L_slow_path,
  1821                                      Label* L_slow_path,
  1822                 RegisterConstant super_check_offset = RegisterConstant(-1));
  1822                 RegisterOrConstant super_check_offset = RegisterOrConstant(-1));
  1823 
  1823 
  1824   // The rest of the type check; must be wired to a corresponding fast path.
  1824   // The rest of the type check; must be wired to a corresponding fast path.
  1825   // It does not repeat the fast path logic, so don't use it standalone.
  1825   // It does not repeat the fast path logic, so don't use it standalone.
  1826   // The temp_reg and temp2_reg can be noreg, if no temps are available.
  1826   // The temp_reg and temp2_reg can be noreg, if no temps are available.
  1827   // Updates the sub's secondary super cache as necessary.
  1827   // Updates the sub's secondary super cache as necessary.
  1881 
  1881 
  1882   // Writes to stack successive pages until offset reached to check for
  1882   // Writes to stack successive pages until offset reached to check for
  1883   // stack overflow + shadow pages.  Also, clobbers tmp
  1883   // stack overflow + shadow pages.  Also, clobbers tmp
  1884   void bang_stack_size(Register size, Register tmp);
  1884   void bang_stack_size(Register size, Register tmp);
  1885 
  1885 
  1886   virtual RegisterConstant delayed_value(intptr_t* delayed_value_addr,
  1886   virtual RegisterOrConstant delayed_value_impl(intptr_t* delayed_value_addr,
  1887                                          Register tmp,
  1887                                                 Register tmp,
  1888                                          int offset);
  1888                                                 int offset);
  1889 
  1889 
  1890   // Support for serializing memory accesses between threads
  1890   // Support for serializing memory accesses between threads
  1891   void serialize_memory(Register thread, Register tmp);
  1891   void serialize_memory(Register thread, Register tmp);
  1892 
  1892 
  1893   void verify_tlab();
  1893   void verify_tlab();