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