< prev index next >

src/hotspot/cpu/x86/c1_Runtime1_x86.cpp

Print this page

*** 1101,1132 **** } break; case new_type_array_id: case new_object_array_id: { Register length = rbx; // Incoming Register klass = rdx; // Incoming Register obj = rax; // Result if (id == new_type_array_id) { __ set_info("new_type_array", dont_gc_arguments); ! } else { __ set_info("new_object_array", dont_gc_arguments); } #ifdef ASSERT // assert object type is really an array of the proper kind { Label ok; Register t0 = obj; __ movl(t0, Address(klass, Klass::layout_helper_offset())); __ sarl(t0, Klass::_lh_array_tag_shift); ! int tag = ((id == new_type_array_id) ! ? Klass::_lh_array_tag_type_value ! : Klass::_lh_array_tag_obj_value); ! __ cmpl(t0, tag); __ jcc(Assembler::equal, ok); __ stop("assert(is an array klass)"); __ should_not_reach_here(); __ bind(ok); } --- 1101,1136 ---- } break; case new_type_array_id: case new_object_array_id: + case new_value_array_id: { Register length = rbx; // Incoming Register klass = rdx; // Incoming Register obj = rax; // Result if (id == new_type_array_id) { __ set_info("new_type_array", dont_gc_arguments); ! } else if (id == new_object_array_id) { __ set_info("new_object_array", dont_gc_arguments); + } else { + __ set_info("new_value_array", dont_gc_arguments); } #ifdef ASSERT // assert object type is really an array of the proper kind { Label ok; Register t0 = obj; __ movl(t0, Address(klass, Klass::layout_helper_offset())); __ sarl(t0, Klass::_lh_array_tag_shift); ! switch (id) { ! case new_type_array_id: __ cmpl(t0, Klass::_lh_array_tag_type_value); break; ! case new_object_array_id: __ cmpl(t0, Klass::_lh_array_tag_obj_value); break; ! case new_value_array_id: __ cmpl(t0, Klass::_lh_array_tag_vt_value); break; ! } __ jcc(Assembler::equal, ok); __ stop("assert(is an array klass)"); __ should_not_reach_here(); __ bind(ok); }
*** 1177,1186 **** --- 1181,1191 ---- OopMap* map = save_live_registers(sasm, 3); int call_offset; if (id == new_type_array_id) { call_offset = __ call_RT(obj, noreg, CAST_FROM_FN_PTR(address, new_type_array), klass, length); } else { + // Runtime1::new_object_array handles both object and value arrays call_offset = __ call_RT(obj, noreg, CAST_FROM_FN_PTR(address, new_object_array), klass, length); } oop_maps = new OopMapSet(); oop_maps->add_gc_map(call_offset, map);
< prev index next >