Mercurial > hg > graal-compiler
diff graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java @ 15909:e43591136d9f
Support for compressed constants.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Mon, 26 May 2014 16:09:53 +0200 |
parents | db4254246f9a |
children | c0b8d395368b |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java Fri May 23 17:21:37 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java Mon May 26 16:09:53 2014 +0200 @@ -23,12 +23,13 @@ package com.oracle.graal.hotspot.meta; import com.oracle.graal.api.meta.*; +import com.oracle.graal.hotspot.nodes.type.*; /** * Represents a constant non-{@code null} object reference, within the compiler and across the * compiler/runtime interface. */ -public final class HotSpotObjectConstant extends Constant { +public final class HotSpotObjectConstant extends Constant implements HotSpotConstant { private static final long serialVersionUID = 3592151693708093496L; @@ -36,7 +37,7 @@ if (object == null) { return Constant.NULL_OBJECT; } else { - return new HotSpotObjectConstant(object); + return new HotSpotObjectConstant(object, false); } } @@ -59,21 +60,41 @@ public static Object asBoxedValue(Constant constant) { if (constant.isNull()) { return null; - } else if (constant.getKind() == Kind.Object) { + } else if (constant instanceof HotSpotObjectConstant) { return ((HotSpotObjectConstant) constant).object; } else { return constant.asBoxedPrimitive(); } } + public static boolean isCompressed(Constant constant) { + if (constant.isNull()) { + return HotSpotCompressedNullConstant.NULL_OBJECT.equals(constant); + } else { + return ((HotSpotObjectConstant) constant).compressed; + } + } + private final Object object; + private final boolean compressed; - private HotSpotObjectConstant(Object object) { - super(Kind.Object); + private HotSpotObjectConstant(Object object, boolean compressed) { + super(compressed ? NarrowOopStamp.NarrowOop : Kind.Object); this.object = object; + this.compressed = compressed; assert object != null; } + public Constant compress() { + assert !compressed; + return new HotSpotObjectConstant(object, true); + } + + public Constant uncompress() { + assert compressed; + return new HotSpotObjectConstant(object, false); + } + @Override public boolean isNull() { return false; @@ -135,6 +156,6 @@ @Override public String toString() { - return getKind().getJavaName() + "[" + Kind.Object.format(object) + "]"; + return (compressed ? "NarrowOop" : getKind().getJavaName()) + "[" + Kind.Object.format(object) + "]"; } }