425 }
426 break;
427
428 case C1StubId::counter_overflow_id:
429 // Bci and method are on stack.
430 oop_maps = stub_call_with_stack_parms(sasm, noreg, CAST_FROM_FN_PTR(address, counter_overflow), 2);
431 break;
432
433 case C1StubId::new_type_array_id:
434 case C1StubId::new_object_array_id:
435 {
436 if (id == C1StubId::new_type_array_id) {
437 __ set_info("new_type_array", dont_gc_arguments);
438 } else {
439 __ set_info("new_object_array", dont_gc_arguments);
440 }
441
442 #ifdef ASSERT
443 // Assert object type is really an array of the proper kind.
444 {
445 int tag = (id == C1StubId::new_type_array_id) ? Klass::_lh_array_tag_type_value : Klass::_lh_array_tag_obj_value;
446 Label ok;
447 __ lwz(R0, in_bytes(Klass::layout_helper_offset()), R4_ARG2);
448 __ srawi(R0, R0, Klass::_lh_array_tag_shift);
449 __ cmpwi(CR0, R0, tag);
450 __ beq(CR0, ok);
451 __ stop("assert(is an array klass)");
452 __ should_not_reach_here();
453 __ bind(ok);
454 }
455 #endif // ASSERT
456
457 // We don't support eden allocation.
458
459 if (id == C1StubId::new_type_array_id) {
460 oop_maps = generate_stub_call(sasm, R3_RET, CAST_FROM_FN_PTR(address, new_type_array), R4_ARG2, R5_ARG3);
461 } else {
462 oop_maps = generate_stub_call(sasm, R3_RET, CAST_FROM_FN_PTR(address, new_object_array), R4_ARG2, R5_ARG3);
463 }
464 }
465 break;
|
425 }
426 break;
427
428 case C1StubId::counter_overflow_id:
429 // Bci and method are on stack.
430 oop_maps = stub_call_with_stack_parms(sasm, noreg, CAST_FROM_FN_PTR(address, counter_overflow), 2);
431 break;
432
433 case C1StubId::new_type_array_id:
434 case C1StubId::new_object_array_id:
435 {
436 if (id == C1StubId::new_type_array_id) {
437 __ set_info("new_type_array", dont_gc_arguments);
438 } else {
439 __ set_info("new_object_array", dont_gc_arguments);
440 }
441
442 #ifdef ASSERT
443 // Assert object type is really an array of the proper kind.
444 {
445 int tag = (id == C1StubId::new_type_array_id) ? Klass::_lh_array_tag_type_value : Klass::_lh_array_tag_ref_value;
446 Label ok;
447 __ lwz(R0, in_bytes(Klass::layout_helper_offset()), R4_ARG2);
448 __ srawi(R0, R0, Klass::_lh_array_tag_shift);
449 __ cmpwi(CR0, R0, tag);
450 __ beq(CR0, ok);
451 __ stop("assert(is an array klass)");
452 __ should_not_reach_here();
453 __ bind(ok);
454 }
455 #endif // ASSERT
456
457 // We don't support eden allocation.
458
459 if (id == C1StubId::new_type_array_id) {
460 oop_maps = generate_stub_call(sasm, R3_RET, CAST_FROM_FN_PTR(address, new_type_array), R4_ARG2, R5_ARG3);
461 } else {
462 oop_maps = generate_stub_call(sasm, R3_RET, CAST_FROM_FN_PTR(address, new_object_array), R4_ARG2, R5_ARG3);
463 }
464 }
465 break;
|