comparison src/cpu/x86/vm/assembler_x86.hpp @ 665:c89f86385056

6814659: separable cleanups and subroutines for 6655638 Summary: preparatory but separable changes for method handles Reviewed-by: kvn, never
author jrose
date Fri, 20 Mar 2009 23:19:36 -0700
parents c517646eef23
children d0994e5bebce
comparison
equal deleted inserted replaced
647:bd441136a5ce 665:c89f86385056
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();