1.1 --- a/src/share/vm/opto/buildOopMap.cpp Fri Apr 11 09:56:35 2008 -0400 1.2 +++ b/src/share/vm/opto/buildOopMap.cpp Sun Apr 13 17:43:42 2008 -0400 1.3 @@ -315,6 +315,26 @@ 1.4 } 1.5 } 1.6 1.7 + } else if( t->isa_narrowoop() ) { 1.8 + assert( !OptoReg::is_valid(_callees[reg]), "oop can't be callee save" ); 1.9 + // Check for a legal reg name in the oopMap and bailout if it is not. 1.10 + if (!omap->legal_vm_reg_name(r)) { 1.11 + regalloc->C->record_method_not_compilable("illegal oopMap register name"); 1.12 + continue; 1.13 + } 1.14 + if( mcall ) { 1.15 + // Outgoing argument GC mask responsibility belongs to the callee, 1.16 + // not the caller. Inspect the inputs to the call, to see if 1.17 + // this live-range is one of them. 1.18 + uint cnt = mcall->tf()->domain()->cnt(); 1.19 + uint j; 1.20 + for( j = TypeFunc::Parms; j < cnt; j++) 1.21 + if( mcall->in(j) == def ) 1.22 + break; // reaching def is an argument oop 1.23 + if( j < cnt ) // arg oops dont go in GC map 1.24 + continue; // Continue on to the next register 1.25 + } 1.26 + omap->set_narrowoop(r); 1.27 } else if( OptoReg::is_valid(_callees[reg])) { // callee-save? 1.28 // It's a callee-save value 1.29 assert( dup_check[_callees[reg]]==0, "trying to callee save same reg twice" );