src/cpu/sparc/vm/c1_Runtime1_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8086053-search Sdiff src/cpu/sparc/vm

src/cpu/sparc/vm/c1_Runtime1_sparc.cpp

Print this page




 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


src/cpu/sparc/vm/c1_Runtime1_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File