< prev index next >

src/share/vm/opto/runtime.cpp

Print this page

        

*** 32,41 **** --- 32,42 ---- #include "code/pcDesc.hpp" #include "code/scopeDesc.hpp" #include "code/vtableStubs.hpp" #include "compiler/compileBroker.hpp" #include "compiler/oopMap.hpp" + #include "gc/shenandoah/shenandoahBarrierSet.hpp" #include "gc/g1/g1SATBCardTableModRefBS.hpp" #include "gc/g1/heapRegion.hpp" #include "gc/shared/barrierSet.hpp" #include "gc/shared/collectedHeap.hpp" #include "gc/shared/gcLocker.inline.hpp"
*** 418,428 **** assert(oop(dims)->is_typeArray(), "not an array"); ResourceMark rm; jint len = dims->length(); assert(len > 0, "Dimensions array should contain data"); ! jint *j_dims = typeArrayOop(dims)->int_at_addr(0); jint *c_dims = NEW_RESOURCE_ARRAY(jint, len); Copy::conjoint_jints_atomic(j_dims, c_dims, len); oop obj = ArrayKlass::cast(elem_type)->multi_allocate(len, c_dims, THREAD); deoptimize_caller_frame(thread, HAS_PENDING_EXCEPTION); --- 419,429 ---- assert(oop(dims)->is_typeArray(), "not an array"); ResourceMark rm; jint len = dims->length(); assert(len > 0, "Dimensions array should contain data"); ! jint *j_dims = typeArrayOop(oopDesc::bs()->read_barrier(dims))->int_at_addr(0); jint *c_dims = NEW_RESOURCE_ARRAY(jint, len); Copy::conjoint_jints_atomic(j_dims, c_dims, len); oop obj = ArrayKlass::cast(elem_type)->multi_allocate(len, c_dims, THREAD); deoptimize_caller_frame(thread, HAS_PENDING_EXCEPTION);
*** 433,442 **** --- 434,444 ---- // Very few notify/notifyAll operations find any threads on the waitset, so // the dominant fast-path is to simply return. // Relatedly, it's critical that notify/notifyAll be fast in order to // reduce lock hold times. + obj = oopDesc::bs()->write_barrier(obj); if (!SafepointSynchronize::is_synchronizing()) { if (ObjectSynchronizer::quick_notify(obj, thread, false)) { return; } }
*** 451,460 **** --- 453,463 ---- JRT_BLOCK_END; JRT_END JRT_BLOCK_ENTRY(void, OptoRuntime::monitor_notifyAll_C(oopDesc* obj, JavaThread *thread)) + obj = oopDesc::bs()->write_barrier(obj); if (!SafepointSynchronize::is_synchronizing() ) { if (ObjectSynchronizer::quick_notify(obj, thread, true)) { return; } }
*** 589,598 **** --- 592,628 ---- const TypeTuple *range = TypeTuple::make(TypeFunc::Parms, fields); return TypeFunc::make(domain, range); } + const TypeFunc *OptoRuntime::shenandoah_clone_barrier_Type() { + const Type **fields = TypeTuple::fields(1); + fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; // original field value + const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+1, fields); + + // create result type (range) + fields = TypeTuple::fields(0); + const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+0, fields); + + return TypeFunc::make(domain, range); + } + + const TypeFunc *OptoRuntime::shenandoah_cas_obj_Type() { + const Type **fields = TypeTuple::fields(3); + fields[TypeFunc::Parms+0] = TypeRawPtr::NOTNULL; // Address + fields[TypeFunc::Parms+1] = TypeInstPtr::BOTTOM; // New value + fields[TypeFunc::Parms+2] = TypeInstPtr::BOTTOM; // Expected value + const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+3, fields); + + // create result type (range) + fields = TypeTuple::fields(1); + fields[TypeFunc::Parms+0] = TypeInt::BOOL; + const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+1, fields); + + return TypeFunc::make(domain, range); + } + const TypeFunc *OptoRuntime::uncommon_trap_Type() { // create input type (domain) const Type **fields = TypeTuple::fields(1); fields[TypeFunc::Parms+0] = TypeInt::INT; // trap_reason (deopt reason and action) const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+1, fields);
< prev index next >