Mercurial > hg > truffle
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(); |