equal
deleted
inserted
replaced
1799 #endif |
1799 #endif |
1800 |
1800 |
1801 assert_different_registers(src, src_pos, dst, dst_pos, rcx_lh); |
1801 assert_different_registers(src, src_pos, dst, dst_pos, rcx_lh); |
1802 arraycopy_range_checks(src, src_pos, dst, dst_pos, LENGTH, L_failed); |
1802 arraycopy_range_checks(src, src_pos, dst, dst_pos, LENGTH, L_failed); |
1803 |
1803 |
1804 // typeArrayKlass |
1804 // TypeArrayKlass |
1805 // |
1805 // |
1806 // src_addr = (src + array_header_in_bytes()) + (src_pos << log2elemsize); |
1806 // src_addr = (src + array_header_in_bytes()) + (src_pos << log2elemsize); |
1807 // dst_addr = (dst + array_header_in_bytes()) + (dst_pos << log2elemsize); |
1807 // dst_addr = (dst + array_header_in_bytes()) + (dst_pos << log2elemsize); |
1808 // |
1808 // |
1809 const Register rsi_offset = rsi; // array offset |
1809 const Register rsi_offset = rsi; // array offset |
1862 __ pop(rdi); |
1862 __ pop(rdi); |
1863 __ pop(rsi); |
1863 __ pop(rsi); |
1864 __ leave(); // required for proper stackwalking of RuntimeStub frame |
1864 __ leave(); // required for proper stackwalking of RuntimeStub frame |
1865 __ ret(0); |
1865 __ ret(0); |
1866 |
1866 |
1867 // objArrayKlass |
1867 // ObjArrayKlass |
1868 __ BIND(L_objArray); |
1868 __ BIND(L_objArray); |
1869 // live at this point: rcx_src_klass, src[_pos], dst[_pos] |
1869 // live at this point: rcx_src_klass, src[_pos], dst[_pos] |
1870 |
1870 |
1871 Label L_plain_copy, L_checkcast_copy; |
1871 Label L_plain_copy, L_checkcast_copy; |
1872 // test array classes for subtyping |
1872 // test array classes for subtyping |
1892 |
1892 |
1893 __ BIND(L_checkcast_copy); |
1893 __ BIND(L_checkcast_copy); |
1894 // live at this point: rcx_src_klass, dst[_pos], src[_pos] |
1894 // live at this point: rcx_src_klass, dst[_pos], src[_pos] |
1895 { |
1895 { |
1896 // Handy offsets: |
1896 // Handy offsets: |
1897 int ek_offset = in_bytes(objArrayKlass::element_klass_offset()); |
1897 int ek_offset = in_bytes(ObjArrayKlass::element_klass_offset()); |
1898 int sco_offset = in_bytes(Klass::super_check_offset_offset()); |
1898 int sco_offset = in_bytes(Klass::super_check_offset_offset()); |
1899 |
1899 |
1900 Register rsi_dst_klass = rsi; |
1900 Register rsi_dst_klass = rsi; |
1901 Register rdi_temp = rdi; |
1901 Register rdi_temp = rdi; |
1902 assert(rsi_dst_klass == src_pos, "expected alias w/ src_pos"); |
1902 assert(rsi_dst_klass == src_pos, "expected alias w/ src_pos"); |