comparison src/cpu/sparc/vm/methodHandles_sparc.cpp @ 2029:6ce496c8fc07

Merge
author coleenp
date Thu, 16 Dec 2010 09:31:55 -0500
parents b856cd7f4e60
children 8d0b933dda2d
comparison
equal deleted inserted replaced
2028:450ece4d8a10 2029:6ce496c8fc07
687 case _adapter_opt_l2i: // optimized subcase of adapt_prim_to_prim 687 case _adapter_opt_l2i: // optimized subcase of adapt_prim_to_prim
688 case _adapter_opt_unboxi: // optimized subcase of adapt_ref_to_prim 688 case _adapter_opt_unboxi: // optimized subcase of adapt_ref_to_prim
689 { 689 {
690 // Perform an in-place conversion to int or an int subword. 690 // Perform an in-place conversion to int or an int subword.
691 __ ldsw(G3_amh_vmargslot, O0_argslot); 691 __ ldsw(G3_amh_vmargslot, O0_argslot);
692 Address value;
692 Address vmarg = __ argument_address(O0_argslot); 693 Address vmarg = __ argument_address(O0_argslot);
693 Address value;
694 bool value_left_justified = false; 694 bool value_left_justified = false;
695 695
696 switch (ek) { 696 switch (ek) {
697 case _adapter_opt_i2i: 697 case _adapter_opt_i2i:
698 value = vmarg; 698 value = vmarg;
699 break; 699 break;
700 case _adapter_opt_l2i: 700 case _adapter_opt_l2i:
701 { 701 {
702 // just delete the extra slot 702 // just delete the extra slot
703 #ifdef _LP64
704 // In V9, longs are given 2 64-bit slots in the interpreter, but the
705 // data is passed in only 1 slot.
706 // Keep the second slot.
707 __ add(Gargs, __ argument_offset(O0_argslot, -1), O0_argslot);
708 remove_arg_slots(_masm, -stack_move_unit(), O0_argslot, O1_scratch, O2_scratch, O3_scratch);
709 value = Address(O0_argslot, 4); // Get least-significant 32-bit of 64-bit value.
710 vmarg = Address(O0_argslot, Interpreter::stackElementSize);
711 #else
712 // Keep the first slot.
703 __ add(Gargs, __ argument_offset(O0_argslot), O0_argslot); 713 __ add(Gargs, __ argument_offset(O0_argslot), O0_argslot);
704 remove_arg_slots(_masm, -stack_move_unit(), O0_argslot, O1_scratch, O2_scratch, O3_scratch); 714 remove_arg_slots(_masm, -stack_move_unit(), O0_argslot, O1_scratch, O2_scratch, O3_scratch);
705 value = vmarg = Address(O0_argslot, 0); 715 value = Address(O0_argslot, 0);
716 vmarg = value;
717 #endif
706 } 718 }
707 break; 719 break;
708 case _adapter_opt_unboxi: 720 case _adapter_opt_unboxi:
709 { 721 {
710 // Load the value up from the heap. 722 // Load the value up from the heap.