< prev index next >

src/share/vm/code/compiledMethod.cpp

Print this page




 298     address pc = fr.pc();
 299     SimpleScopeDesc ssd(this, pc);
 300     Bytecode_invoke call(ssd.method(), ssd.bci());
 301     bool has_receiver = call.has_receiver();
 302     bool has_appendix = call.has_appendix();
 303     Symbol* signature = call.signature();
 304 
 305     // The method attached by JIT-compilers should be used, if present.
 306     // Bytecode can be inaccurate in such case.
 307     Method* callee = attached_method_before_pc(pc);
 308     if (callee != NULL) {
 309       has_receiver = !(callee->access_flags().is_static());
 310       has_appendix = false;
 311       signature = callee->signature();
 312     }
 313 
 314     // If value types are passed as fields, use the extended signature
 315     // which contains the types of all (oop) fields of the value type.
 316     if (ValueTypePassFieldsAsArgs) {
 317       // Check if receiver or one of the arguments is a value type
 318       bool has_value_receiver = (callee != NULL && callee->method_holder()->is_value());
 319       bool has_value_argument = has_value_receiver;
 320       const int len = signature->utf8_length();
 321       for (int i = 0; i < len && !has_value_argument; ++i) {
 322         if (signature->byte_at(i) == 'Q') {
 323           has_value_argument = true;
 324         }
 325       }
 326       if (has_value_argument) {
 327         // Get the extended signature from the callee's adapter through the attached method
 328         assert(callee != NULL, "must have attached method");
 329         signature = callee->adapter()->get_sig_extended();
 330         assert(signature != NULL, "signature is null");
 331         has_receiver = false; // The extended signature contains the receiver type
 332       }
 333     }
 334 
 335     fr.oops_compiled_arguments_do(signature, has_receiver, has_appendix, reg_map, f);
 336   }
 337 #endif // !SHARK
 338 }
 339 
 340 // -----------------------------------------------------------------------------
 341 // CompiledMethod::get_deopt_original_pc
 342 //




 298     address pc = fr.pc();
 299     SimpleScopeDesc ssd(this, pc);
 300     Bytecode_invoke call(ssd.method(), ssd.bci());
 301     bool has_receiver = call.has_receiver();
 302     bool has_appendix = call.has_appendix();
 303     Symbol* signature = call.signature();
 304 
 305     // The method attached by JIT-compilers should be used, if present.
 306     // Bytecode can be inaccurate in such case.
 307     Method* callee = attached_method_before_pc(pc);
 308     if (callee != NULL) {
 309       has_receiver = !(callee->access_flags().is_static());
 310       has_appendix = false;
 311       signature = callee->signature();
 312     }
 313 
 314     // If value types are passed as fields, use the extended signature
 315     // which contains the types of all (oop) fields of the value type.
 316     if (ValueTypePassFieldsAsArgs) {
 317       // Check if receiver or one of the arguments is a value type
 318       bool has_value_receiver = (has_receiver && callee != NULL && callee->method_holder()->is_value());
 319       bool has_value_argument = has_value_receiver;
 320       for (SignatureStream ss(signature); !has_value_argument && !ss.at_return_type(); ss.next()) {
 321         if (ss.type() == T_VALUETYPE) {

 322           has_value_argument = true;
 323         }
 324       }
 325       if (has_value_argument) {
 326         // Get the extended signature from the callee's adapter through the attached method
 327         assert(callee != NULL, "must have attached method");
 328         signature = callee->adapter()->get_sig_extended();
 329         assert(signature != NULL, "signature is null");
 330         has_receiver = false; // The extended signature contains the receiver type
 331       }
 332     }
 333 
 334     fr.oops_compiled_arguments_do(signature, has_receiver, has_appendix, reg_map, f);
 335   }
 336 #endif // !SHARK
 337 }
 338 
 339 // -----------------------------------------------------------------------------
 340 // CompiledMethod::get_deopt_original_pc
 341 //


< prev index next >