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