2943 __ delayed()->tst(length); |
2943 __ delayed()->tst(length); |
2944 __ br(Assembler::negative, false, Assembler::pn, L_failed); |
2944 __ br(Assembler::negative, false, Assembler::pn, L_failed); |
2945 |
2945 |
2946 BLOCK_COMMENT("arraycopy argument klass checks"); |
2946 BLOCK_COMMENT("arraycopy argument klass checks"); |
2947 // get src->klass() |
2947 // get src->klass() |
2948 if (UseCompressedKlassPointers) { |
2948 if (UseCompressedClassPointers) { |
2949 __ delayed()->nop(); // ??? not good |
2949 __ delayed()->nop(); // ??? not good |
2950 __ load_klass(src, G3_src_klass); |
2950 __ load_klass(src, G3_src_klass); |
2951 } else { |
2951 } else { |
2952 __ delayed()->ld_ptr(src, oopDesc::klass_offset_in_bytes(), G3_src_klass); |
2952 __ delayed()->ld_ptr(src, oopDesc::klass_offset_in_bytes(), G3_src_klass); |
2953 } |
2953 } |
2978 int lh_offset = in_bytes(Klass::layout_helper_offset()); |
2978 int lh_offset = in_bytes(Klass::layout_helper_offset()); |
2979 |
2979 |
2980 // Load 32-bits signed value. Use br() instruction with it to check icc. |
2980 // Load 32-bits signed value. Use br() instruction with it to check icc. |
2981 __ lduw(G3_src_klass, lh_offset, G5_lh); |
2981 __ lduw(G3_src_klass, lh_offset, G5_lh); |
2982 |
2982 |
2983 if (UseCompressedKlassPointers) { |
2983 if (UseCompressedClassPointers) { |
2984 __ load_klass(dst, G4_dst_klass); |
2984 __ load_klass(dst, G4_dst_klass); |
2985 } |
2985 } |
2986 // Handle objArrays completely differently... |
2986 // Handle objArrays completely differently... |
2987 juint objArray_lh = Klass::array_layout_helper(T_OBJECT); |
2987 juint objArray_lh = Klass::array_layout_helper(T_OBJECT); |
2988 __ set(objArray_lh, O5_temp); |
2988 __ set(objArray_lh, O5_temp); |
2989 __ cmp(G5_lh, O5_temp); |
2989 __ cmp(G5_lh, O5_temp); |
2990 __ br(Assembler::equal, false, Assembler::pt, L_objArray); |
2990 __ br(Assembler::equal, false, Assembler::pt, L_objArray); |
2991 if (UseCompressedKlassPointers) { |
2991 if (UseCompressedClassPointers) { |
2992 __ delayed()->nop(); |
2992 __ delayed()->nop(); |
2993 } else { |
2993 } else { |
2994 __ delayed()->ld_ptr(dst, oopDesc::klass_offset_in_bytes(), G4_dst_klass); |
2994 __ delayed()->ld_ptr(dst, oopDesc::klass_offset_in_bytes(), G4_dst_klass); |
2995 } |
2995 } |
2996 |
2996 |