Mercurial > hg > graal-jvmci-8
changeset 22556:6821ef65ef4c
HotSpotMetaspaceConstantImpl is not a PrimitiveConstant.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Mon, 14 Sep 2015 17:05:34 +0200 |
parents | 2fe06375f2d3 |
children | 0a7b7c7274be |
files | jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotMemoryAccessProviderImpl.java jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotMetaspaceConstantImpl.java jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotResolvedJavaMethodImpl.java jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotResolvedObjectTypeImpl.java src/share/vm/jvmci/jvmciCodeInstaller.cpp src/share/vm/jvmci/jvmciJavaClasses.hpp |
diffstat | 6 files changed, 46 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotMemoryAccessProviderImpl.java Mon Sep 14 16:25:07 2015 +0200 +++ b/jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotMemoryAccessProviderImpl.java Mon Sep 14 17:05:34 2015 +0200 @@ -23,7 +23,6 @@ package jdk.internal.jvmci.hotspot; import static jdk.internal.jvmci.hotspot.UnsafeAccess.UNSAFE; -import jdk.internal.jvmci.code.TargetDescription; import jdk.internal.jvmci.common.JVMCIError; import jdk.internal.jvmci.hotspot.HotSpotVMConfig.CompressEncoding; import jdk.internal.jvmci.meta.Constant; @@ -215,8 +214,7 @@ if (klass == null) { return JavaConstant.NULL_POINTER; } - TargetDescription target = runtime.getHostJVMCIBackend().getCodeCache().getTarget(); - return HotSpotMetaspaceConstantImpl.forMetaspaceObject(target.wordKind, klass.getMetaspaceKlass(), klass, false); + return HotSpotMetaspaceConstantImpl.forMetaspaceObject(klass.getMetaspaceKlass(), klass, false); } @Override @@ -225,15 +223,14 @@ if (klass == null) { return HotSpotCompressedNullConstant.COMPRESSED_NULL; } - return HotSpotMetaspaceConstantImpl.forMetaspaceObject(JavaKind.Int, encoding.compress(klass.getMetaspaceKlass()), klass, true); + return HotSpotMetaspaceConstantImpl.forMetaspaceObject(encoding.compress(klass.getMetaspaceKlass()), klass, true); } @Override public Constant readMethodPointerConstant(Constant base, long displacement) { - TargetDescription target = runtime.getHostJVMCIBackend().getCodeCache().getTarget(); assert (base instanceof HotSpotObjectConstantImpl); Object baseObject = ((HotSpotObjectConstantImpl) base).object(); HotSpotResolvedJavaMethodImpl method = runtime.getCompilerToVM().getResolvedJavaMethod(baseObject, displacement); - return HotSpotMetaspaceConstantImpl.forMetaspaceObject(target.wordKind, method.getMetaspaceMethod(), method, false); + return HotSpotMetaspaceConstantImpl.forMetaspaceObject(method.getMetaspaceMethod(), method, false); } }
--- a/jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotMetaspaceConstantImpl.java Mon Sep 14 16:25:07 2015 +0200 +++ b/jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotMetaspaceConstantImpl.java Mon Sep 14 17:05:34 2015 +0200 @@ -27,10 +27,10 @@ import jdk.internal.jvmci.hotspot.HotSpotVMConfig.*; import jdk.internal.jvmci.meta.*; -public final class HotSpotMetaspaceConstantImpl extends PrimitiveConstant implements HotSpotMetaspaceConstant, VMConstant, HotSpotProxified { +public final class HotSpotMetaspaceConstantImpl implements HotSpotMetaspaceConstant, VMConstant, HotSpotProxified { - static HotSpotMetaspaceConstantImpl forMetaspaceObject(JavaKind kind, long primitive, Object metaspaceObject, boolean compressed) { - return new HotSpotMetaspaceConstantImpl(kind, primitive, metaspaceObject, compressed); + static HotSpotMetaspaceConstantImpl forMetaspaceObject(long rawValue, Object metaspaceObject, boolean compressed) { + return new HotSpotMetaspaceConstantImpl(rawValue, metaspaceObject, compressed); } static Object getMetaspaceObject(Constant constant) { @@ -38,43 +38,61 @@ } private final Object metaspaceObject; + private final long rawValue; private final boolean compressed; - private HotSpotMetaspaceConstantImpl(JavaKind kind, long primitive, Object metaspaceObject, boolean compressed) { - super(kind, primitive); + private HotSpotMetaspaceConstantImpl(long rawValue, Object metaspaceObject, boolean compressed) { this.metaspaceObject = metaspaceObject; + this.rawValue = rawValue; this.compressed = compressed; } @Override public int hashCode() { - return super.hashCode() ^ System.identityHashCode(metaspaceObject); + return System.identityHashCode(metaspaceObject) ^ (int) (rawValue ^ (rawValue >>> 32)) ^ (compressed ? 1 : 2); } @Override public boolean equals(Object o) { - return o == this || (o instanceof HotSpotMetaspaceConstantImpl && super.equals(o) && Objects.equals(metaspaceObject, ((HotSpotMetaspaceConstantImpl) o).metaspaceObject)); + if (o == this) { + return true; + } + if (!(o instanceof HotSpotMetaspaceConstantImpl)) { + return false; + } + + HotSpotMetaspaceConstantImpl other = (HotSpotMetaspaceConstantImpl) o; + return Objects.equals(this.metaspaceObject, other.metaspaceObject) && this.rawValue == other.rawValue && this.compressed == other.compressed; + } + + @Override + public String toValueString() { + return String.format("meta[%08x]{%s%s}", rawValue, metaspaceObject, compressed ? ";compressed" : ""); } @Override public String toString() { - return super.toString() + "{" + metaspaceObject + (compressed ? ";compressed}" : "}"); + return toValueString(); + } + + public boolean isDefaultForKind() { + return rawValue == 0; } public boolean isCompressed() { return compressed; } - public JavaConstant compress(CompressEncoding encoding) { + public Constant compress(CompressEncoding encoding) { assert !isCompressed(); - HotSpotMetaspaceConstantImpl res = HotSpotMetaspaceConstantImpl.forMetaspaceObject(JavaKind.Int, encoding.compress(asLong()), metaspaceObject, true); + HotSpotMetaspaceConstantImpl res = HotSpotMetaspaceConstantImpl.forMetaspaceObject(encoding.compress(rawValue), metaspaceObject, true); assert res.isCompressed(); return res; } - public JavaConstant uncompress(CompressEncoding encoding) { + public Constant uncompress(CompressEncoding encoding) { assert isCompressed(); - HotSpotMetaspaceConstantImpl res = HotSpotMetaspaceConstantImpl.forMetaspaceObject(JavaKind.Long, encoding.uncompress(asInt()), metaspaceObject, false); + HotSpotMetaspaceConstantImpl res = HotSpotMetaspaceConstantImpl.forMetaspaceObject(encoding.uncompress((int) rawValue), metaspaceObject, false); assert !res.isCompressed(); return res; } @@ -94,6 +112,6 @@ } public long rawValue() { - return asLong(); + return rawValue; } }
--- a/jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotResolvedJavaMethodImpl.java Mon Sep 14 16:25:07 2015 +0200 +++ b/jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotResolvedJavaMethodImpl.java Mon Sep 14 17:05:34 2015 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -172,8 +172,8 @@ /** * Gets the address of the C++ Method object for this method. */ - public JavaConstant getMetaspaceMethodConstant() { - return HotSpotMetaspaceConstantImpl.forMetaspaceObject(getHostWordKind(), metaspaceMethod, this, false); + public Constant getMetaspaceMethodConstant() { + return HotSpotMetaspaceConstantImpl.forMetaspaceObject(metaspaceMethod, this, false); } public long getMetaspaceMethod() { @@ -185,7 +185,7 @@ } @Override - public JavaConstant getEncoding() { + public Constant getEncoding() { return getMetaspaceMethodConstant(); }
--- a/jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotResolvedObjectTypeImpl.java Mon Sep 14 16:25:07 2015 +0200 +++ b/jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotResolvedObjectTypeImpl.java Mon Sep 14 17:05:34 2015 +0200 @@ -289,7 +289,7 @@ } @Override - public JavaConstant getObjectHub() { + public Constant getObjectHub() { return klass(); } @@ -784,8 +784,8 @@ /** * Gets the metaspace Klass boxed in a {@link JavaConstant}. */ - public JavaConstant klass() { - return HotSpotMetaspaceConstantImpl.forMetaspaceObject(runtime().getHostJVMCIBackend().getTarget().wordKind, getMetaspaceKlass(), this, false); + public Constant klass() { + return HotSpotMetaspaceConstantImpl.forMetaspaceObject(getMetaspaceKlass(), this, false); } public boolean isPrimaryType() {
--- a/src/share/vm/jvmci/jvmciCodeInstaller.cpp Mon Sep 14 16:25:07 2015 +0200 +++ b/src/share/vm/jvmci/jvmciCodeInstaller.cpp Mon Sep 14 17:05:34 2015 +0200 @@ -165,16 +165,16 @@ static void record_metadata_in_constant(oop constant, OopRecorder* oop_recorder) { if (constant->is_a(HotSpotMetaspaceConstantImpl::klass())) { oop obj = HotSpotMetaspaceConstantImpl::metaspaceObject(constant); - jlong prim = HotSpotMetaspaceConstantImpl::primitive(constant); + jlong raw = HotSpotMetaspaceConstantImpl::rawValue(constant); assert(obj != NULL, "must have an object"); - assert(prim != 0, "must have a primitive value"); + assert(raw != 0, "must have a raw value"); - record_metadata_reference(obj, prim, false, oop_recorder); + record_metadata_reference(obj, raw, false, oop_recorder); } } static void record_metadata_in_patch(Handle& constant, OopRecorder* oop_recorder) { - record_metadata_reference(HotSpotMetaspaceConstantImpl::metaspaceObject(constant), HotSpotMetaspaceConstantImpl::primitive(constant), HotSpotMetaspaceConstantImpl::compressed(constant), oop_recorder); + record_metadata_reference(HotSpotMetaspaceConstantImpl::metaspaceObject(constant), HotSpotMetaspaceConstantImpl::rawValue(constant), HotSpotMetaspaceConstantImpl::compressed(constant), oop_recorder); } Location::Type CodeInstaller::get_oop_type(oop value) {
--- a/src/share/vm/jvmci/jvmciJavaClasses.hpp Mon Sep 14 16:25:07 2015 +0200 +++ b/src/share/vm/jvmci/jvmciJavaClasses.hpp Mon Sep 14 17:05:34 2015 +0200 @@ -210,8 +210,8 @@ boolean_field(HotSpotObjectConstantImpl, compressed) \ end_class \ start_class(HotSpotMetaspaceConstantImpl) \ - long_field(HotSpotMetaspaceConstantImpl, primitive) \ oop_field(HotSpotMetaspaceConstantImpl, metaspaceObject, "Ljava/lang/Object;") \ + long_field(HotSpotMetaspaceConstantImpl, rawValue) \ boolean_field(HotSpotMetaspaceConstantImpl, compressed) \ end_class \ start_class(JavaKind) \