src/cpu/x86/vm/stubGenerator_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File webrev Sdiff src/cpu/x86/vm

src/cpu/x86/vm/stubGenerator_x86_64.cpp

Print this page




2703     __ cmpl(Address(r10_src_klass, lh_offset), objArray_lh);
2704     __ jcc(Assembler::equal, L_objArray);
2705 
2706     //  if (src->klass() != dst->klass()) return -1;
2707     __ load_klass(rax, dst);
2708     __ cmpq(r10_src_klass, rax);
2709     __ jcc(Assembler::notEqual, L_failed);
2710 
2711     const Register rax_lh = rax;  // layout helper
2712     __ movl(rax_lh, Address(r10_src_klass, lh_offset));
2713 
2714     //  if (!src->is_Array()) return -1;
2715     __ cmpl(rax_lh, Klass::_lh_neutral_value);
2716     __ jcc(Assembler::greaterEqual, L_failed);
2717 
2718     // At this point, it is known to be a typeArray (array_tag 0x3).
2719 #ifdef ASSERT
2720     {
2721       BLOCK_COMMENT("assert primitive array {");
2722       Label L;
2723       __ cmpl(rax_lh, (Klass::_lh_array_tag_type_value << Klass::_lh_array_tag_shift));
2724       __ jcc(Assembler::greaterEqual, L);
2725       __ stop("must be a primitive array");
2726       __ bind(L);
2727       BLOCK_COMMENT("} assert primitive array done");
2728     }
2729 #endif
2730 
2731     arraycopy_range_checks(src, src_pos, dst, dst_pos, r11_length,
2732                            r10, L_failed);
2733 
2734     // TypeArrayKlass
2735     //
2736     // src_addr = (src + array_header_in_bytes()) + (src_pos << log2elemsize);
2737     // dst_addr = (dst + array_header_in_bytes()) + (dst_pos << log2elemsize);
2738     //
2739 
2740     const Register r10_offset = r10;    // array offset
2741     const Register rax_elsize = rax_lh; // element size
2742 
2743     __ movl(r10_offset, rax_lh);




2703     __ cmpl(Address(r10_src_klass, lh_offset), objArray_lh);
2704     __ jcc(Assembler::equal, L_objArray);
2705 
2706     //  if (src->klass() != dst->klass()) return -1;
2707     __ load_klass(rax, dst);
2708     __ cmpq(r10_src_klass, rax);
2709     __ jcc(Assembler::notEqual, L_failed);
2710 
2711     const Register rax_lh = rax;  // layout helper
2712     __ movl(rax_lh, Address(r10_src_klass, lh_offset));
2713 
2714     //  if (!src->is_Array()) return -1;
2715     __ cmpl(rax_lh, Klass::_lh_neutral_value);
2716     __ jcc(Assembler::greaterEqual, L_failed);
2717 
2718     // At this point, it is known to be a typeArray (array_tag 0x3).
2719 #ifdef ASSERT
2720     {
2721       BLOCK_COMMENT("assert primitive array {");
2722       Label L;
2723       __ cmpl(rax_lh, ((juint)Klass::_lh_array_tag_type_value << Klass::_lh_array_tag_shift));
2724       __ jcc(Assembler::greaterEqual, L);
2725       __ stop("must be a primitive array");
2726       __ bind(L);
2727       BLOCK_COMMENT("} assert primitive array done");
2728     }
2729 #endif
2730 
2731     arraycopy_range_checks(src, src_pos, dst, dst_pos, r11_length,
2732                            r10, L_failed);
2733 
2734     // TypeArrayKlass
2735     //
2736     // src_addr = (src + array_header_in_bytes()) + (src_pos << log2elemsize);
2737     // dst_addr = (dst + array_header_in_bytes()) + (dst_pos << log2elemsize);
2738     //
2739 
2740     const Register r10_offset = r10;    // array offset
2741     const Register rax_elsize = rax_lh; // element size
2742 
2743     __ movl(r10_offset, rax_lh);


src/cpu/x86/vm/stubGenerator_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File