src/cpu/sparc/vm/methodHandles_sparc.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/cpu/sparc/vm/methodHandles_sparc.cpp Tue Jun 14 10:10:10 2011
--- new/src/cpu/sparc/vm/methodHandles_sparc.cpp Tue Jun 14 10:10:10 2011
*** 268,278 ****
--- 268,278 ----
}
// Emit code to verify that FP is pointing at a valid ricochet frame.
#ifdef ASSERT
enum {
! ARG_LIMIT = 255, SLOP = 35,
! ARG_LIMIT = 255, SLOP = 45,
// use this parameter for checking for garbage stack movements:
UNREASONABLE_STACK_MOVE = (ARG_LIMIT + SLOP)
// the slop defends against false alarms due to fencepost errors
};
*** 1579,1596 ****
--- 1579,1599 ----
// work argslot up to destslot, copying contiguous data downwards
// pseudo-code:
// argslot = src_addr + swap_bytes
// destslot = dest_addr
// while (argslot <= destslot) *(argslot - swap_bytes) = *(argslot + 0), argslot++;
__ add(O1_destslot, wordSize, O1_destslot);
+ // dest_slot denotes an exclusive upper limit
+ int limit_bias = OP_ROT_ARGS_DOWN_LIMIT_BIAS;
+ if (limit_bias != 0)
+ __ add(O1_destslot, - limit_bias * wordSize, O1_destslot);
move_arg_slots_down(_masm,
Address(O0_argslot, swap_slots * wordSize),
O1_destslot,
-swap_slots,
O0_argslot, O2_scratch);
! __ sub(O1_destslot, swap_slots * wordSize, O1_destslot);
}
// pop the original first chunk into the destination slot, now free
switch (swap_slots) {
case 2 : __ st_ptr(O4_scratch, Address(O1_destslot, 1 * wordSize)); // fall-thru
case 1 : __ st_ptr(O3_scratch, Address(O1_destslot, 0 * wordSize)); break;
src/cpu/sparc/vm/methodHandles_sparc.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File