575 // the word in the even single-register is stored to the first |
575 // the word in the even single-register is stored to the first |
576 // memory word. (Note that register numbers are completely |
576 // memory word. (Note that register numbers are completely |
577 // arbitrary, and are not tied to any machine-level encodings.) |
577 // arbitrary, and are not tied to any machine-level encodings.) |
578 #ifdef _LP64 |
578 #ifdef _LP64 |
579 if( t->base() == Type::DoubleBot || t->base() == Type::DoubleCon ) { |
579 if( t->base() == Type::DoubleBot || t->base() == Type::DoubleCon ) { |
580 array->append(new ConstantIntValue(0)); |
580 array->append(new ConstantIntValue((jint)0)); |
581 array->append(new_loc_value( _regalloc, regnum, Location::dbl )); |
581 array->append(new_loc_value( _regalloc, regnum, Location::dbl )); |
582 } else if ( t->base() == Type::Long ) { |
582 } else if ( t->base() == Type::Long ) { |
583 array->append(new ConstantIntValue(0)); |
583 array->append(new ConstantIntValue((jint)0)); |
584 array->append(new_loc_value( _regalloc, regnum, Location::lng )); |
584 array->append(new_loc_value( _regalloc, regnum, Location::lng )); |
585 } else if ( t->base() == Type::RawPtr ) { |
585 } else if ( t->base() == Type::RawPtr ) { |
586 // jsr/ret return address which must be restored into a the full |
586 // jsr/ret return address which must be restored into a the full |
587 // width 64-bit stack slot. |
587 // width 64-bit stack slot. |
588 array->append(new_loc_value( _regalloc, regnum, Location::lng )); |
588 array->append(new_loc_value( _regalloc, regnum, Location::lng )); |
661 break; |
661 break; |
662 } |
662 } |
663 case Type::DoubleCon: { |
663 case Type::DoubleCon: { |
664 jdouble d = t->is_double_constant()->getd(); |
664 jdouble d = t->is_double_constant()->getd(); |
665 #ifdef _LP64 |
665 #ifdef _LP64 |
666 array->append(new ConstantIntValue(0)); |
666 array->append(new ConstantIntValue((jint)0)); |
667 array->append(new ConstantDoubleValue(d)); |
667 array->append(new ConstantDoubleValue(d)); |
668 #else |
668 #else |
669 // Repack the double as two jints. |
669 // Repack the double as two jints. |
670 // The convention the interpreter uses is that the second local |
670 // The convention the interpreter uses is that the second local |
671 // holds the first raw word of the native double representation. |
671 // holds the first raw word of the native double representation. |
681 break; |
681 break; |
682 } |
682 } |
683 case Type::Long: { |
683 case Type::Long: { |
684 jlong d = t->is_long()->get_con(); |
684 jlong d = t->is_long()->get_con(); |
685 #ifdef _LP64 |
685 #ifdef _LP64 |
686 array->append(new ConstantIntValue(0)); |
686 array->append(new ConstantIntValue((jint)0)); |
687 array->append(new ConstantLongValue(d)); |
687 array->append(new ConstantLongValue(d)); |
688 #else |
688 #else |
689 // Repack the long as two jints. |
689 // Repack the long as two jints. |
690 // The convention the interpreter uses is that the second local |
690 // The convention the interpreter uses is that the second local |
691 // holds the first raw word of the native double representation. |
691 // holds the first raw word of the native double representation. |