2368 op->object_size(),
2369 op->klass()->as_register(),
2370 *op->stub()->entry());
2371 __ bind(*op->stub()->continuation());
2372 __ verify_oop(op->obj()->as_register(), FILE_AND_LINE);
2373 }
2374
2375 void LIR_Assembler::emit_alloc_array(LIR_OpAllocArray* op) {
2376 Register len = op->len()->as_register();
2377 __ move_reg_if_needed(len, T_LONG, len, T_INT); // sign extend
2378
2379 if (UseSlowPath ||
2380 (!UseFastNewObjectArray && (is_reference_type(op->type()))) ||
2381 (!UseFastNewTypeArray && (!is_reference_type(op->type())))) {
2382 __ z_brul(*op->stub()->entry());
2383 } else {
2384 __ allocate_array(op->obj()->as_register(),
2385 op->len()->as_register(),
2386 op->tmp1()->as_register(),
2387 op->tmp2()->as_register(),
2388 arrayOopDesc::header_size(op->type()),
2389 type2aelembytes(op->type()),
2390 op->klass()->as_register(),
2391 *op->stub()->entry());
2392 }
2393 __ bind(*op->stub()->continuation());
2394 }
2395
2396 void LIR_Assembler::type_profile_helper(Register mdo, ciMethodData *md, ciProfileData *data,
2397 Register recv, Register tmp1, Label* update_done) {
2398 uint i;
2399 for (i = 0; i < VirtualCallData::row_limit(); i++) {
2400 Label next_test;
2401 // See if the receiver is receiver[n].
2402 Address receiver_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)));
2403 __ z_cg(recv, receiver_addr);
2404 __ z_brne(next_test);
2405 Address data_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_count_offset(i)));
2406 __ add2mem_64(data_addr, DataLayout::counter_increment, tmp1);
2407 __ branch_optimized(Assembler::bcondAlways, *update_done);
2408 __ bind(next_test);
|
2368 op->object_size(),
2369 op->klass()->as_register(),
2370 *op->stub()->entry());
2371 __ bind(*op->stub()->continuation());
2372 __ verify_oop(op->obj()->as_register(), FILE_AND_LINE);
2373 }
2374
2375 void LIR_Assembler::emit_alloc_array(LIR_OpAllocArray* op) {
2376 Register len = op->len()->as_register();
2377 __ move_reg_if_needed(len, T_LONG, len, T_INT); // sign extend
2378
2379 if (UseSlowPath ||
2380 (!UseFastNewObjectArray && (is_reference_type(op->type()))) ||
2381 (!UseFastNewTypeArray && (!is_reference_type(op->type())))) {
2382 __ z_brul(*op->stub()->entry());
2383 } else {
2384 __ allocate_array(op->obj()->as_register(),
2385 op->len()->as_register(),
2386 op->tmp1()->as_register(),
2387 op->tmp2()->as_register(),
2388 arrayOopDesc::base_offset_in_bytes(op->type()),
2389 type2aelembytes(op->type()),
2390 op->klass()->as_register(),
2391 *op->stub()->entry());
2392 }
2393 __ bind(*op->stub()->continuation());
2394 }
2395
2396 void LIR_Assembler::type_profile_helper(Register mdo, ciMethodData *md, ciProfileData *data,
2397 Register recv, Register tmp1, Label* update_done) {
2398 uint i;
2399 for (i = 0; i < VirtualCallData::row_limit(); i++) {
2400 Label next_test;
2401 // See if the receiver is receiver[n].
2402 Address receiver_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)));
2403 __ z_cg(recv, receiver_addr);
2404 __ z_brne(next_test);
2405 Address data_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_count_offset(i)));
2406 __ add2mem_64(data_addr, DataLayout::counter_increment, tmp1);
2407 __ branch_optimized(Assembler::bcondAlways, *update_done);
2408 __ bind(next_test);
|