< prev index next >
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMemoryAccessProviderImpl.java
Print this page
@@ -136,25 +136,10 @@
}
}
return true;
}
- private boolean isValidObjectFieldDisplacement(Constant base, long displacement) {
- if (base instanceof HotSpotMetaspaceConstant) {
- MetaspaceWrapperObject metaspaceObject = HotSpotMetaspaceConstantImpl.getMetaspaceObject(base);
- if (metaspaceObject instanceof HotSpotResolvedObjectTypeImpl) {
- if (displacement == runtime.getConfig().classMirrorOffset) {
- // Klass::_java_mirror is valid for all Klass* values
- return true;
- }
- } else {
- throw new IllegalArgumentException(String.valueOf(metaspaceObject));
- }
- }
- return false;
- }
-
private static long asRawPointer(Constant base) {
if (base instanceof HotSpotMetaspaceConstantImpl) {
MetaspaceWrapperObject meta = HotSpotMetaspaceConstantImpl.getMetaspaceObject(base);
return meta.getMetaspacePointer();
} else if (base instanceof PrimitiveConstant) {
@@ -200,11 +185,11 @@
private boolean verifyReadRawObject(Object expected, Constant base, long displacement) {
if (base instanceof HotSpotMetaspaceConstant) {
MetaspaceWrapperObject metaspaceObject = HotSpotMetaspaceConstantImpl.getMetaspaceObject(base);
if (metaspaceObject instanceof HotSpotResolvedObjectTypeImpl) {
- if (displacement == runtime.getConfig().classMirrorOffset) {
+ if (displacement == runtime.getConfig().classMirrorHandleOffset) {
assert expected == ((HotSpotResolvedObjectTypeImpl) metaspaceObject).mirror();
}
}
}
return true;
@@ -292,14 +277,22 @@
public JavaConstant readObjectConstant(Constant base, long displacement) {
if (base instanceof HotSpotObjectConstantImpl) {
Object o = readRawObject(base, displacement, runtime.getConfig().useCompressedOops);
return HotSpotObjectConstantImpl.forObject(o);
}
- if (!isValidObjectFieldDisplacement(base, displacement)) {
- return null;
+ if (base instanceof HotSpotMetaspaceConstant) {
+ MetaspaceWrapperObject metaspaceObject = HotSpotMetaspaceConstantImpl.getMetaspaceObject(base);
+ if (metaspaceObject instanceof HotSpotResolvedObjectTypeImpl) {
+ if (displacement == runtime.getConfig().classMirrorHandleOffset) {
+ // Klass::_java_mirror is valid for all Klass* values
+ return HotSpotObjectConstantImpl.forObject(((HotSpotResolvedObjectTypeImpl) metaspaceObject).mirror());
}
- return HotSpotObjectConstantImpl.forObject(readRawObject(base, displacement, false));
+ } else {
+ throw new IllegalArgumentException(String.valueOf(metaspaceObject));
+ }
+ }
+ return null;
}
@Override
public JavaConstant readNarrowOopConstant(Constant base, long displacement) {
return HotSpotObjectConstantImpl.forObject(readRawObject(base, displacement, true), true);
< prev index next >