< prev index next >

src/cpu/x86/vm/interp_masm_x86_64.cpp

Print this page
rev 10719 : [backport] Fix up superfluous changes against upstream


 711 
 712     // Load object pointer into obj_reg %c_rarg3
 713     movptr(obj_reg, Address(lock_reg, obj_offset));
 714 
 715     if (UseBiasedLocking) {
 716       biased_locking_enter(lock_reg, obj_reg, swap_reg, rscratch1, false, done, &slow_case);
 717     }
 718 
 719     // Load immediate 1 into swap_reg %rax
 720     movl(swap_reg, 1);
 721 
 722     // Load (object->mark() | 1) into swap_reg %rax
 723     orptr(swap_reg, Address(obj_reg, 0));
 724 
 725     // Save (object->mark() | 1) into BasicLock's displaced header
 726     movptr(Address(lock_reg, mark_offset), swap_reg);
 727 
 728     assert(lock_offset == 0,
 729            "displached header must be first word in BasicObjectLock");
 730 
 731     // obj_reg has been checked a few lines up.
 732     if (os::is_MP()) lock();
 733     cmpxchgptr(lock_reg, Address(obj_reg, 0));
 734     if (PrintBiasedLockingStatistics) {
 735       cond_inc32(Assembler::zero,
 736                  ExternalAddress((address) BiasedLocking::fast_path_entry_count_addr()));
 737     }
 738     jcc(Assembler::zero, done);
 739 
 740     // Test if the oopMark is an obvious stack pointer, i.e.,
 741     //  1) (mark & 7) == 0, and
 742     //  2) rsp <= mark < mark + os::pagesize()
 743     //
 744     // These 3 tests can be done by evaluating the following
 745     // expression: ((mark - rsp) & (7 - os::vm_page_size())),
 746     // assuming both stack pointer and pagesize have their
 747     // least significant 3 bits clear.
 748     // NOTE: the oopMark is in swap_reg %rax as the result of cmpxchg
 749     subptr(swap_reg, rsp);
 750     andptr(swap_reg, 7 - os::vm_page_size());
 751 




 711 
 712     // Load object pointer into obj_reg %c_rarg3
 713     movptr(obj_reg, Address(lock_reg, obj_offset));
 714 
 715     if (UseBiasedLocking) {
 716       biased_locking_enter(lock_reg, obj_reg, swap_reg, rscratch1, false, done, &slow_case);
 717     }
 718 
 719     // Load immediate 1 into swap_reg %rax
 720     movl(swap_reg, 1);
 721 
 722     // Load (object->mark() | 1) into swap_reg %rax
 723     orptr(swap_reg, Address(obj_reg, 0));
 724 
 725     // Save (object->mark() | 1) into BasicLock's displaced header
 726     movptr(Address(lock_reg, mark_offset), swap_reg);
 727 
 728     assert(lock_offset == 0,
 729            "displached header must be first word in BasicObjectLock");
 730 

 731     if (os::is_MP()) lock();
 732     cmpxchgptr(lock_reg, Address(obj_reg, 0));
 733     if (PrintBiasedLockingStatistics) {
 734       cond_inc32(Assembler::zero,
 735                  ExternalAddress((address) BiasedLocking::fast_path_entry_count_addr()));
 736     }
 737     jcc(Assembler::zero, done);
 738 
 739     // Test if the oopMark is an obvious stack pointer, i.e.,
 740     //  1) (mark & 7) == 0, and
 741     //  2) rsp <= mark < mark + os::pagesize()
 742     //
 743     // These 3 tests can be done by evaluating the following
 744     // expression: ((mark - rsp) & (7 - os::vm_page_size())),
 745     // assuming both stack pointer and pagesize have their
 746     // least significant 3 bits clear.
 747     // NOTE: the oopMark is in swap_reg %rax as the result of cmpxchg
 748     subptr(swap_reg, rsp);
 749     andptr(swap_reg, 7 - os::vm_page_size());
 750 


< prev index next >