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