src/cpu/x86/vm/interp_masm_x86_32.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/cpu/x86/vm/interp_masm_x86_32.cpp Mon Oct 14 13:44:01 2013
--- new/src/cpu/x86/vm/interp_masm_x86_32.cpp Mon Oct 14 13:44:00 2013
*** 1197,1206 ****
--- 1197,1243 ----
bind(profile_continue);
}
}
+ void InterpreterMacroAssembler::profile_parameters_type(Register mdp, Register tmp1, Register tmp2) {
+ if (ProfileInterpreter && MethodData::profile_parameters()) {
+ Label profile_continue, done;
+
+ test_method_data_pointer(mdp, profile_continue);
+
+ movl(tmp1, Address(mdp, in_bytes(MethodData::parameters_type_data_di_offset()) - in_bytes(MethodData::data_offset())));
+ testl(tmp1, tmp1);
+ jcc(Assembler::negative, profile_continue);
+
+ // start with last parameter
+ addptr(mdp, tmp1);
+ movl(tmp1, Address(mdp, in_bytes(ArrayData::array_len_offset())));
+ decrement(tmp1, TypeStackSlotEntries::per_arg_count());
+
+ Label loop;
+ bind(loop);
+
+ int off_base = in_bytes(ParametersTypeData::stack_slot_offset(0));
+ int type_base = in_bytes(ParametersTypeData::type_offset(0));
+ Address::ScaleFactor per_arg_scale = Address::times(DataLayout::cell_size);
+ Address arg_off(mdp, tmp1, per_arg_scale, off_base);
+ Address arg_type(mdp, tmp1, per_arg_scale, type_base);
+
+ movl(tmp2, arg_off);
+ negl(tmp2);
+ movptr(tmp2, Address(rdi, tmp2, Interpreter::stackElementScale()));
+
+ profile_obj_type(tmp2, arg_type);
+
+ decrement(tmp1, TypeStackSlotEntries::per_arg_count());
+ jcc(Assembler::positive, loop);
+
+ bind(profile_continue);
+ }
+ }
+
void InterpreterMacroAssembler::profile_call(Register mdp) {
if (ProfileInterpreter) {
Label profile_continue;
// If no method data exists, go to profile_continue.
src/cpu/x86/vm/interp_masm_x86_32.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File