< prev index next >

src/share/vm/c1/c1_LIRGenerator.cpp

Print this page

        

*** 3057,3066 **** --- 3057,3111 ---- __ cmp(lir_cond(x->cond()), left.result(), right.result()); __ cmove(lir_cond(x->cond()), t_val.result(), f_val.result(), reg, as_BasicType(x->x()->type())); } + #ifdef JFR_HAVE_INTRINSICS + void LIRGenerator::do_ClassIDIntrinsic(Intrinsic* x) { + CodeEmitInfo* info = state_for(x); + CodeEmitInfo* info2 = new CodeEmitInfo(info); // Clone for the second null check + + assert(info != NULL, "must have info"); + LIRItem arg(x->argument_at(0), this); + + arg.load_item(); + LIR_Opr klass = new_register(T_METADATA); + __ move(new LIR_Address(arg.result(), java_lang_Class::klass_offset_in_bytes(), T_ADDRESS), klass, info); + LIR_Opr id = new_register(T_LONG); + ByteSize offset = KLASS_TRACE_ID_OFFSET; + LIR_Address* trace_id_addr = new LIR_Address(klass, in_bytes(offset), T_LONG); + + __ move(trace_id_addr, id); + __ logical_or(id, LIR_OprFact::longConst(0x01l), id); + __ store(id, trace_id_addr); + + #ifdef TRACE_ID_META_BITS + __ logical_and(id, LIR_OprFact::longConst(~TRACE_ID_META_BITS), id); + #endif + #ifdef TRACE_ID_SHIFT + __ unsigned_shift_right(id, TRACE_ID_SHIFT, id); + #endif + + __ move(id, rlock_result(x)); + } + + void LIRGenerator::do_getEventWriter(Intrinsic* x) { + LabelObj* L_end = new LabelObj(); + + LIR_Address* jobj_addr = new LIR_Address(getThreadPointer(), + in_bytes(THREAD_LOCAL_WRITER_OFFSET_JFR), + T_OBJECT); + LIR_Opr result = rlock_result(x); + __ move_wide(jobj_addr, result); + __ cmp(lir_cond_equal, result, LIR_OprFact::oopConst(NULL)); + __ branch(lir_cond_equal, T_OBJECT, L_end->label()); + __ move_wide(new LIR_Address(result, T_OBJECT), result); + + __ branch_destination(L_end->label()); + } + #endif + void LIRGenerator::do_RuntimeCall(address routine, int expected_arguments, Intrinsic* x) { assert(x->number_of_arguments() == expected_arguments, "wrong type"); LIR_Opr reg = result_register_for(x->type()); __ call_runtime_leaf(routine, getThreadTemp(), reg, new LIR_OprList());
*** 3113,3127 **** case vmIntrinsics::_floatToRawIntBits : { do_FPIntrinsics(x); break; } ! #ifdef TRACE_HAVE_INTRINSICS ! case vmIntrinsics::_threadID: do_ThreadIDIntrinsic(x); break; ! case vmIntrinsics::_classID: do_ClassIDIntrinsic(x); break; case vmIntrinsics::_counterTime: ! do_RuntimeCall(CAST_FROM_FN_PTR(address, TRACE_TIME_METHOD), 0, x); break; #endif case vmIntrinsics::_currentTimeMillis: do_RuntimeCall(CAST_FROM_FN_PTR(address, os::javaTimeMillis), 0, x); --- 3158,3176 ---- case vmIntrinsics::_floatToRawIntBits : { do_FPIntrinsics(x); break; } ! #ifdef JFR_HAVE_INTRINSICS ! case vmIntrinsics::_getClassId: ! do_ClassIDIntrinsic(x); ! break; ! case vmIntrinsics::_getEventWriter: ! do_getEventWriter(x); ! break; case vmIntrinsics::_counterTime: ! do_RuntimeCall(CAST_FROM_FN_PTR(address, JFR_TIME_FUNCTION), 0, x); break; #endif case vmIntrinsics::_currentTimeMillis: do_RuntimeCall(CAST_FROM_FN_PTR(address, os::javaTimeMillis), 0, x);
< prev index next >