diff src/cpu/sparc/vm/interp_masm_sparc.cpp @ 14909:4ca6dc0799b6

Backout jdk9 merge
author Gilles Duboscq <duboscq@ssw.jku.at>
date Tue, 01 Apr 2014 13:57:07 +0200
parents d8041d695d19
children 52b4284cb496
line wrap: on
line diff
--- a/src/cpu/sparc/vm/interp_masm_sparc.cpp	Tue Apr 01 14:09:03 2014 +0200
+++ b/src/cpu/sparc/vm/interp_masm_sparc.cpp	Tue Apr 01 13:57:07 2014 +0200
@@ -1942,220 +1942,6 @@
   }
 }
 
-void InterpreterMacroAssembler::profile_obj_type(Register obj, const Address& mdo_addr, Register tmp) {
-  Label not_null, do_nothing, do_update;
-
-  assert_different_registers(obj, mdo_addr.base(), tmp);
-
-  verify_oop(obj);
-
-  ld_ptr(mdo_addr, tmp);
-
-  br_notnull_short(obj, pt, not_null);
-  or3(tmp, TypeEntries::null_seen, tmp);
-  ba_short(do_update);
-
-  bind(not_null);
-  load_klass(obj, obj);
-
-  xor3(obj, tmp, obj);
-  btst(TypeEntries::type_klass_mask, obj);
-  // klass seen before, nothing to do. The unknown bit may have been
-  // set already but no need to check.
-  brx(zero, false, pt, do_nothing);
-  delayed()->
-
-  btst(TypeEntries::type_unknown, obj);
-  // already unknown. Nothing to do anymore.
-  brx(notZero, false, pt, do_nothing);
-  delayed()->
-
-  btst(TypeEntries::type_mask, tmp);
-  brx(zero, true, pt, do_update);
-  // first time here. Set profile type.
-  delayed()->or3(tmp, obj, tmp);
-
-  // different than before. Cannot keep accurate profile.
-  or3(tmp, TypeEntries::type_unknown, tmp);
-
-  bind(do_update);
-  // update profile
-  st_ptr(tmp, mdo_addr);
-
-  bind(do_nothing);
-}
-
-void InterpreterMacroAssembler::profile_arguments_type(Register callee, Register tmp1, Register tmp2, bool is_virtual) {
-  if (!ProfileInterpreter) {
-    return;
-  }
-
-  assert_different_registers(callee, tmp1, tmp2, ImethodDataPtr);
-
-  if (MethodData::profile_arguments() || MethodData::profile_return()) {
-    Label profile_continue;
-
-    test_method_data_pointer(profile_continue);
-
-    int off_to_start = is_virtual ? in_bytes(VirtualCallData::virtual_call_data_size()) : in_bytes(CounterData::counter_data_size());
-
-    ldub(ImethodDataPtr, in_bytes(DataLayout::tag_offset()) - off_to_start, tmp1);
-    cmp_and_br_short(tmp1, is_virtual ? DataLayout::virtual_call_type_data_tag : DataLayout::call_type_data_tag, notEqual, pn, profile_continue);
-
-    if (MethodData::profile_arguments()) {
-      Label done;
-      int off_to_args = in_bytes(TypeEntriesAtCall::args_data_offset());
-      add(ImethodDataPtr, off_to_args, ImethodDataPtr);
-
-      for (int i = 0; i < TypeProfileArgsLimit; i++) {
-        if (i > 0 || MethodData::profile_return()) {
-          // If return value type is profiled we may have no argument to profile
-          ld_ptr(ImethodDataPtr, in_bytes(TypeEntriesAtCall::cell_count_offset())-off_to_args, tmp1);
-          sub(tmp1, i*TypeStackSlotEntries::per_arg_count(), tmp1);
-          cmp_and_br_short(tmp1, TypeStackSlotEntries::per_arg_count(), less, pn, done);
-        }
-        ld_ptr(Address(callee, Method::const_offset()), tmp1);
-        lduh(Address(tmp1, ConstMethod::size_of_parameters_offset()), tmp1);
-        // stack offset o (zero based) from the start of the argument
-        // list, for n arguments translates into offset n - o - 1 from
-        // the end of the argument list. But there's an extra slot at
-        // the stop of the stack. So the offset is n - o from Lesp.
-        ld_ptr(ImethodDataPtr, in_bytes(TypeEntriesAtCall::stack_slot_offset(i))-off_to_args, tmp2);
-        sub(tmp1, tmp2, tmp1);
-
-        // Can't use MacroAssembler::argument_address() which needs Gargs to be set up
-        sll(tmp1, Interpreter::logStackElementSize, tmp1);
-        ld_ptr(Lesp, tmp1, tmp1);
-
-        Address mdo_arg_addr(ImethodDataPtr, in_bytes(TypeEntriesAtCall::argument_type_offset(i))-off_to_args);
-        profile_obj_type(tmp1, mdo_arg_addr, tmp2);
-
-        int to_add = in_bytes(TypeStackSlotEntries::per_arg_size());
-        add(ImethodDataPtr, to_add, ImethodDataPtr);
-        off_to_args += to_add;
-      }
-
-      if (MethodData::profile_return()) {
-        ld_ptr(ImethodDataPtr, in_bytes(TypeEntriesAtCall::cell_count_offset())-off_to_args, tmp1);
-        sub(tmp1, TypeProfileArgsLimit*TypeStackSlotEntries::per_arg_count(), tmp1);
-      }
-
-      bind(done);
-
-      if (MethodData::profile_return()) {
-        // We're right after the type profile for the last
-        // argument. tmp1 is the number of cells left in the
-        // CallTypeData/VirtualCallTypeData to reach its end. Non null
-        // if there's a return to profile.
-        assert(ReturnTypeEntry::static_cell_count() < TypeStackSlotEntries::per_arg_count(), "can't move past ret type");
-        sll(tmp1, exact_log2(DataLayout::cell_size), tmp1);
-        add(ImethodDataPtr, tmp1, ImethodDataPtr);
-      }
-    } else {
-      assert(MethodData::profile_return(), "either profile call args or call ret");
-      update_mdp_by_constant(in_bytes(ReturnTypeEntry::size()));
-    }
-
-    // mdp points right after the end of the
-    // CallTypeData/VirtualCallTypeData, right after the cells for the
-    // return value type if there's one.
-
-    bind(profile_continue);
-  }
-}
-
-void InterpreterMacroAssembler::profile_return_type(Register ret, Register tmp1, Register tmp2) {
-  assert_different_registers(ret, tmp1, tmp2);
-  if (ProfileInterpreter && MethodData::profile_return()) {
-    Label profile_continue, done;
-
-    test_method_data_pointer(profile_continue);
-
-    if (MethodData::profile_return_jsr292_only()) {
-      // If we don't profile all invoke bytecodes we must make sure
-      // it's a bytecode we indeed profile. We can't go back to the
-      // begining of the ProfileData we intend to update to check its
-      // type because we're right after it and we don't known its
-      // length.
-      Label do_profile;
-      ldub(Lbcp, 0, tmp1);
-      cmp_and_br_short(tmp1, Bytecodes::_invokedynamic, equal, pn, do_profile);
-      cmp(tmp1, Bytecodes::_invokehandle);
-      br(equal, false, pn, do_profile);
-      delayed()->ldub(Lmethod, Method::intrinsic_id_offset_in_bytes(), tmp1);
-      cmp_and_br_short(tmp1, vmIntrinsics::_compiledLambdaForm, notEqual, pt, profile_continue);
-
-      bind(do_profile);
-    }
-
-    Address mdo_ret_addr(ImethodDataPtr, -in_bytes(ReturnTypeEntry::size()));
-    mov(ret, tmp1);
-    profile_obj_type(tmp1, mdo_ret_addr, tmp2);
-
-    bind(profile_continue);
-  }
-}
-
-void InterpreterMacroAssembler::profile_parameters_type(Register tmp1, Register tmp2, Register tmp3, Register tmp4) {
-  if (ProfileInterpreter && MethodData::profile_parameters()) {
-    Label profile_continue, done;
-
-    test_method_data_pointer(profile_continue);
-
-    // Load the offset of the area within the MDO used for
-    // parameters. If it's negative we're not profiling any parameters.
-    lduw(ImethodDataPtr, in_bytes(MethodData::parameters_type_data_di_offset()) - in_bytes(MethodData::data_offset()), tmp1);
-    cmp_and_br_short(tmp1, 0, less, pn, profile_continue);
-
-    // Compute a pointer to the area for parameters from the offset
-    // and move the pointer to the slot for the last
-    // parameters. Collect profiling from last parameter down.
-    // mdo start + parameters offset + array length - 1
-
-    // Pointer to the parameter area in the MDO
-    Register mdp = tmp1;
-    add(ImethodDataPtr, tmp1, mdp);
-
-    // offset of the current profile entry to update
-    Register entry_offset = tmp2;
-    // entry_offset = array len in number of cells
-    ld_ptr(mdp, ArrayData::array_len_offset(), entry_offset);
-
-    int off_base = in_bytes(ParametersTypeData::stack_slot_offset(0));
-    assert(off_base % DataLayout::cell_size == 0, "should be a number of cells");
-
-    // entry_offset (number of cells)  = array len - size of 1 entry + offset of the stack slot field
-    sub(entry_offset, TypeStackSlotEntries::per_arg_count() - (off_base / DataLayout::cell_size), entry_offset);
-    // entry_offset in bytes
-    sll(entry_offset, exact_log2(DataLayout::cell_size), entry_offset);
-
-    Label loop;
-    bind(loop);
-
-    // load offset on the stack from the slot for this parameter
-    ld_ptr(mdp, entry_offset, tmp3);
-    sll(tmp3,Interpreter::logStackElementSize, tmp3);
-    neg(tmp3);
-    // read the parameter from the local area
-    ld_ptr(Llocals, tmp3, tmp3);
-
-    // make entry_offset now point to the type field for this parameter
-    int type_base = in_bytes(ParametersTypeData::type_offset(0));
-    assert(type_base > off_base, "unexpected");
-    add(entry_offset, type_base - off_base, entry_offset);
-
-    // profile the parameter
-    Address arg_type(mdp, entry_offset);
-    profile_obj_type(tmp3, arg_type, tmp4);
-
-    // go to next parameter
-    sub(entry_offset, TypeStackSlotEntries::per_arg_count() * DataLayout::cell_size + (type_base - off_base), entry_offset);
-    cmp_and_br_short(entry_offset, off_base, greaterEqual, pt, loop);
-
-    bind(profile_continue);
-  }
-}
-
 // add a InterpMonitorElem to stack (see frame_sparc.hpp)
 
 void InterpreterMacroAssembler::add_monitor_to_stack( bool stack_is_empty,