1879 add_debug_info_for_null_check_here(op->info_for_exception()); |
1879 add_debug_info_for_null_check_here(op->info_for_exception()); |
1880 __ load_klass(k_RInfo, array); |
1880 __ load_klass(k_RInfo, array); |
1881 __ load_klass(klass_RInfo, value); |
1881 __ load_klass(klass_RInfo, value); |
1882 |
1882 |
1883 // get instance klass (it's already uncompressed) |
1883 // get instance klass (it's already uncompressed) |
1884 __ movptr(k_RInfo, Address(k_RInfo, objArrayKlass::element_klass_offset())); |
1884 __ movptr(k_RInfo, Address(k_RInfo, ObjArrayKlass::element_klass_offset())); |
1885 // perform the fast part of the checking logic |
1885 // perform the fast part of the checking logic |
1886 __ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, success_target, failure_target, NULL); |
1886 __ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, success_target, failure_target, NULL); |
1887 // call out-of-line instance of __ check_klass_subtype_slow_path(...): |
1887 // call out-of-line instance of __ check_klass_subtype_slow_path(...): |
1888 __ push(klass_RInfo); |
1888 __ push(klass_RInfo); |
1889 __ push(k_RInfo); |
1889 __ push(k_RInfo); |
3347 store_parameter(src_pos, 3); |
3347 store_parameter(src_pos, 3); |
3348 store_parameter(src, 4); |
3348 store_parameter(src, 4); |
3349 |
3349 |
3350 #ifndef _LP64 |
3350 #ifndef _LP64 |
3351 __ movptr(tmp, dst_klass_addr); |
3351 __ movptr(tmp, dst_klass_addr); |
3352 __ movptr(tmp, Address(tmp, objArrayKlass::element_klass_offset())); |
3352 __ movptr(tmp, Address(tmp, ObjArrayKlass::element_klass_offset())); |
3353 __ push(tmp); |
3353 __ push(tmp); |
3354 __ movl(tmp, Address(tmp, Klass::super_check_offset_offset())); |
3354 __ movl(tmp, Address(tmp, Klass::super_check_offset_offset())); |
3355 __ push(tmp); |
3355 __ push(tmp); |
3356 __ push(length); |
3356 __ push(length); |
3357 __ lea(tmp, Address(dst, dst_pos, scale, arrayOopDesc::base_offset_in_bytes(basic_type))); |
3357 __ lea(tmp, Address(dst, dst_pos, scale, arrayOopDesc::base_offset_in_bytes(basic_type))); |
3373 |
3373 |
3374 #ifdef _WIN64 |
3374 #ifdef _WIN64 |
3375 // Allocate abi space for args but be sure to keep stack aligned |
3375 // Allocate abi space for args but be sure to keep stack aligned |
3376 __ subptr(rsp, 6*wordSize); |
3376 __ subptr(rsp, 6*wordSize); |
3377 __ load_klass(c_rarg3, dst); |
3377 __ load_klass(c_rarg3, dst); |
3378 __ movptr(c_rarg3, Address(c_rarg3, objArrayKlass::element_klass_offset())); |
3378 __ movptr(c_rarg3, Address(c_rarg3, ObjArrayKlass::element_klass_offset())); |
3379 store_parameter(c_rarg3, 4); |
3379 store_parameter(c_rarg3, 4); |
3380 __ movl(c_rarg3, Address(c_rarg3, Klass::super_check_offset_offset())); |
3380 __ movl(c_rarg3, Address(c_rarg3, Klass::super_check_offset_offset())); |
3381 __ call(RuntimeAddress(copyfunc_addr)); |
3381 __ call(RuntimeAddress(copyfunc_addr)); |
3382 __ addptr(rsp, 6*wordSize); |
3382 __ addptr(rsp, 6*wordSize); |
3383 #else |
3383 #else |
3384 __ load_klass(c_rarg4, dst); |
3384 __ load_klass(c_rarg4, dst); |
3385 __ movptr(c_rarg4, Address(c_rarg4, objArrayKlass::element_klass_offset())); |
3385 __ movptr(c_rarg4, Address(c_rarg4, ObjArrayKlass::element_klass_offset())); |
3386 __ movl(c_rarg3, Address(c_rarg4, Klass::super_check_offset_offset())); |
3386 __ movl(c_rarg3, Address(c_rarg4, Klass::super_check_offset_offset())); |
3387 __ call(RuntimeAddress(copyfunc_addr)); |
3387 __ call(RuntimeAddress(copyfunc_addr)); |
3388 #endif |
3388 #endif |
3389 |
3389 |
3390 #endif |
3390 #endif |