618 } else if( t->base() == Type::Int && OptoReg::is_reg(regnum) ) {
619 array->append(new_loc_value( _regalloc, regnum, Matcher::int_in_long
620 ? Location::int_in_long : Location::normal ));
621 } else if( t->base() == Type::NarrowOop ) {
622 array->append(new_loc_value( _regalloc, regnum, Location::narrowoop ));
623 } else {
624 array->append(new_loc_value( _regalloc, regnum, _regalloc->is_oop(local) ? Location::oop : Location::normal ));
625 }
626 return;
627 }
628
629 // No register. It must be constant data.
630 switch (t->base()) {
631 case Type::Half: // Second half of a double
632 ShouldNotReachHere(); // Caller should skip 2nd halves
633 break;
634 case Type::AnyPtr:
635 array->append(new ConstantOopWriteValue(NULL));
636 break;
637 case Type::AryPtr:
638 case Type::ValueTypePtr:
639 case Type::InstPtr: // fall through
640 array->append(new ConstantOopWriteValue(t->isa_oopptr()->const_oop()->constant_encoding()));
641 break;
642 case Type::NarrowOop:
643 if (t == TypeNarrowOop::NULL_PTR) {
644 array->append(new ConstantOopWriteValue(NULL));
645 } else {
646 array->append(new ConstantOopWriteValue(t->make_ptr()->isa_oopptr()->const_oop()->constant_encoding()));
647 }
648 break;
649 case Type::Int:
650 array->append(new ConstantIntValue(t->is_int()->get_con()));
651 break;
652 case Type::RawPtr:
653 // A return address (T_ADDRESS).
654 assert((intptr_t)t->is_ptr()->get_con() < (intptr_t)0x10000, "must be a valid BCI");
655 #ifdef _LP64
656 // Must be restored to the full-width 64-bit stack slot.
657 array->append(new ConstantLongValue(t->is_ptr()->get_con()));
658 #else
|
618 } else if( t->base() == Type::Int && OptoReg::is_reg(regnum) ) {
619 array->append(new_loc_value( _regalloc, regnum, Matcher::int_in_long
620 ? Location::int_in_long : Location::normal ));
621 } else if( t->base() == Type::NarrowOop ) {
622 array->append(new_loc_value( _regalloc, regnum, Location::narrowoop ));
623 } else {
624 array->append(new_loc_value( _regalloc, regnum, _regalloc->is_oop(local) ? Location::oop : Location::normal ));
625 }
626 return;
627 }
628
629 // No register. It must be constant data.
630 switch (t->base()) {
631 case Type::Half: // Second half of a double
632 ShouldNotReachHere(); // Caller should skip 2nd halves
633 break;
634 case Type::AnyPtr:
635 array->append(new ConstantOopWriteValue(NULL));
636 break;
637 case Type::AryPtr:
638 case Type::InstPtr: // fall through
639 array->append(new ConstantOopWriteValue(t->isa_oopptr()->const_oop()->constant_encoding()));
640 break;
641 case Type::NarrowOop:
642 if (t == TypeNarrowOop::NULL_PTR) {
643 array->append(new ConstantOopWriteValue(NULL));
644 } else {
645 array->append(new ConstantOopWriteValue(t->make_ptr()->isa_oopptr()->const_oop()->constant_encoding()));
646 }
647 break;
648 case Type::Int:
649 array->append(new ConstantIntValue(t->is_int()->get_con()));
650 break;
651 case Type::RawPtr:
652 // A return address (T_ADDRESS).
653 assert((intptr_t)t->is_ptr()->get_con() < (intptr_t)0x10000, "must be a valid BCI");
654 #ifdef _LP64
655 // Must be restored to the full-width 64-bit stack slot.
656 array->append(new ConstantLongValue(t->is_ptr()->get_con()));
657 #else
|