-
-
Notifications
You must be signed in to change notification settings - Fork 925
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2571 from jruby/truffle-arrays
Truffle arrays
- 9.4.12.0
- 9.4.11.0
- 9.4.10.0
- 9.4.9.0
- 9.4.8.0
- 9.4.7.0
- 9.4.6.0
- 9.4.5.0
- 9.4.4.0
- 9.4.3.0
- 9.4.2.0
- 9.4.1.0
- 9.4.0.0
- 9.3.15.0
- 9.3.14.0
- 9.3.13.0
- 9.3.12.0
- 9.3.11.0
- 9.3.10.0
- 9.3.9.0
- 9.3.8.0
- 9.3.7.0
- 9.3.6.0
- 9.3.5.0
- 9.3.4.0
- 9.3.3.0
- 9.3.2.0
- 9.3.1.0
- 9.3.0.0
- 9.2.21.0
- 9.2.20.1
- 9.2.20.0
- 9.2.19.0
- 9.2.18.0
- 9.2.17.0
- 9.2.16.0
- 9.2.15.0
- 9.2.14.0
- 9.2.13.0
- 9.2.12.0
- 9.2.11.1
- 9.2.11.0
- 9.2.10.0
- 9.2.9.0
- 9.2.8.0
- 9.2.7.0
- 9.2.6.0
- 9.2.5.0
- 9.2.4.1
- 9.2.4.0
- 9.2.3.0
- 9.2.2.0
- 9.2.1.0
- 9.2.0.0
- 9.1.17.0
- 9.1.16.0
- 9.1.15.0
- 9.1.14.0
- 9.1.13.0
- 9.1.12.0
- 9.1.11.0
- 9.1.10.0
- 9.1.9.0
- 9.1.8.0
- 9.1.7.0
- 9.1.6.0
- 9.1.5.0
- 9.1.4.0
- 9.1.3.0
- 9.1.2.0
- 9.1.1.0
- 9.1.0.0
- 9.0.5.0
- 9.0.4.0
- 9.0.3.0
- 9.0.1.0
- 9.0.0.0
- 9.0.0.0.rc2
- 9.0.0.0.rc1
- 9.0.0.0.pre2
Showing
9 changed files
with
276 additions
and
218 deletions.
There are no files selected for viewing
53 changes: 53 additions & 0 deletions
53
truffle/src/main/java/org/jruby/truffle/nodes/array/ArrayReadDenormalizedNode.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
/* | ||
* Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved. This | ||
* code is released under a tri EPL/GPL/LGPL license. You can use it, | ||
* redistribute it and/or modify it under the terms of the: | ||
* | ||
* Eclipse Public License version 1.0 | ||
* GNU General Public License version 2 | ||
* GNU Lesser General Public License version 2.1 | ||
*/ | ||
package org.jruby.truffle.nodes.array; | ||
|
||
import com.oracle.truffle.api.CompilerDirectives; | ||
import com.oracle.truffle.api.dsl.NodeChild; | ||
import com.oracle.truffle.api.dsl.NodeChildren; | ||
import com.oracle.truffle.api.dsl.Specialization; | ||
import com.oracle.truffle.api.frame.VirtualFrame; | ||
import com.oracle.truffle.api.source.SourceSection; | ||
import org.jruby.truffle.nodes.RubyNode; | ||
import org.jruby.truffle.runtime.RubyContext; | ||
import org.jruby.truffle.runtime.core.RubyArray; | ||
|
||
@NodeChildren({ | ||
@NodeChild(value="array", type=RubyNode.class), | ||
@NodeChild(value="index", type=RubyNode.class) | ||
}) | ||
public abstract class ArrayReadDenormalizedNode extends RubyNode { | ||
|
||
@Child private ArrayReadNormalizedNode readNode; | ||
|
||
public ArrayReadDenormalizedNode(RubyContext context, SourceSection sourceSection) { | ||
super(context, sourceSection); | ||
} | ||
|
||
public ArrayReadDenormalizedNode(ArrayReadDenormalizedNode prev) { | ||
super(prev); | ||
readNode = prev.readNode; | ||
} | ||
|
||
public abstract Object executeRead(VirtualFrame frame, RubyArray array, int index); | ||
|
||
@Specialization | ||
public Object read(VirtualFrame frame, RubyArray array, int index) { | ||
if (readNode == null) { | ||
CompilerDirectives.transferToInterpreter(); | ||
readNode = insert(ArrayReadNormalizedNodeFactory.create(getContext(), getSourceSection(), null, null)); | ||
} | ||
|
||
final int normalizedIndex = array.normaliseIndex(index); | ||
|
||
return readNode.executeRead(frame, array, normalizedIndex); | ||
} | ||
|
||
} |
84 changes: 84 additions & 0 deletions
84
truffle/src/main/java/org/jruby/truffle/nodes/array/ArrayReadNormalizedNode.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
/* | ||
* Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved. This | ||
* code is released under a tri EPL/GPL/LGPL license. You can use it, | ||
* redistribute it and/or modify it under the terms of the: | ||
* | ||
* Eclipse Public License version 1.0 | ||
* GNU General Public License version 2 | ||
* GNU Lesser General Public License version 2.1 | ||
*/ | ||
package org.jruby.truffle.nodes.array; | ||
|
||
import com.oracle.truffle.api.dsl.ImportGuards; | ||
import com.oracle.truffle.api.dsl.NodeChild; | ||
import com.oracle.truffle.api.dsl.NodeChildren; | ||
import com.oracle.truffle.api.dsl.Specialization; | ||
import com.oracle.truffle.api.frame.VirtualFrame; | ||
import com.oracle.truffle.api.nodes.UnexpectedResultException; | ||
import com.oracle.truffle.api.source.SourceSection; | ||
import org.jruby.truffle.nodes.RubyNode; | ||
import org.jruby.truffle.nodes.core.ArrayGuards; | ||
import org.jruby.truffle.runtime.RubyContext; | ||
import org.jruby.truffle.runtime.core.RubyArray; | ||
import org.jruby.truffle.runtime.core.RubyNilClass; | ||
|
||
@NodeChildren({ | ||
@NodeChild(value="array", type=RubyNode.class), | ||
@NodeChild(value="index", type=RubyNode.class) | ||
}) | ||
@ImportGuards(ArrayGuards.class) | ||
public abstract class ArrayReadNormalizedNode extends RubyNode { | ||
|
||
public ArrayReadNormalizedNode(RubyContext context, SourceSection sourceSection) { | ||
super(context, sourceSection); | ||
} | ||
|
||
public ArrayReadNormalizedNode(ArrayReadNormalizedNode prev) { | ||
super(prev); | ||
} | ||
|
||
public abstract Object executeRead(VirtualFrame frame, RubyArray array, int index); | ||
|
||
@Specialization( | ||
guards="isNullArray" | ||
) | ||
public RubyNilClass readNull(RubyArray array, int index) { | ||
return getContext().getCoreLibrary().getNilObject(); | ||
} | ||
|
||
@Specialization( | ||
guards={"isNormalisedInBounds", "isIntegerArray"} | ||
) | ||
public int readIntegerInBounds(RubyArray array, int index) { | ||
return ((int[]) array.getStore())[index]; | ||
} | ||
|
||
@Specialization( | ||
guards={"isNormalisedInBounds", "isLongArray"} | ||
) | ||
public long readLongInBounds(RubyArray array, int index) { | ||
return ((long[]) array.getStore())[index]; | ||
} | ||
|
||
@Specialization( | ||
guards={"isNormalisedInBounds", "isDoubleArray"} | ||
) | ||
public double readDoubleInBounds(RubyArray array, int index) { | ||
return ((double[]) array.getStore())[index]; | ||
} | ||
|
||
@Specialization( | ||
guards={"isNormalisedInBounds", "isObjectArray"} | ||
) | ||
public Object readObjectInBounds(RubyArray array, int index) { | ||
return ((Object[]) array.getStore())[index]; | ||
} | ||
|
||
@Specialization( | ||
guards="!isNormalisedInBounds" | ||
) | ||
public RubyNilClass readOutOfBounds(RubyArray array, int index) { | ||
return getContext().getCoreLibrary().getNilObject(); | ||
} | ||
|
||
} |
55 changes: 55 additions & 0 deletions
55
truffle/src/main/java/org/jruby/truffle/nodes/array/NewFixnumLowerNode.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
/* | ||
* Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved. This | ||
* code is released under a tri EPL/GPL/LGPL license. You can use it, | ||
* redistribute it and/or modify it under the terms of the: | ||
* | ||
* Eclipse Public License version 1.0 | ||
* GNU General Public License version 2 | ||
* GNU Lesser General Public License version 2.1 | ||
*/ | ||
package org.jruby.truffle.nodes.array; | ||
|
||
import com.oracle.truffle.api.dsl.NodeChild; | ||
import com.oracle.truffle.api.dsl.Specialization; | ||
import com.oracle.truffle.api.source.SourceSection; | ||
import org.jruby.truffle.nodes.RubyNode; | ||
import org.jruby.truffle.runtime.RubyContext; | ||
import org.jruby.truffle.runtime.core.CoreLibrary; | ||
|
||
/** | ||
* Passes through {@code int} values unmodified, but will convert a {@code long} value to an {@code int}, if it fits | ||
* within the range of an {@code int}. Leaves all other values unmodified. Used where a specialisation only accepts | ||
* {@code int}, such as Java array indexing, but we would like to also handle {@code long} if they also fit within an | ||
* {@code int}. | ||
*/ | ||
@NodeChild(value="child", type=RubyNode.class) | ||
public abstract class NewFixnumLowerNode extends RubyNode { | ||
|
||
public NewFixnumLowerNode(RubyContext context, SourceSection sourceSection) { | ||
super(context, sourceSection); | ||
} | ||
|
||
public NewFixnumLowerNode(NewFixnumLowerNode prev) { | ||
super(prev); | ||
} | ||
|
||
@Specialization | ||
public int lower(int value) { | ||
return value; | ||
} | ||
|
||
@Specialization(guards="canLower") | ||
public int lower(long value) { | ||
return (int) value; | ||
} | ||
|
||
@Specialization(guards="!canLower") | ||
public long lowerFails(long value) { | ||
return value; | ||
} | ||
|
||
protected static boolean canLower(long value) { | ||
return CoreLibrary.fitsIntoInteger(value); | ||
} | ||
|
||
} |
32 changes: 32 additions & 0 deletions
32
truffle/src/main/java/org/jruby/truffle/nodes/array/PrimitiveArrayNodeFactory.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/* | ||
* Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved. This | ||
* code is released under a tri EPL/GPL/LGPL license. You can use it, | ||
* redistribute it and/or modify it under the terms of the: | ||
* | ||
* Eclipse Public License version 1.0 | ||
* GNU General Public License version 2 | ||
* GNU Lesser General Public License version 2.1 | ||
*/ | ||
package org.jruby.truffle.nodes.array; | ||
|
||
import com.oracle.truffle.api.source.SourceSection; | ||
import org.jruby.truffle.nodes.RubyNode; | ||
import org.jruby.truffle.nodes.literal.FixnumLiteralNode; | ||
import org.jruby.truffle.runtime.RubyContext; | ||
|
||
public abstract class PrimitiveArrayNodeFactory { | ||
|
||
/** | ||
* Create a node to read from an array with a constant denormalised index. | ||
*/ | ||
public static RubyNode read(RubyContext context, SourceSection sourceSection, RubyNode array, int index) { | ||
final RubyNode literalIndex = new FixnumLiteralNode.IntegerFixnumLiteralNode(context, sourceSection, index); | ||
|
||
if (index > 0) { | ||
return ArrayReadNormalizedNodeFactory.create(context, sourceSection, array, literalIndex); | ||
} else { | ||
return ArrayReadDenormalizedNodeFactory.create(context, sourceSection, array, literalIndex); | ||
} | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
125 changes: 0 additions & 125 deletions
125
truffle/src/main/java/org/jruby/truffle/nodes/core/ArrayIndexNode.java
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters