comparison src/cpu/x86/vm/stubGenerator_x86_32.cpp @ 4771:22cee0ee8927

Merge
author kvn
date Fri, 06 Jan 2012 20:09:20 -0800
parents dca455dea3a7 069ab3f976d3
children 33df1aeaebbf 6759698e3140
comparison
equal deleted inserted replaced
4755:2b3acb34791f 4771:22cee0ee8927
1372 // one less register, because needed values are on the argument stack. 1372 // one less register, because needed values are on the argument stack.
1373 // __ check_klass_subtype_fast_path(sub_klass, *super_klass*, temp, 1373 // __ check_klass_subtype_fast_path(sub_klass, *super_klass*, temp,
1374 // L_success, L_failure, NULL); 1374 // L_success, L_failure, NULL);
1375 assert_different_registers(sub_klass, temp); 1375 assert_different_registers(sub_klass, temp);
1376 1376
1377 int sc_offset = (klassOopDesc::header_size() * HeapWordSize + 1377 int sc_offset = in_bytes(Klass::secondary_super_cache_offset());
1378 Klass::secondary_super_cache_offset_in_bytes());
1379 1378
1380 // if the pointers are equal, we are done (e.g., String[] elements) 1379 // if the pointers are equal, we are done (e.g., String[] elements)
1381 __ cmpptr(sub_klass, super_klass_addr); 1380 __ cmpptr(sub_klass, super_klass_addr);
1382 LOCAL_JCC(Assembler::equal, L_success); 1381 LOCAL_JCC(Assembler::equal, L_success);
1383 1382
1785 // 32 30 24 16 8 2 0 1784 // 32 30 24 16 8 2 0
1786 // 1785 //
1787 // array_tag: typeArray = 0x3, objArray = 0x2, non-array = 0x0 1786 // array_tag: typeArray = 0x3, objArray = 0x2, non-array = 0x0
1788 // 1787 //
1789 1788
1790 int lh_offset = klassOopDesc::header_size() * HeapWordSize + 1789 int lh_offset = in_bytes(Klass::layout_helper_offset());
1791 Klass::layout_helper_offset_in_bytes();
1792 Address src_klass_lh_addr(rcx_src_klass, lh_offset); 1790 Address src_klass_lh_addr(rcx_src_klass, lh_offset);
1793 1791
1794 // Handle objArrays completely differently... 1792 // Handle objArrays completely differently...
1795 jint objArray_lh = Klass::array_layout_helper(T_OBJECT); 1793 jint objArray_lh = Klass::array_layout_helper(T_OBJECT);
1796 __ cmpl(src_klass_lh_addr, objArray_lh); 1794 __ cmpl(src_klass_lh_addr, objArray_lh);
1912 1910
1913 __ BIND(L_checkcast_copy); 1911 __ BIND(L_checkcast_copy);
1914 // live at this point: rcx_src_klass, dst[_pos], src[_pos] 1912 // live at this point: rcx_src_klass, dst[_pos], src[_pos]
1915 { 1913 {
1916 // Handy offsets: 1914 // Handy offsets:
1917 int ek_offset = (klassOopDesc::header_size() * HeapWordSize + 1915 int ek_offset = in_bytes(objArrayKlass::element_klass_offset());
1918 objArrayKlass::element_klass_offset_in_bytes()); 1916 int sco_offset = in_bytes(Klass::super_check_offset_offset());
1919 int sco_offset = (klassOopDesc::header_size() * HeapWordSize +
1920 Klass::super_check_offset_offset_in_bytes());
1921 1917
1922 Register rsi_dst_klass = rsi; 1918 Register rsi_dst_klass = rsi;
1923 Register rdi_temp = rdi; 1919 Register rdi_temp = rdi;
1924 assert(rsi_dst_klass == src_pos, "expected alias w/ src_pos"); 1920 assert(rsi_dst_klass == src_pos, "expected alias w/ src_pos");
1925 assert(rdi_temp == dst_pos, "expected alias w/ dst_pos"); 1921 assert(rdi_temp == dst_pos, "expected alias w/ dst_pos");