Mercurial > hg > truffle
comparison src/share/vm/opto/callnode.cpp @ 6725:da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author | coleenp |
---|---|
date | Sat, 01 Sep 2012 13:25:18 -0400 |
parents | 1d7922586cf6 |
children | e626685e9f6c |
comparison
equal
deleted
inserted
replaced
6724:36d1d483d5d6 | 6725:da91efe96a93 |
---|---|
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()) ) |