src/share/vm/opto/library_call.cpp

Print this page
rev 9706 : 8147844: new method j.l.Runtime.onSpinWait() and the corresponding x86 hotspot instrinsic
Contributed-by: ikrylov, ygaevsky
Reviewed-by: iveresov, vlivanov

*** 277,286 **** --- 277,287 ---- typedef enum { LS_xadd, LS_xchg, LS_cmpxchg } LoadStoreKind; bool inline_unsafe_load_store(BasicType type, LoadStoreKind kind); bool inline_unsafe_ordered_store(BasicType type); bool inline_unsafe_fence(vmIntrinsics::ID id); + bool inline_onspinwait(); bool inline_fp_conversions(vmIntrinsics::ID id); bool inline_number_methods(vmIntrinsics::ID id); bool inline_reference_get(); bool inline_Class_cast(); bool inline_aescrypt_Block(vmIntrinsics::ID id);
*** 632,641 **** --- 633,644 ---- case vmIntrinsics::_loadFence: case vmIntrinsics::_storeFence: case vmIntrinsics::_fullFence: return inline_unsafe_fence(intrinsic_id()); + case vmIntrinsics::_onSpinWait: return inline_onspinwait(); + case vmIntrinsics::_currentThread: return inline_native_currentThread(); case vmIntrinsics::_isInterrupted: return inline_native_isInterrupted(); #ifdef TRACE_HAVE_INTRINSICS case vmIntrinsics::_classID: return inline_native_classID();
*** 3111,3120 **** --- 3114,3128 ---- fatal_unexpected_iid(id); return false; } } + bool LibraryCallKit::inline_onspinwait() { + insert_mem_bar(Op_OnSpinWait); + return true; + } + bool LibraryCallKit::klass_needs_init_guard(Node* kls) { if (!kls->is_Con()) { return true; } const TypeKlassPtr* klsptr = kls->bottom_type()->isa_klassptr();
*** 3494,3503 **** --- 3502,3514 ---- case vmIntrinsics::_isInstance: // nothing is an instance of a primitive type query_value = gen_instanceof(obj, kls, safe_for_replace); break; + case vmIntrinsics::_onSpinWait: + break; + case vmIntrinsics::_getModifiers: p = basic_plus_adr(kls, in_bytes(Klass::modifier_flags_offset())); query_value = make_load(NULL, p, TypeInt::INT, T_INT, MemNode::unordered); break;