Mercurial > hg > graal-jvmci-8
diff src/cpu/sparc/vm/methodHandles_sparc.cpp @ 2009:b856cd7f4e60
7003798: test/compiler/6991596 fails with true != false
Summary: The test of 6991596 fails on SPARCV9.
Reviewed-by: kvn, never, jrose
author | twisti |
---|---|
date | Fri, 03 Dec 2010 06:14:37 -0800 |
parents | f95d63e2154a |
children | 8d0b933dda2d |
line wrap: on
line diff
--- a/src/cpu/sparc/vm/methodHandles_sparc.cpp Fri Dec 03 01:34:31 2010 -0800 +++ b/src/cpu/sparc/vm/methodHandles_sparc.cpp Fri Dec 03 06:14:37 2010 -0800 @@ -689,8 +689,8 @@ { // Perform an in-place conversion to int or an int subword. __ ldsw(G3_amh_vmargslot, O0_argslot); + Address value; Address vmarg = __ argument_address(O0_argslot); - Address value; bool value_left_justified = false; switch (ek) { @@ -700,9 +700,21 @@ case _adapter_opt_l2i: { // just delete the extra slot +#ifdef _LP64 + // In V9, longs are given 2 64-bit slots in the interpreter, but the + // data is passed in only 1 slot. + // Keep the second slot. + __ add(Gargs, __ argument_offset(O0_argslot, -1), O0_argslot); + remove_arg_slots(_masm, -stack_move_unit(), O0_argslot, O1_scratch, O2_scratch, O3_scratch); + value = Address(O0_argslot, 4); // Get least-significant 32-bit of 64-bit value. + vmarg = Address(O0_argslot, Interpreter::stackElementSize); +#else + // Keep the first slot. __ add(Gargs, __ argument_offset(O0_argslot), O0_argslot); remove_arg_slots(_masm, -stack_move_unit(), O0_argslot, O1_scratch, O2_scratch, O3_scratch); - value = vmarg = Address(O0_argslot, 0); + value = Address(O0_argslot, 0); + vmarg = value; +#endif } break; case _adapter_opt_unboxi: