Created
March 30, 2012 09:47
-
-
Save rednaxelafx/2250418 to your computer and use it in GitHub Desktop.
Incorrect comments in fast-path lightweight unlocking code in the interpreter. Diff against current jdk8/jdk8/hotspot
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -r 39e5c6153285 src/cpu/x86/vm/interp_masm_x86_32.cpp | |
--- a/src/cpu/x86/vm/interp_masm_x86_32.cpp Thu Mar 29 13:02:11 2012 -0700 | |
+++ b/src/cpu/x86/vm/interp_masm_x86_32.cpp Fri Mar 30 17:44:51 2012 +0800 | |
@@ -782,7 +782,7 @@ | |
if (os::is_MP()) lock(); | |
cmpxchgptr(header_reg, Address(obj_reg, 0)); | |
- // zero for recursive case | |
+ // zero for successful CAS | |
jcc(Assembler::zero, done); | |
// Call the runtime routine for slow case. | |
diff -r 39e5c6153285 src/cpu/x86/vm/interp_masm_x86_64.cpp | |
--- a/src/cpu/x86/vm/interp_masm_x86_64.cpp Thu Mar 29 13:02:11 2012 -0700 | |
+++ b/src/cpu/x86/vm/interp_masm_x86_64.cpp Fri Mar 30 17:44:51 2012 +0800 | |
@@ -794,7 +794,7 @@ | |
if (os::is_MP()) lock(); | |
cmpxchgptr(header_reg, Address(obj_reg, 0)); | |
- // zero for recursive case | |
+ // zero for successful CAS | |
jcc(Assembler::zero, done); | |
// Call the runtime routine for slow case. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -r 39e5c6153285 src/cpu/x86/vm/frame_x86.hpp | |
--- a/src/cpu/x86/vm/frame_x86.hpp Thu Mar 29 13:02:11 2012 -0700 | |
+++ b/src/cpu/x86/vm/frame_x86.hpp Fri Mar 30 20:46:04 2012 +0800 | |
@@ -35,22 +35,22 @@ | |
// A frame is comprised of {pc, fp, sp} | |
// ------------------------------ Asm interpreter ---------------------------------------- | |
// Layout of asm interpreter frame: | |
-// [expression stack ] * <- sp | |
-// [monitors ] \ | |
-// ... | monitor block size | |
-// [monitors ] / | |
-// [monitor block size ] | |
-// [byte code index/pointr] = bcx() bcx_offset | |
-// [pointer to locals ] = locals() locals_offset | |
-// [constant pool cache ] = cache() cache_offset | |
-// [methodData ] = mdp() mdx_offset | |
-// [methodOop ] = method() method_offset | |
-// [last sp ] = last_sp() last_sp_offset | |
-// [old stack pointer ] (sender_sp) sender_sp_offset | |
-// [old frame pointer ] <- fp = link() | |
-// [return pc ] | |
-// [oop temp ] (only for native calls) | |
-// [locals and parameters ] | |
+// [expression stack ] * <- sp | |
+// [monitors ] \ <- monitor_block_top == expression stack bottom | |
+// ... | monitor block size | |
+// [monitors ] / | |
+// [pointer to monitor block top ] <- monitor_block_bottom = monitor_end() monitor_block_top_offset | |
+// [byte code index/pointer ] = bcx() bcx_offset | |
+// [pointer to locals ] = locals() locals_offset | |
+// [constant pool cache ] = cache() cache_offset | |
+// [methodData ] = mdp() mdx_offset | |
+// [methodOop ] = method() method_offset | |
+// [last sp ] = last_sp() last_sp_offset | |
+// [old stack pointer ] (sender_sp) sender_sp_offset | |
+// [old frame pointer ] <- fp = link() | |
+// [return pc ] | |
+// [oop temp ] (only for native calls) | |
+// [locals and parameters ] | |
// <- sender sp | |
// ------------------------------ Asm interpreter ---------------------------------------- | |
diff -r 39e5c6153285 src/cpu/x86/vm/interp_masm_x86_32.cpp | |
--- a/src/cpu/x86/vm/interp_masm_x86_32.cpp Thu Mar 29 13:02:11 2012 -0700 | |
+++ b/src/cpu/x86/vm/interp_masm_x86_32.cpp Fri Mar 30 20:46:04 2012 +0800 | |
@@ -782,7 +782,7 @@ | |
if (os::is_MP()) lock(); | |
cmpxchgptr(header_reg, Address(obj_reg, 0)); | |
- // zero for recursive case | |
+ // zero for successful lightweight unlock | |
jcc(Assembler::zero, done); | |
// Call the runtime routine for slow case. | |
diff -r 39e5c6153285 src/cpu/x86/vm/interp_masm_x86_64.cpp | |
--- a/src/cpu/x86/vm/interp_masm_x86_64.cpp Thu Mar 29 13:02:11 2012 -0700 | |
+++ b/src/cpu/x86/vm/interp_masm_x86_64.cpp Fri Mar 30 20:46:04 2012 +0800 | |
@@ -794,7 +794,7 @@ | |
if (os::is_MP()) lock(); | |
cmpxchgptr(header_reg, Address(obj_reg, 0)); | |
- // zero for recursive case | |
+ // zero for successful lightweight unlock | |
jcc(Assembler::zero, done); | |
// Call the runtime routine for slow case. | |
diff -r 39e5c6153285 src/cpu/x86/vm/templateInterpreter_x86_32.cpp | |
--- a/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Thu Mar 29 13:02:11 2012 -0700 | |
+++ b/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Fri Mar 30 20:46:04 2012 +0800 | |
@@ -1625,12 +1625,12 @@ | |
#endif | |
interpreter_frame->interpreter_frame_set_locals(locals); | |
- BasicObjectLock* montop = interpreter_frame->interpreter_frame_monitor_begin(); | |
- BasicObjectLock* monbot = montop - moncount; | |
- interpreter_frame->interpreter_frame_set_monitor_end(monbot); | |
+ BasicObjectLock* monbot = interpreter_frame->interpreter_frame_monitor_begin(); | |
+ BasicObjectLock* montop = monbot - moncount; | |
+ interpreter_frame->interpreter_frame_set_monitor_end(montop); | |
// Set last_sp | |
- intptr_t* rsp = (intptr_t*) monbot - | |
+ intptr_t* rsp = (intptr_t*) montop - | |
tempcount*Interpreter::stackElementWords - | |
popframe_extra_args; | |
interpreter_frame->interpreter_frame_set_last_sp(rsp); | |
diff -r 39e5c6153285 src/cpu/x86/vm/templateInterpreter_x86_64.cpp | |
--- a/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Thu Mar 29 13:02:11 2012 -0700 | |
+++ b/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Fri Mar 30 20:46:04 2012 +0800 | |
@@ -1637,12 +1637,12 @@ | |
#endif | |
interpreter_frame->interpreter_frame_set_locals(locals); | |
- BasicObjectLock* montop = interpreter_frame->interpreter_frame_monitor_begin(); | |
- BasicObjectLock* monbot = montop - moncount; | |
- interpreter_frame->interpreter_frame_set_monitor_end(monbot); | |
+ BasicObjectLock* monbot = interpreter_frame->interpreter_frame_monitor_begin(); | |
+ BasicObjectLock* montop = monbot - moncount; | |
+ interpreter_frame->interpreter_frame_set_monitor_end(montop); | |
// Set last_sp | |
- intptr_t* esp = (intptr_t*) monbot - | |
+ intptr_t* esp = (intptr_t*) montop - | |
tempcount*Interpreter::stackElementWords - | |
popframe_extra_args; | |
interpreter_frame->interpreter_frame_set_last_sp(esp); | |
diff -r 39e5c6153285 src/cpu/x86/vm/templateTable_x86_32.cpp | |
--- a/src/cpu/x86/vm/templateTable_x86_32.cpp Thu Mar 29 13:02:11 2012 -0700 | |
+++ b/src/cpu/x86/vm/templateTable_x86_32.cpp Fri Mar 30 20:46:04 2012 +0800 | |
@@ -3512,7 +3512,9 @@ | |
// check for NULL object | |
__ null_check(rax); | |
+ // address of pointer to monitor block top | |
const Address monitor_block_top(rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize); | |
+ // address of monitor block bottom | |
const Address monitor_block_bot(rbp, frame::interpreter_frame_initial_sp_offset * wordSize); | |
const int entry_size = ( frame::interpreter_frame_monitor_size() * wordSize); | |
Label allocated; | |
@@ -3545,11 +3547,11 @@ | |
// allocate one if there's no free slot | |
{ Label entry, loop; | |
// 1. compute new pointers // rsp: old expression stack top | |
- __ movptr(rdx, monitor_block_bot); // rdx: old expression stack bottom | |
+ __ movptr(rdx, monitor_block_top); // rdx: old expression stack bottom | |
__ subptr(rsp, entry_size); // move expression stack top | |
- __ subptr(rdx, entry_size); // move expression stack bottom | |
+ __ subptr(rdx, entry_size); // calculate new expression stack bottom | |
__ mov(rcx, rsp); // set start value for copy loop | |
- __ movptr(monitor_block_bot, rdx); // set new monitor block top | |
+ __ movptr(monitor_block_top, rdx); // set new monitor block top / expression stack bottom | |
__ jmp(entry); | |
// 2. move expression stack contents | |
__ bind(loop); | |
diff -r 39e5c6153285 src/cpu/x86/vm/templateTable_x86_64.cpp | |
--- a/src/cpu/x86/vm/templateTable_x86_64.cpp Thu Mar 29 13:02:11 2012 -0700 | |
+++ b/src/cpu/x86/vm/templateTable_x86_64.cpp Fri Mar 30 20:46:04 2012 +0800 | |
@@ -3559,8 +3559,10 @@ | |
// check for NULL object | |
__ null_check(rax); | |
+ // address of pointer to monitor block top | |
const Address monitor_block_top( | |
rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize); | |
+ // address of monitor block bottom | |
const Address monitor_block_bot( | |
rbp, frame::interpreter_frame_initial_sp_offset * wordSize); | |
const int entry_size = frame::interpreter_frame_monitor_size() * wordSize; | |
@@ -3605,11 +3607,11 @@ | |
{ | |
Label entry, loop; | |
// 1. compute new pointers // rsp: old expression stack top | |
- __ movptr(c_rarg1, monitor_block_bot); // c_rarg1: old expression stack bottom | |
+ __ movptr(c_rarg1, monitor_block_top); // c_rarg1: old expression stack bottom | |
__ subptr(rsp, entry_size); // move expression stack top | |
- __ subptr(c_rarg1, entry_size); // move expression stack bottom | |
+ __ subptr(c_rarg1, entry_size); // calculate new expression stack bottom | |
__ mov(c_rarg3, rsp); // set start value for copy loop | |
- __ movptr(monitor_block_bot, c_rarg1); // set new monitor block bottom | |
+ __ movptr(monitor_block_top, c_rarg1); // set new monitor block top / expression stack bottom | |
__ jmp(entry); | |
// 2. move expression stack contents | |
__ bind(loop); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment