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

src/cpu/sparc/vm/c1_Runtime1_sparc.cpp

Print this page




 583       }
 584       break;
 585 
 586     case new_multi_array_id:
 587       { // O0: klass
 588         // O1: rank
 589         // O2: address of 1st dimension
 590         __ set_info("new_multi_array", dont_gc_arguments);
 591         oop_maps = generate_stub_call(sasm, I0, CAST_FROM_FN_PTR(address, new_multi_array), I0, I1, I2);
 592         // I0 -> O0: new multi array
 593       }
 594       break;
 595 
 596     case register_finalizer_id:
 597       {
 598         __ set_info("register_finalizer", dont_gc_arguments);
 599 
 600         // load the klass and check the has finalizer flag
 601         Label register_finalizer;
 602         Register t = O1;
 603         __ ld_ptr(O0, oopDesc::klass_offset_in_bytes(), t);
 604         __ ld(t, Klass::access_flags_offset_in_bytes() + sizeof(oopDesc), t);
 605         __ set(JVM_ACC_HAS_FINALIZER, G3);
 606         __ andcc(G3, t, G0);
 607         __ br(Assembler::notZero, false, Assembler::pt, register_finalizer);
 608         __ delayed()->nop();
 609 
 610         // do a leaf return
 611         __ retl();
 612         __ delayed()->nop();
 613 
 614         __ bind(register_finalizer);
 615         OopMap* oop_map = save_live_registers(sasm);
 616         int call_offset = __ call_RT(noreg, noreg,
 617                                      CAST_FROM_FN_PTR(address, SharedRuntime::register_finalizer), I0);
 618         oop_maps = new OopMapSet();
 619         oop_maps->add_gc_map(call_offset, oop_map);
 620 
 621         // Now restore all the live registers
 622         restore_live_registers(sasm);
 623 




 583       }
 584       break;
 585 
 586     case new_multi_array_id:
 587       { // O0: klass
 588         // O1: rank
 589         // O2: address of 1st dimension
 590         __ set_info("new_multi_array", dont_gc_arguments);
 591         oop_maps = generate_stub_call(sasm, I0, CAST_FROM_FN_PTR(address, new_multi_array), I0, I1, I2);
 592         // I0 -> O0: new multi array
 593       }
 594       break;
 595 
 596     case register_finalizer_id:
 597       {
 598         __ set_info("register_finalizer", dont_gc_arguments);
 599 
 600         // load the klass and check the has finalizer flag
 601         Label register_finalizer;
 602         Register t = O1;
 603         __ load_klass(O0, t);
 604         __ ld(t, Klass::access_flags_offset_in_bytes() + sizeof(oopDesc), t);
 605         __ set(JVM_ACC_HAS_FINALIZER, G3);
 606         __ andcc(G3, t, G0);
 607         __ br(Assembler::notZero, false, Assembler::pt, register_finalizer);
 608         __ delayed()->nop();
 609 
 610         // do a leaf return
 611         __ retl();
 612         __ delayed()->nop();
 613 
 614         __ bind(register_finalizer);
 615         OopMap* oop_map = save_live_registers(sasm);
 616         int call_offset = __ call_RT(noreg, noreg,
 617                                      CAST_FROM_FN_PTR(address, SharedRuntime::register_finalizer), I0);
 618         oop_maps = new OopMapSet();
 619         oop_maps->add_gc_map(call_offset, oop_map);
 620 
 621         // Now restore all the live registers
 622         restore_live_registers(sasm);
 623 


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