src/cpu/sparc/vm/templateTable_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/cpu/sparc/vm/templateTable_sparc.cpp

src/cpu/sparc/vm/templateTable_sparc.cpp

Print this page
rev 5761 : 8026253: New type profiling points: sparc support
Summary: c1 and interpreter support for new type profiling on sparc
Reviewed-by:

*** 2940,2955 **** } } void TemplateTable::generate_vtable_call(Register Rrecv, Register Rindex, Register Rret) { - Register Rtemp = G4_scratch; Register Rcall = Rindex; assert_different_registers(Rcall, G5_method, Gargs, Rret); // get target Method* & entry point __ lookup_virtual_method(Rrecv, Rindex, G5_method); __ call_from_interpreter(Rcall, Gargs, Rret); } void TemplateTable::invokevirtual(int byte_no) { transition(vtos, vtos); --- 2940,2955 ---- } } void TemplateTable::generate_vtable_call(Register Rrecv, Register Rindex, Register Rret) { Register Rcall = Rindex; assert_different_registers(Rcall, G5_method, Gargs, Rret); // get target Method* & entry point __ lookup_virtual_method(Rrecv, Rindex, G5_method); + __ profile_arguments_type(G5_method, Rcall, Gargs, true); __ call_from_interpreter(Rcall, Gargs, Rret); } void TemplateTable::invokevirtual(int byte_no) { transition(vtos, vtos);
*** 3020,3029 **** --- 3020,3030 ---- // receiver NULL check __ null_check(O0); __ profile_final_call(O4); + __ profile_arguments_type(G5_method, Rscratch, Gargs, true); // get return address AddressLiteral table(Interpreter::invoke_return_entry_table()); __ set(table, Rtemp); __ srl(Rret, ConstantPoolCacheEntry::tos_state_shift, Rret); // get return type
*** 3049,3058 **** --- 3050,3060 ---- prepare_invoke(byte_no, G5_method, Rret, noreg, O0_recv); // get receiver also for null check __ null_check(O0_recv); // do the call __ profile_call(O4); + __ profile_arguments_type(G5_method, Rscratch, Gargs, false); __ call_from_interpreter(Rscratch, Gargs, Rret); } void TemplateTable::invokestatic(int byte_no) {
*** 3064,3073 **** --- 3066,3076 ---- prepare_invoke(byte_no, G5_method, Rret); // get f1 Method* // do the call __ profile_call(O4); + __ profile_arguments_type(G5_method, Rscratch, Gargs, false); __ call_from_interpreter(Rscratch, Gargs, Rret); } void TemplateTable::invokeinterface_object_method(Register RKlass, Register Rcall,
*** 3089,3098 **** --- 3092,3102 ---- __ profile_final_call(O4); // do the call - the index (f2) contains the Method* assert_different_registers(G5_method, Gargs, Rcall); __ mov(Rindex, G5_method); + __ profile_arguments_type(G5_method, Rcall, Gargs, true); __ call_from_interpreter(Rcall, Gargs, Rret); __ bind(notFinal); __ profile_virtual_call(RKlass, O4); generate_vtable_call(RKlass, Rindex, Rret);
*** 3195,3204 **** --- 3199,3209 ---- } Register Rcall = Rinterface; assert_different_registers(Rcall, G5_method, Gargs, Rret); + __ profile_arguments_type(G5_method, Rcall, Gargs, true); __ call_from_interpreter(Rcall, Gargs, Rret); } void TemplateTable::invokehandle(int byte_no) { transition(vtos, vtos);
*** 3224,3233 **** --- 3229,3239 ---- // Note: G4_mtype is already pushed (if necessary) by prepare_invoke // do the call __ verify_oop(G4_mtype); __ profile_final_call(O4); // FIXME: profile the LambdaForm also + __ profile_arguments_type(G5_method, Rscratch, Gargs, true); __ call_from_interpreter(Rscratch, Gargs, Rret); } void TemplateTable::invokedynamic(int byte_no) {
*** 3260,3269 **** --- 3266,3276 ---- // profile this call __ profile_call(O4); // do the call __ verify_oop(G4_callsite); + __ profile_arguments_type(G5_method, Rscratch, Gargs, false); __ call_from_interpreter(Rscratch, Gargs, Rret); } //----------------------------------------------------------------------------------------------------
src/cpu/sparc/vm/templateTable_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File