changeset 16353:7c47610015a9

Support direct memory compare of uncompressed metadata references if they fit in 32 bit.
author Roland Schatz <roland.schatz@oracle.com>
date Wed, 02 Jul 2014 14:56:30 +0200
parents 00460aab5c96
children b6e70c59b32d
files graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCompare.java
diffstat 1 files changed, 5 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCompare.java	Tue Jul 01 19:06:06 2014 +0200
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCompare.java	Wed Jul 02 14:56:30 2014 +0200
@@ -26,6 +26,7 @@
 import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*;
 
 import com.oracle.graal.api.meta.*;
+import com.oracle.graal.asm.*;
 import com.oracle.graal.asm.amd64.*;
 import com.oracle.graal.compiler.common.*;
 import com.oracle.graal.hotspot.data.*;
@@ -109,8 +110,11 @@
                     // compressed metaspace pointer
                     crb.recordInlineDataInCode(new MetaspaceData(0, y.asInt(), HotSpotMetaspaceConstant.getMetaspaceObject(y), true));
                     masm.cmpl(address.toAddress(), y.asInt());
+                } else if (y.getKind() == Kind.Long && NumUtil.is32bit(y.asLong())) {
+                    // uncompressed metaspace pointer
+                    crb.recordInlineDataInCode(new MetaspaceData(0, y.asLong(), HotSpotMetaspaceConstant.getMetaspaceObject(y), false));
+                    masm.cmpq(address.toAddress(), (int) y.asLong());
                 } else {
-                    // uncompressed metaspace pointer
                     throw GraalInternalError.shouldNotReachHere();
                 }
             } else {