Mercurial > hg > truffle
comparison src/cpu/x86/vm/methodHandles_x86.cpp @ 3757:f8c9417e3571
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 | 5cf771a79037 |
children | 38fa55e5e792 |
comparison
equal
deleted
inserted
replaced
3755:5cf771a79037 | 3757:f8c9417e3571 |
---|---|
1642 // work argslot up to destslot, copying contiguous data downwards | 1642 // work argslot up to destslot, copying contiguous data downwards |
1643 // pseudo-code: | 1643 // pseudo-code: |
1644 // rax = src_addr + swap_bytes | 1644 // rax = src_addr + swap_bytes |
1645 // rbx = dest_addr | 1645 // rbx = dest_addr |
1646 // while (rax <= rbx) *(rax - swap_bytes) = *(rax + 0), rax++; | 1646 // while (rax <= rbx) *(rax - swap_bytes) = *(rax + 0), rax++; |
1647 __ addptr(rbx_destslot, wordSize); | 1647 // dest_slot denotes an exclusive upper limit |
1648 int limit_bias = OP_ROT_ARGS_DOWN_LIMIT_BIAS; | |
1649 if (limit_bias != 0) | |
1650 __ addptr(rbx_destslot, - limit_bias * wordSize); | |
1648 move_arg_slots_down(_masm, | 1651 move_arg_slots_down(_masm, |
1649 Address(rax_argslot, swap_slots * wordSize), | 1652 Address(rax_argslot, swap_slots * wordSize), |
1650 rbx_destslot, | 1653 rbx_destslot, |
1651 -swap_slots, | 1654 -swap_slots, |
1652 rax_argslot, rdx_temp); | 1655 rax_argslot, rdx_temp); |
1653 | 1656 __ subptr(rbx_destslot, swap_slots * wordSize); |
1654 __ subptr(rbx_destslot, wordSize); | |
1655 } | 1657 } |
1656 // pop the original first chunk into the destination slot, now free | 1658 // pop the original first chunk into the destination slot, now free |
1657 for (int i = 0; i < swap_slots; i++) { | 1659 for (int i = 0; i < swap_slots; i++) { |
1658 if (i == 0) __ movptr(Address(rbx_destslot, i * wordSize), rdi_temp); | 1660 if (i == 0) __ movptr(Address(rbx_destslot, i * wordSize), rdi_temp); |
1659 else __ popptr(Address(rbx_destslot, i * wordSize)); | 1661 else __ popptr(Address(rbx_destslot, i * wordSize)); |