3496
3497 // Puts allocated obj ref onto the expression stack.
3498 void TemplateTable::_new() {
3499 transition(vtos, atos);
3500
3501 Label Lslow_case,
3502 Ldone,
3503 Linitialize_header,
3504 Lallocate_shared,
3505 Linitialize_object; // Including clearing the fields.
3506
3507 const Register RallocatedObject = R17_tos,
3508 RinstanceKlass = R9_ARG7,
3509 Rscratch = R11_scratch1,
3510 Roffset = R8_ARG6,
3511 Rinstance_size = Roffset,
3512 Rcpool = R4_ARG2,
3513 Rtags = R3_ARG1,
3514 Rindex = R5_ARG3;
3515
3516 const bool allow_shared_alloc = Universe::heap()->supports_inline_contig_alloc() && !CMSIncrementalMode;
3517
3518 // --------------------------------------------------------------------------
3519 // Check if fast case is possible.
3520
3521 // Load pointers to const pool and const pool's tags array.
3522 __ get_cpool_and_tags(Rcpool, Rtags);
3523 // Load index of constant pool entry.
3524 __ get_2_byte_integer_at_bcp(1, Rindex, InterpreterMacroAssembler::Unsigned);
3525
3526 if (UseTLAB) {
3527 // Make sure the class we're about to instantiate has been resolved
3528 // This is done before loading instanceKlass to be consistent with the order
3529 // how Constant Pool is updated (see ConstantPoolCache::klass_at_put).
3530 __ addi(Rtags, Rtags, Array<u1>::base_offset_in_bytes());
3531 __ lbzx(Rtags, Rindex, Rtags);
3532
3533 __ cmpdi(CCR0, Rtags, JVM_CONSTANT_Class);
3534 __ bne(CCR0, Lslow_case);
3535
3536 // Get instanceKlass (load from Rcpool + sizeof(ConstantPool) + Rindex*BytesPerWord).
|
3496
3497 // Puts allocated obj ref onto the expression stack.
3498 void TemplateTable::_new() {
3499 transition(vtos, atos);
3500
3501 Label Lslow_case,
3502 Ldone,
3503 Linitialize_header,
3504 Lallocate_shared,
3505 Linitialize_object; // Including clearing the fields.
3506
3507 const Register RallocatedObject = R17_tos,
3508 RinstanceKlass = R9_ARG7,
3509 Rscratch = R11_scratch1,
3510 Roffset = R8_ARG6,
3511 Rinstance_size = Roffset,
3512 Rcpool = R4_ARG2,
3513 Rtags = R3_ARG1,
3514 Rindex = R5_ARG3;
3515
3516 const bool allow_shared_alloc = Universe::heap()->supports_inline_contig_alloc();
3517
3518 // --------------------------------------------------------------------------
3519 // Check if fast case is possible.
3520
3521 // Load pointers to const pool and const pool's tags array.
3522 __ get_cpool_and_tags(Rcpool, Rtags);
3523 // Load index of constant pool entry.
3524 __ get_2_byte_integer_at_bcp(1, Rindex, InterpreterMacroAssembler::Unsigned);
3525
3526 if (UseTLAB) {
3527 // Make sure the class we're about to instantiate has been resolved
3528 // This is done before loading instanceKlass to be consistent with the order
3529 // how Constant Pool is updated (see ConstantPoolCache::klass_at_put).
3530 __ addi(Rtags, Rtags, Array<u1>::base_offset_in_bytes());
3531 __ lbzx(Rtags, Rindex, Rtags);
3532
3533 __ cmpdi(CCR0, Rtags, JVM_CONSTANT_Class);
3534 __ bne(CCR0, Lslow_case);
3535
3536 // Get instanceKlass (load from Rcpool + sizeof(ConstantPool) + Rindex*BytesPerWord).
|