< prev index next >
src/hotspot/share/runtime/stackValue.cpp
Print this page
rev 52710 : Upstream/backport Shenandoah to JDK11u
*** 30,39 ****
--- 30,42 ----
#include "runtime/handles.inline.hpp"
#include "runtime/stackValue.hpp"
#if INCLUDE_ZGC
#include "gc/z/zBarrier.inline.hpp"
#endif
+ #if INCLUDE_SHENANDOAHGC
+ #include "gc/shenandoah/shenandoahBarrierSet.hpp"
+ #endif
StackValue* StackValue::create_stack_value(const frame* fr, const RegisterMap* reg_map, ScopeValue* sv) {
if (sv->is_location()) {
// Stack or register value
Location loc = ((LocationValue *)sv)->location();
*** 104,115 ****
// saved long to the int that the JVM wants.
value.noop = (narrowOop) *(julong*) value_addr;
} else {
value.noop = *(narrowOop*) value_addr;
}
! // Decode narrowoop and wrap a handle around the oop
! Handle h(Thread::current(), CompressedOops::decode(value.noop));
return new StackValue(h);
}
#endif
case Location::oop: {
oop val = *(oop *)value_addr;
--- 107,125 ----
// saved long to the int that the JVM wants.
value.noop = (narrowOop) *(julong*) value_addr;
} else {
value.noop = *(narrowOop*) value_addr;
}
! // Decode narrowoop
! oop val = CompressedOops::decode(value.noop);
! // Deoptimization must make sure all oops have passed load barriers
! #if INCLUDE_SHENANDOAHGC
! if (UseShenandoahGC) {
! val = ShenandoahBarrierSet::barrier_set()->load_reference_barrier(val);
! }
! #endif
! Handle h(Thread::current(), val); // Wrap a handle around the oop
return new StackValue(h);
}
#endif
case Location::oop: {
oop val = *(oop *)value_addr;
*** 120,136 ****
// The narrow_oop_base could be NULL or be the address
// of the page below heap. Use NULL value for both cases.
val = (oop)NULL;
}
#endif
#if INCLUDE_ZGC
- // Deoptimization must make sure all oop have passed load barrier
if (UseZGC) {
val = ZBarrier::load_barrier_on_oop_field_preloaded((oop*)value_addr, val);
}
#endif
!
Handle h(Thread::current(), val); // Wrap a handle around the oop
return new StackValue(h);
}
case Location::addr: {
ShouldNotReachHere(); // both C1 and C2 now inline jsrs
--- 130,150 ----
// The narrow_oop_base could be NULL or be the address
// of the page below heap. Use NULL value for both cases.
val = (oop)NULL;
}
#endif
+ // Deoptimization must make sure all oops have passed load barriers
#if INCLUDE_ZGC
if (UseZGC) {
val = ZBarrier::load_barrier_on_oop_field_preloaded((oop*)value_addr, val);
}
#endif
! #if INCLUDE_SHENANDOAHGC
! if (UseShenandoahGC) {
! val = ShenandoahBarrierSet::barrier_set()->load_reference_barrier(val);
! }
! #endif
Handle h(Thread::current(), val); // Wrap a handle around the oop
return new StackValue(h);
}
case Location::addr: {
ShouldNotReachHere(); // both C1 and C2 now inline jsrs
< prev index next >