# HG changeset patch # User Tom Rodriguez # Date 1401387592 25200 # Node ID 3a4bc0f706253f6ef52b1ee4c9bde87926a17d79 # Parent eff84c561a9516912ee444d188bc1f2c4ffc85ed construct proper LocationNode for LoweredCompareAndSwap diff -r eff84c561a95 -r 3a4bc0f70625 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Thu May 29 16:58:51 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Thu May 29 11:19:52 2014 -0700 @@ -44,17 +44,15 @@ @Input private ValueNode newValue; private final Kind valueKind; - private final int displacement; private final LocationIdentity locationIdentity; - public CompareAndSwapNode(ValueNode object, int displacement, ValueNode offset, ValueNode expected, ValueNode newValue, Kind valueKind, LocationIdentity locationIdentity) { + public CompareAndSwapNode(ValueNode object, ValueNode offset, ValueNode expected, ValueNode newValue, Kind valueKind, LocationIdentity locationIdentity) { super(StampFactory.forKind(Kind.Boolean.getStackKind())); assert expected.stamp().isCompatible(newValue.stamp()); this.object = object; this.offset = offset; this.expected = expected; this.newValue = newValue; - this.displacement = displacement; this.valueKind = valueKind; this.locationIdentity = locationIdentity; } @@ -75,10 +73,6 @@ return newValue; } - public int displacement() { - return displacement; - } - public Kind getValueKind() { return valueKind; } @@ -95,20 +89,20 @@ // specialized on value type until boxing/unboxing is sorted out in intrinsification @NodeIntrinsic - public static boolean compareAndSwap(Object object, @ConstantNodeParameter int displacement, long offset, Object expected, Object newValue, - @SuppressWarnings("unused") @ConstantNodeParameter Kind valueKind, @SuppressWarnings("unused") @ConstantNodeParameter LocationIdentity locationIdentity) { - return unsafe.compareAndSwapObject(object, displacement + offset, expected, newValue); + public static boolean compareAndSwap(Object object, long offset, Object expected, Object newValue, @SuppressWarnings("unused") @ConstantNodeParameter Kind valueKind, + @SuppressWarnings("unused") @ConstantNodeParameter LocationIdentity locationIdentity) { + return unsafe.compareAndSwapObject(object, offset, expected, newValue); } @NodeIntrinsic - public static boolean compareAndSwap(Object object, @ConstantNodeParameter int displacement, long offset, long expected, long newValue, - @SuppressWarnings("unused") @ConstantNodeParameter Kind valueKind, @SuppressWarnings("unused") @ConstantNodeParameter LocationIdentity locationIdentity) { - return unsafe.compareAndSwapLong(object, displacement + offset, expected, newValue); + public static boolean compareAndSwap(Object object, long offset, long expected, long newValue, @SuppressWarnings("unused") @ConstantNodeParameter Kind valueKind, + @SuppressWarnings("unused") @ConstantNodeParameter LocationIdentity locationIdentity) { + return unsafe.compareAndSwapLong(object, offset, expected, newValue); } @NodeIntrinsic - public static boolean compareAndSwap(Object object, @ConstantNodeParameter int displacement, long offset, int expected, int newValue, - @SuppressWarnings("unused") @ConstantNodeParameter Kind valueKind, @SuppressWarnings("unused") @ConstantNodeParameter LocationIdentity locationIdentity) { - return unsafe.compareAndSwapInt(object, displacement + offset, expected, newValue); + public static boolean compareAndSwap(Object object, long offset, int expected, int newValue, @SuppressWarnings("unused") @ConstantNodeParameter Kind valueKind, + @SuppressWarnings("unused") @ConstantNodeParameter LocationIdentity locationIdentity) { + return unsafe.compareAndSwapInt(object, offset, expected, newValue); } } diff -r eff84c561a95 -r 3a4bc0f70625 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java Thu May 29 16:58:51 2014 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java Thu May 29 11:19:52 2014 -0700 @@ -230,7 +230,7 @@ protected void lowerCompareAndSwapNode(CompareAndSwapNode cas) { StructuredGraph graph = cas.graph(); Kind valueKind = cas.getValueKind(); - LocationNode location = IndexedLocationNode.create(cas.getLocationIdentity(), valueKind, cas.displacement(), cas.offset(), graph, 1); + LocationNode location = createLocation(cas.offset(), cas.getLocationIdentity(), valueKind); ValueNode expectedValue = implicitStoreConvert(graph, valueKind, cas.expected()); ValueNode newValue = implicitStoreConvert(graph, valueKind, cas.newValue()); diff -r eff84c561a95 -r 3a4bc0f70625 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/UnsafeSubstitutions.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/UnsafeSubstitutions.java Thu May 29 16:58:51 2014 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/UnsafeSubstitutions.java Thu May 29 11:19:52 2014 -0700 @@ -42,17 +42,17 @@ @MethodSubstitution(isStatic = false) public static boolean compareAndSwapObject(@SuppressWarnings("unused") final Object thisObj, Object o, long offset, Object expected, Object x) { - return CompareAndSwapNode.compareAndSwap(o, 0, offset, expected, x, Kind.Object, LocationIdentity.ANY_LOCATION); + return CompareAndSwapNode.compareAndSwap(o, offset, expected, x, Kind.Object, LocationIdentity.ANY_LOCATION); } @MethodSubstitution(isStatic = false) public static boolean compareAndSwapInt(@SuppressWarnings("unused") final Object thisObj, Object o, long offset, int expected, int x) { - return CompareAndSwapNode.compareAndSwap(o, 0, offset, expected, x, Kind.Int, LocationIdentity.ANY_LOCATION); + return CompareAndSwapNode.compareAndSwap(o, offset, expected, x, Kind.Int, LocationIdentity.ANY_LOCATION); } @MethodSubstitution(isStatic = false) public static boolean compareAndSwapLong(@SuppressWarnings("unused") final Object thisObj, Object o, long offset, long expected, long x) { - return CompareAndSwapNode.compareAndSwap(o, 0, offset, expected, x, Kind.Long, LocationIdentity.ANY_LOCATION); + return CompareAndSwapNode.compareAndSwap(o, offset, expected, x, Kind.Long, LocationIdentity.ANY_LOCATION); } @MethodSubstitution(isStatic = false)