Mercurial > hg > truffle
diff src/cpu/x86/vm/methodHandles_x86.cpp @ 3449:a9b8b43b115f
7052219: JSR 292: Crash in ~BufferBlob::MethodHandles adapters
Reviewed-by: twisti, kvn, jrose
author | never |
---|---|
date | Tue, 14 Jun 2011 14:41:33 -0700 |
parents | 07c2e7ffd1fc |
children | 38fa55e5e792 |
line wrap: on
line diff
--- a/src/cpu/x86/vm/methodHandles_x86.cpp Thu Jun 16 19:26:33 2011 -0700 +++ b/src/cpu/x86/vm/methodHandles_x86.cpp Tue Jun 14 14:41:33 2011 -0700 @@ -1644,14 +1644,16 @@ // rax = src_addr + swap_bytes // rbx = dest_addr // while (rax <= rbx) *(rax - swap_bytes) = *(rax + 0), rax++; - __ addptr(rbx_destslot, wordSize); + // dest_slot denotes an exclusive upper limit + int limit_bias = OP_ROT_ARGS_DOWN_LIMIT_BIAS; + if (limit_bias != 0) + __ addptr(rbx_destslot, - limit_bias * wordSize); move_arg_slots_down(_masm, Address(rax_argslot, swap_slots * wordSize), rbx_destslot, -swap_slots, rax_argslot, rdx_temp); - - __ subptr(rbx_destslot, wordSize); + __ subptr(rbx_destslot, swap_slots * wordSize); } // pop the original first chunk into the destination slot, now free for (int i = 0; i < swap_slots; i++) {