The code in C2_MacroAssembler::fast_unlock() has several (minor) issues:
- The stack-locking path for x86_32 is not under UseHeavyMonitors - it would be executed even when stack-locking is disabled.
- The stack-locking paths are the same for x86_32 and x86_64 - they can be merged into a common path.
- In x86_32 path, we call get_thread(boxReg) which is totally bogus because we clear boxReg right afterwards with xorptr(boxReg, boxReg).
- In x86_32 path, the CheckSucc label is identical to the DONE label, and in-fact CheckSucc is only ever really used in the x86_64 path and can be moved there.
- The stack-locking path for x86_32 is not under UseHeavyMonitors - it would be executed even when stack-locking is disabled.
- The stack-locking paths are the same for x86_32 and x86_64 - they can be merged into a common path.
- In x86_32 path, we call get_thread(boxReg) which is totally bogus because we clear boxReg right afterwards with xorptr(boxReg, boxReg).
- In x86_32 path, the CheckSucc label is identical to the DONE label, and in-fact CheckSucc is only ever really used in the x86_64 path and can be moved there.