hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp
changeset 13952 e3cf184080bc
parent 13728 882756847a04
child 14631 526804361522
child 14583 d70ee55535f4
equal deleted inserted replaced
13918:b01a48301e67 13952:e3cf184080bc
  3089 #endif
  3089 #endif
  3090 
  3090 
  3091     arraycopy_range_checks(src, src_pos, dst, dst_pos, length,
  3091     arraycopy_range_checks(src, src_pos, dst, dst_pos, length,
  3092                            O5_temp, G4_dst_klass, L_failed);
  3092                            O5_temp, G4_dst_klass, L_failed);
  3093 
  3093 
  3094     // typeArrayKlass
  3094     // TypeArrayKlass
  3095     //
  3095     //
  3096     // src_addr = (src + array_header_in_bytes()) + (src_pos << log2elemsize);
  3096     // src_addr = (src + array_header_in_bytes()) + (src_pos << log2elemsize);
  3097     // dst_addr = (dst + array_header_in_bytes()) + (dst_pos << log2elemsize);
  3097     // dst_addr = (dst + array_header_in_bytes()) + (dst_pos << log2elemsize);
  3098     //
  3098     //
  3099 
  3099 
  3140     }
  3140     }
  3141 #endif
  3141 #endif
  3142     __ br(Assembler::always, false, Assembler::pt, entry_jlong_arraycopy);
  3142     __ br(Assembler::always, false, Assembler::pt, entry_jlong_arraycopy);
  3143     __ delayed()->signx(length, count); // length
  3143     __ delayed()->signx(length, count); // length
  3144 
  3144 
  3145     // objArrayKlass
  3145     // ObjArrayKlass
  3146   __ BIND(L_objArray);
  3146   __ BIND(L_objArray);
  3147     // live at this point:  G3_src_klass, G4_dst_klass, src[_pos], dst[_pos], length
  3147     // live at this point:  G3_src_klass, G4_dst_klass, src[_pos], dst[_pos], length
  3148 
  3148 
  3149     Label L_plain_copy, L_checkcast_copy;
  3149     Label L_plain_copy, L_checkcast_copy;
  3150     //  test array classes for subtyping
  3150     //  test array classes for subtyping
  3196       int sco_offset = in_bytes(Klass::super_check_offset_offset());
  3196       int sco_offset = in_bytes(Klass::super_check_offset_offset());
  3197       __ lduw(G4_dst_klass, sco_offset, sco_temp);
  3197       __ lduw(G4_dst_klass, sco_offset, sco_temp);
  3198       generate_type_check(G3_src_klass, sco_temp, G4_dst_klass,
  3198       generate_type_check(G3_src_klass, sco_temp, G4_dst_klass,
  3199                           O5_temp, L_plain_copy);
  3199                           O5_temp, L_plain_copy);
  3200 
  3200 
  3201       // Fetch destination element klass from the objArrayKlass header.
  3201       // Fetch destination element klass from the ObjArrayKlass header.
  3202       int ek_offset = in_bytes(objArrayKlass::element_klass_offset());
  3202       int ek_offset = in_bytes(ObjArrayKlass::element_klass_offset());
  3203 
  3203 
  3204       // the checkcast_copy loop needs two extra arguments:
  3204       // the checkcast_copy loop needs two extra arguments:
  3205       __ ld_ptr(G4_dst_klass, ek_offset, O4);   // dest elem klass
  3205       __ ld_ptr(G4_dst_klass, ek_offset, O4);   // dest elem klass
  3206       // lduw(O4, sco_offset, O3);              // sco of elem klass
  3206       // lduw(O4, sco_offset, O3);              // sco of elem klass
  3207 
  3207