EVALUATION
The slot if being incremented before it's used to generate the oopmap entry so it's off by one.
diff -r 2ee7dcc77c63 src/cpu/x86/vm/sharedRuntime_x86_64.cpp
--- a/src/cpu/x86/vm/sharedRuntime_x86_64.cpp
+++ b/src/cpu/x86/vm/sharedRuntime_x86_64.cpp
@@ -1197,7 +1197,6 @@
if (in_regs[i].first()->is_Register() &&
(in_sig_bt[i] == T_LONG || in_sig_bt[i] == T_ARRAY)) {
int offset = slot * VMRegImpl::stack_slot_size;
- slot += VMRegImpl::slots_per_word;
if (map != NULL) {
__ movq(Address(rsp, offset), in_regs[i].first()->as_Register());
if (in_sig_bt[i] == T_ARRAY) {
@@ -1206,6 +1205,7 @@
} else {
__ movq(in_regs[i].first()->as_Register(), Address(rsp, offset));
}
+ slot += VMRegImpl::slots_per_word;
}
}
// Save or restore single word registers
|