Mercurial > hg > truffle
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. |