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