< prev index next >

src/hotspot/cpu/arm/c1_Runtime1_arm.cpp

Print this page

609 
610         // We get here if an equal cache entry is found
611         __ str(R1, Address(R0, Klass::secondary_super_cache_offset()));
612         __ mov(R0, 1);
613         __ raw_pop_and_ret(R2, R3);
614 
615         // A cache entry not found - return false
616         __ bind(miss);
617         __ mov(R0, 0);
618         __ raw_pop_and_ret(R2, R3);
619       }
620       break;
621 
622     case monitorenter_nofpu_id:
623       save_fpu_registers = false;
624       // fall through
625     case monitorenter_id:
626       {
627         __ set_info("monitorenter", dont_gc_arguments);
628         const Register obj  = R1;
629         const Register lock = R2;
630         OopMap* map = save_live_registers(sasm, save_fpu_registers);
631         __ ldr(obj, Address(SP, arg1_offset));
632         __ ldr(lock, Address(SP, arg2_offset));
633         int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, monitorenter), obj, lock);
634         oop_maps = new OopMapSet();
635         oop_maps->add_gc_map(call_offset, map);
636         restore_live_registers(sasm, save_fpu_registers);
637       }
638       break;
639 
640     case monitorexit_nofpu_id:
641       save_fpu_registers = false;
642       // fall through
643     case monitorexit_id:
644       {
645         __ set_info("monitorexit", dont_gc_arguments);
646         const Register lock = R1;
647         OopMap* map = save_live_registers(sasm, save_fpu_registers);
648         __ ldr(lock, Address(SP, arg1_offset));
649         int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, monitorexit), lock);
650         oop_maps = new OopMapSet();
651         oop_maps->add_gc_map(call_offset, map);
652         restore_live_registers(sasm, save_fpu_registers);
653       }
654       break;
655 
656     case deoptimize_id:
657       {
658         __ set_info("deoptimize", dont_gc_arguments);
659         OopMap* oop_map = save_live_registers(sasm);
660         const Register trap_request = R1;
661         __ ldr(trap_request, Address(SP, arg1_offset));
662         int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, deoptimize), trap_request);
663         oop_maps = new OopMapSet();
664         oop_maps->add_gc_map(call_offset, oop_map);
665         restore_live_registers_without_return(sasm);
666         DeoptimizationBlob* deopt_blob = SharedRuntime::deopt_blob();
667         assert(deopt_blob != NULL, "deoptimization blob must have been created");
668         __ jump(deopt_blob->unpack_with_reexecution(), relocInfo::runtime_call_type, noreg);
669       }

609 
610         // We get here if an equal cache entry is found
611         __ str(R1, Address(R0, Klass::secondary_super_cache_offset()));
612         __ mov(R0, 1);
613         __ raw_pop_and_ret(R2, R3);
614 
615         // A cache entry not found - return false
616         __ bind(miss);
617         __ mov(R0, 0);
618         __ raw_pop_and_ret(R2, R3);
619       }
620       break;
621 
622     case monitorenter_nofpu_id:
623       save_fpu_registers = false;
624       // fall through
625     case monitorenter_id:
626       {
627         __ set_info("monitorenter", dont_gc_arguments);
628         const Register obj  = R1;

629         OopMap* map = save_live_registers(sasm, save_fpu_registers);
630         __ ldr(obj, Address(SP, arg1_offset));
631         int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, monitorenter), obj);

632         oop_maps = new OopMapSet();
633         oop_maps->add_gc_map(call_offset, map);
634         restore_live_registers(sasm, save_fpu_registers);
635       }
636       break;
637 
638     case monitorexit_nofpu_id:
639       save_fpu_registers = false;
640       // fall through
641     case monitorexit_id:
642       {
643         __ set_info("monitorexit", dont_gc_arguments);
644         const Register obj = R1;
645         OopMap* map = save_live_registers(sasm, save_fpu_registers);
646         __ ldr(obj, Address(SP, arg1_offset));
647         int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, monitorexit), obj);
648         oop_maps = new OopMapSet();
649         oop_maps->add_gc_map(call_offset, map);
650         restore_live_registers(sasm, save_fpu_registers);
651       }
652       break;
653 
654     case deoptimize_id:
655       {
656         __ set_info("deoptimize", dont_gc_arguments);
657         OopMap* oop_map = save_live_registers(sasm);
658         const Register trap_request = R1;
659         __ ldr(trap_request, Address(SP, arg1_offset));
660         int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, deoptimize), trap_request);
661         oop_maps = new OopMapSet();
662         oop_maps->add_gc_map(call_offset, oop_map);
663         restore_live_registers_without_return(sasm);
664         DeoptimizationBlob* deopt_blob = SharedRuntime::deopt_blob();
665         assert(deopt_blob != NULL, "deoptimization blob must have been created");
666         __ jump(deopt_blob->unpack_with_reexecution(), relocInfo::runtime_call_type, noreg);
667       }
< prev index next >