81 default: { |
81 default: { |
82 uint parm_num = proj->_con - TypeFunc::Parms; |
82 uint parm_num = proj->_con - TypeFunc::Parms; |
83 const Type *t = _domain->field_at(proj->_con); |
83 const Type *t = _domain->field_at(proj->_con); |
84 if (t->base() == Type::Half) // 2nd half of Longs and Doubles |
84 if (t->base() == Type::Half) // 2nd half of Longs and Doubles |
85 return new (match->C, 1) ConNode(Type::TOP); |
85 return new (match->C, 1) ConNode(Type::TOP); |
86 uint ideal_reg = Matcher::base2reg[t->base()]; |
86 uint ideal_reg = t->ideal_reg(); |
87 RegMask &rm = match->_calling_convention_mask[parm_num]; |
87 RegMask &rm = match->_calling_convention_mask[parm_num]; |
88 return new (match->C, 1) MachProjNode(this,proj->_con,rm,ideal_reg); |
88 return new (match->C, 1) MachProjNode(this,proj->_con,rm,ideal_reg); |
89 } |
89 } |
90 } |
90 } |
91 return NULL; |
91 return NULL; |
129 default : assert( _con > TypeFunc::Parms, "" ); |
129 default : assert( _con > TypeFunc::Parms, "" ); |
130 // fall through |
130 // fall through |
131 case TypeFunc::Parms : { |
131 case TypeFunc::Parms : { |
132 // Type of argument being passed |
132 // Type of argument being passed |
133 const Type *t = in(0)->as_Start()->_domain->field_at(_con); |
133 const Type *t = in(0)->as_Start()->_domain->field_at(_con); |
134 return Matcher::base2reg[t->base()]; |
134 return t->ideal_reg(); |
135 } |
135 } |
136 } |
136 } |
137 ShouldNotReachHere(); |
137 ShouldNotReachHere(); |
138 return 0; |
138 return 0; |
139 } |
139 } |
342 case Type::AnyPtr: |
342 case Type::AnyPtr: |
343 assert( t == TypePtr::NULL_PTR, "" ); |
343 assert( t == TypePtr::NULL_PTR, "" ); |
344 st->print(" %s%d]=#NULL",msg,i); |
344 st->print(" %s%d]=#NULL",msg,i); |
345 break; |
345 break; |
346 case Type::AryPtr: |
346 case Type::AryPtr: |
347 case Type::KlassPtr: |
|
348 case Type::InstPtr: |
347 case Type::InstPtr: |
349 st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->isa_oopptr()->const_oop()); |
348 st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->isa_oopptr()->const_oop()); |
|
349 break; |
|
350 case Type::KlassPtr: |
|
351 st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->make_ptr()->isa_klassptr()->klass()); |
|
352 break; |
|
353 case Type::MetadataPtr: |
|
354 st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->make_ptr()->isa_metadataptr()->metadata()); |
350 break; |
355 break; |
351 case Type::NarrowOop: |
356 case Type::NarrowOop: |
352 st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->make_ptr()->isa_oopptr()->const_oop()); |
357 st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->make_ptr()->isa_oopptr()->const_oop()); |
353 break; |
358 break; |
354 case Type::RawPtr: |
359 case Type::RawPtr: |
626 assert(tf()->_range->field_at(TypeFunc::Parms+1) == Type::HALF, ""); |
631 assert(tf()->_range->field_at(TypeFunc::Parms+1) == Type::HALF, ""); |
627 // 2nd half of doubles and longs |
632 // 2nd half of doubles and longs |
628 return new (match->C, 1) MachProjNode(this,proj->_con, RegMask::Empty, (uint)OptoReg::Bad); |
633 return new (match->C, 1) MachProjNode(this,proj->_con, RegMask::Empty, (uint)OptoReg::Bad); |
629 |
634 |
630 case TypeFunc::Parms: { // Normal returns |
635 case TypeFunc::Parms: { // Normal returns |
631 uint ideal_reg = Matcher::base2reg[tf()->range()->field_at(TypeFunc::Parms)->base()]; |
636 uint ideal_reg = tf()->range()->field_at(TypeFunc::Parms)->ideal_reg(); |
632 OptoRegPair regs = is_CallRuntime() |
637 OptoRegPair regs = is_CallRuntime() |
633 ? match->c_return_value(ideal_reg,true) // Calls into C runtime |
638 ? match->c_return_value(ideal_reg,true) // Calls into C runtime |
634 : match-> return_value(ideal_reg,true); // Calls into compiled Java code |
639 : match-> return_value(ideal_reg,true); // Calls into compiled Java code |
635 RegMask rm = RegMask(regs.first()); |
640 RegMask rm = RegMask(regs.first()); |
636 if( OptoReg::is_valid(regs.second()) ) |
641 if( OptoReg::is_valid(regs.second()) ) |