< prev index next >

src/share/vm/opto/matcher.cpp

Print this page
rev 10504 : value type calling convention

*** 199,209 **** // Frame Layout // Need the method signature to determine the incoming argument types, // because the types determine which registers the incoming arguments are // in, and this affects the matched code. ! const TypeTuple *domain = C->tf()->domain(); uint argcnt = domain->cnt() - TypeFunc::Parms; BasicType *sig_bt = NEW_RESOURCE_ARRAY( BasicType, argcnt ); VMRegPair *vm_parm_regs = NEW_RESOURCE_ARRAY( VMRegPair, argcnt ); _parm_regs = NEW_RESOURCE_ARRAY( OptoRegPair, argcnt ); _calling_convention_mask = NEW_RESOURCE_ARRAY( RegMask, argcnt ); --- 199,209 ---- // Frame Layout // Need the method signature to determine the incoming argument types, // because the types determine which registers the incoming arguments are // in, and this affects the matched code. ! const TypeTuple *domain = C->tf()->domain_cc(); uint argcnt = domain->cnt() - TypeFunc::Parms; BasicType *sig_bt = NEW_RESOURCE_ARRAY( BasicType, argcnt ); VMRegPair *vm_parm_regs = NEW_RESOURCE_ARRAY( VMRegPair, argcnt ); _parm_regs = NEW_RESOURCE_ARRAY( OptoRegPair, argcnt ); _calling_convention_mask = NEW_RESOURCE_ARRAY( RegMask, argcnt );
*** 714,724 **** default : ShouldNotReachHere(); } } // Next unused projection number from Start. ! int proj_cnt = C->tf()->domain()->cnt(); // Do all the save-on-entry registers. Make projections from Start for // them, and give them a use at the exit points. To the allocator, they // look like incoming register arguments. for( i = 0; i < _last_Mach_Reg; i++ ) { --- 714,724 ---- default : ShouldNotReachHere(); } } // Next unused projection number from Start. ! int proj_cnt = C->tf()->domain_cc()->cnt(); // Do all the save-on-entry registers. Make projections from Start for // them, and give them a use at the exit points. To the allocator, they // look like incoming register arguments. for( i = 0; i < _last_Mach_Reg; i++ ) {
*** 1175,1185 **** const TypeTuple *domain; ciMethod* method = NULL; bool is_method_handle_invoke = false; // for special kill effects if( sfpt->is_Call() ) { call = sfpt->as_Call(); ! domain = call->tf()->domain(); cnt = domain->cnt(); // Match just the call, nothing else MachNode *m = match_tree(call); if (C->failing()) return NULL; --- 1175,1185 ---- const TypeTuple *domain; ciMethod* method = NULL; bool is_method_handle_invoke = false; // for special kill effects if( sfpt->is_Call() ) { call = sfpt->as_Call(); ! domain = call->tf()->domain_cc(); cnt = domain->cnt(); // Match just the call, nothing else MachNode *m = match_tree(call); if (C->failing()) return NULL;
*** 1303,1318 **** !parm_regs[i].second()->is_valid() ) { continue; // Avoid Halves } // Grab first register, adjust stack slots and insert in mask. OptoReg::Name reg1 = warp_outgoing_stk_arg(parm_regs[i].first(), begin_out_arg_area, out_arg_limit_per_call ); ! if (OptoReg::is_valid(reg1)) rm->Insert( reg1 ); // Grab second register (if any), adjust stack slots and insert in mask. OptoReg::Name reg2 = warp_outgoing_stk_arg(parm_regs[i].second(), begin_out_arg_area, out_arg_limit_per_call ); ! if (OptoReg::is_valid(reg2)) rm->Insert( reg2 ); } // End of for all arguments // Compute number of stack slots needed to restore stack in case of // Pascal-style argument popping. mcall->_argsize = out_arg_limit_per_call - begin_out_arg_area; --- 1303,1320 ---- !parm_regs[i].second()->is_valid() ) { continue; // Avoid Halves } // Grab first register, adjust stack slots and insert in mask. OptoReg::Name reg1 = warp_outgoing_stk_arg(parm_regs[i].first(), begin_out_arg_area, out_arg_limit_per_call ); ! if (OptoReg::is_valid(reg1)) { rm->Insert( reg1 ); + } // Grab second register (if any), adjust stack slots and insert in mask. OptoReg::Name reg2 = warp_outgoing_stk_arg(parm_regs[i].second(), begin_out_arg_area, out_arg_limit_per_call ); ! if (OptoReg::is_valid(reg2)) { rm->Insert( reg2 ); + } } // End of for all arguments // Compute number of stack slots needed to restore stack in case of // Pascal-style argument popping. mcall->_argsize = out_arg_limit_per_call - begin_out_arg_area;
*** 1349,1359 **** jvms->set_map(sfpt); } // Debug inputs begin just after the last incoming parameter assert((mcall == NULL) || (mcall->jvms() == NULL) || ! (mcall->jvms()->debug_start() + mcall->_jvmadj == mcall->tf()->domain()->cnt()), ""); // Move the OopMap msfpt->_oop_map = sfpt->_oop_map; // Add additional edges. --- 1351,1361 ---- jvms->set_map(sfpt); } // Debug inputs begin just after the last incoming parameter assert((mcall == NULL) || (mcall->jvms() == NULL) || ! (mcall->jvms()->debug_start() + mcall->_jvmadj == mcall->tf()->domain_cc()->cnt()), ""); // Move the OopMap msfpt->_oop_map = sfpt->_oop_map; // Add additional edges.
< prev index next >