418 __ br(Assembler::zero, false, Assembler::pn, ok); 419 __ delayed()->nop(); 420 __ bind(not_ok); 421 __ stop("assert(can be fast path allocated)"); 422 __ should_not_reach_here(); 423 __ bind(ok); 424 } 425 #endif // ASSERT 426 // if we got here then the TLAB allocation failed, so try 427 // refilling the TLAB or allocating directly from eden. 428 Label retry_tlab, try_eden; 429 __ tlab_refill(retry_tlab, try_eden, slow_path); // preserves G5_klass 430 431 __ bind(retry_tlab); 432 433 // get the instance size 434 __ ld(G5_klass, in_bytes(Klass::layout_helper_offset()), G1_obj_size); 435 436 __ tlab_allocate(O0_obj, G1_obj_size, 0, G3_t1, slow_path); 437 438 __ initialize_object(O0_obj, G5_klass, G1_obj_size, 0, G3_t1, G4_t2); 439 __ verify_oop(O0_obj); 440 __ mov(O0, I0); 441 __ ret(); 442 __ delayed()->restore(); 443 444 __ bind(try_eden); 445 // get the instance size 446 __ ld(G5_klass, in_bytes(Klass::layout_helper_offset()), G1_obj_size); 447 __ eden_allocate(O0_obj, G1_obj_size, 0, G3_t1, G4_t2, slow_path); 448 __ incr_allocated_bytes(G1_obj_size, G3_t1, G4_t2); 449 450 __ initialize_object(O0_obj, G5_klass, G1_obj_size, 0, G3_t1, G4_t2); 451 __ verify_oop(O0_obj); 452 __ mov(O0, I0); 453 __ ret(); 454 __ delayed()->restore(); 455 456 __ bind(slow_path); 457 458 // pop this frame so generate_stub_call can push it's own 459 __ restore(); 460 } 461 462 oop_maps = generate_stub_call(sasm, I0, CAST_FROM_FN_PTR(address, new_instance), G5_klass); 463 // I0->O0: new instance 464 } 465 466 break; 467 468 case counter_overflow_id: 469 // G4 contains bci, G5 contains method 470 oop_maps = generate_stub_call(sasm, noreg, CAST_FROM_FN_PTR(address, counter_overflow), G4, G5); 525 Label retry_tlab, try_eden; 526 __ tlab_refill(retry_tlab, try_eden, slow_path); // preserves G4_length and G5_klass 527 528 __ bind(retry_tlab); 529 530 // get the allocation size: (length << (layout_helper & 0x1F)) + header_size 531 __ ld(klass_lh, G3_t1); 532 __ sll(G4_length, G3_t1, G1_arr_size); 533 __ srl(G3_t1, Klass::_lh_header_size_shift, G3_t1); 534 __ and3(G3_t1, Klass::_lh_header_size_mask, G3_t1); 535 __ add(G1_arr_size, G3_t1, G1_arr_size); 536 __ add(G1_arr_size, MinObjAlignmentInBytesMask, G1_arr_size); // align up 537 __ and3(G1_arr_size, ~MinObjAlignmentInBytesMask, G1_arr_size); 538 539 __ tlab_allocate(O0_obj, G1_arr_size, 0, G3_t1, slow_path); // preserves G1_arr_size 540 541 __ initialize_header(O0_obj, G5_klass, G4_length, G3_t1, O1_t2); 542 __ ldub(klass_lh, G3_t1, klass_lh_header_size_offset); 543 __ sub(G1_arr_size, G3_t1, O1_t2); // body length 544 __ add(O0_obj, G3_t1, G3_t1); // body start 545 __ initialize_body(G3_t1, O1_t2); 546 __ verify_oop(O0_obj); 547 __ retl(); 548 __ delayed()->nop(); 549 550 __ bind(try_eden); 551 // get the allocation size: (length << (layout_helper & 0x1F)) + header_size 552 __ ld(klass_lh, G3_t1); 553 __ sll(G4_length, G3_t1, G1_arr_size); 554 __ srl(G3_t1, Klass::_lh_header_size_shift, G3_t1); 555 __ and3(G3_t1, Klass::_lh_header_size_mask, G3_t1); 556 __ add(G1_arr_size, G3_t1, G1_arr_size); 557 __ add(G1_arr_size, MinObjAlignmentInBytesMask, G1_arr_size); 558 __ and3(G1_arr_size, ~MinObjAlignmentInBytesMask, G1_arr_size); 559 560 __ eden_allocate(O0_obj, G1_arr_size, 0, G3_t1, O1_t2, slow_path); // preserves G1_arr_size 561 __ incr_allocated_bytes(G1_arr_size, G3_t1, O1_t2); 562 563 __ initialize_header(O0_obj, G5_klass, G4_length, G3_t1, O1_t2); 564 __ ldub(klass_lh, G3_t1, klass_lh_header_size_offset); 565 __ sub(G1_arr_size, G3_t1, O1_t2); // body length | 418 __ br(Assembler::zero, false, Assembler::pn, ok); 419 __ delayed()->nop(); 420 __ bind(not_ok); 421 __ stop("assert(can be fast path allocated)"); 422 __ should_not_reach_here(); 423 __ bind(ok); 424 } 425 #endif // ASSERT 426 // if we got here then the TLAB allocation failed, so try 427 // refilling the TLAB or allocating directly from eden. 428 Label retry_tlab, try_eden; 429 __ tlab_refill(retry_tlab, try_eden, slow_path); // preserves G5_klass 430 431 __ bind(retry_tlab); 432 433 // get the instance size 434 __ ld(G5_klass, in_bytes(Klass::layout_helper_offset()), G1_obj_size); 435 436 __ tlab_allocate(O0_obj, G1_obj_size, 0, G3_t1, slow_path); 437 438 __ initialize_object(O0_obj, G5_klass, G1_obj_size, 0, G3_t1, G4_t2, /* is_tlab_allocated */ true); 439 __ verify_oop(O0_obj); 440 __ mov(O0, I0); 441 __ ret(); 442 __ delayed()->restore(); 443 444 __ bind(try_eden); 445 // get the instance size 446 __ ld(G5_klass, in_bytes(Klass::layout_helper_offset()), G1_obj_size); 447 __ eden_allocate(O0_obj, G1_obj_size, 0, G3_t1, G4_t2, slow_path); 448 __ incr_allocated_bytes(G1_obj_size, G3_t1, G4_t2); 449 450 __ initialize_object(O0_obj, G5_klass, G1_obj_size, 0, G3_t1, G4_t2, /* is_tlab_allocated */ false); 451 __ verify_oop(O0_obj); 452 __ mov(O0, I0); 453 __ ret(); 454 __ delayed()->restore(); 455 456 __ bind(slow_path); 457 458 // pop this frame so generate_stub_call can push it's own 459 __ restore(); 460 } 461 462 oop_maps = generate_stub_call(sasm, I0, CAST_FROM_FN_PTR(address, new_instance), G5_klass); 463 // I0->O0: new instance 464 } 465 466 break; 467 468 case counter_overflow_id: 469 // G4 contains bci, G5 contains method 470 oop_maps = generate_stub_call(sasm, noreg, CAST_FROM_FN_PTR(address, counter_overflow), G4, G5); 525 Label retry_tlab, try_eden; 526 __ tlab_refill(retry_tlab, try_eden, slow_path); // preserves G4_length and G5_klass 527 528 __ bind(retry_tlab); 529 530 // get the allocation size: (length << (layout_helper & 0x1F)) + header_size 531 __ ld(klass_lh, G3_t1); 532 __ sll(G4_length, G3_t1, G1_arr_size); 533 __ srl(G3_t1, Klass::_lh_header_size_shift, G3_t1); 534 __ and3(G3_t1, Klass::_lh_header_size_mask, G3_t1); 535 __ add(G1_arr_size, G3_t1, G1_arr_size); 536 __ add(G1_arr_size, MinObjAlignmentInBytesMask, G1_arr_size); // align up 537 __ and3(G1_arr_size, ~MinObjAlignmentInBytesMask, G1_arr_size); 538 539 __ tlab_allocate(O0_obj, G1_arr_size, 0, G3_t1, slow_path); // preserves G1_arr_size 540 541 __ initialize_header(O0_obj, G5_klass, G4_length, G3_t1, O1_t2); 542 __ ldub(klass_lh, G3_t1, klass_lh_header_size_offset); 543 __ sub(G1_arr_size, G3_t1, O1_t2); // body length 544 __ add(O0_obj, G3_t1, G3_t1); // body start 545 if (!ZeroTLAB) { 546 __ initialize_body(G3_t1, O1_t2); 547 } 548 __ verify_oop(O0_obj); 549 __ retl(); 550 __ delayed()->nop(); 551 552 __ bind(try_eden); 553 // get the allocation size: (length << (layout_helper & 0x1F)) + header_size 554 __ ld(klass_lh, G3_t1); 555 __ sll(G4_length, G3_t1, G1_arr_size); 556 __ srl(G3_t1, Klass::_lh_header_size_shift, G3_t1); 557 __ and3(G3_t1, Klass::_lh_header_size_mask, G3_t1); 558 __ add(G1_arr_size, G3_t1, G1_arr_size); 559 __ add(G1_arr_size, MinObjAlignmentInBytesMask, G1_arr_size); 560 __ and3(G1_arr_size, ~MinObjAlignmentInBytesMask, G1_arr_size); 561 562 __ eden_allocate(O0_obj, G1_arr_size, 0, G3_t1, O1_t2, slow_path); // preserves G1_arr_size 563 __ incr_allocated_bytes(G1_arr_size, G3_t1, O1_t2); 564 565 __ initialize_header(O0_obj, G5_klass, G4_length, G3_t1, O1_t2); 566 __ ldub(klass_lh, G3_t1, klass_lh_header_size_offset); 567 __ sub(G1_arr_size, G3_t1, O1_t2); // body length |