< 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 >