Search in sources :

Example 1 with ReferenceArrayStoreQuickNode

use of com.oracle.truffle.espresso.nodes.quick.interop.ReferenceArrayStoreQuickNode in project graal by oracle.

the class BytecodeNode method quickenArrayStore.

private int quickenArrayStore(final VirtualFrame frame, int top, int curBCI, int storeOpcode) {
    CompilerDirectives.transferToInterpreterAndInvalidate();
    assert IASTORE <= storeOpcode && storeOpcode <= SASTORE;
    BaseQuickNode arrayStoreNode;
    synchronized (this) {
        if (bs.currentVolatileBC(curBCI) == SLIM_QUICK) {
            arrayStoreNode = sparseNodes[curBCI];
        } else {
            // @formatter:off
            switch(storeOpcode) {
                case BASTORE:
                    arrayStoreNode = new ByteArrayStoreQuickNode(top, curBCI);
                    break;
                case SASTORE:
                    arrayStoreNode = new ShortArrayStoreQuickNode(top, curBCI);
                    break;
                case CASTORE:
                    arrayStoreNode = new CharArrayStoreQuickNode(top, curBCI);
                    break;
                case IASTORE:
                    arrayStoreNode = new IntArrayStoreQuickNode(top, curBCI);
                    break;
                case FASTORE:
                    arrayStoreNode = new FloatArrayStoreQuickNode(top, curBCI);
                    break;
                case LASTORE:
                    arrayStoreNode = new LongArrayStoreQuickNode(top, curBCI);
                    break;
                case DASTORE:
                    arrayStoreNode = new DoubleArrayStoreQuickNode(top, curBCI);
                    break;
                case AASTORE:
                    arrayStoreNode = new ReferenceArrayStoreQuickNode(top, curBCI);
                    break;
                default:
                    CompilerDirectives.transferToInterpreter();
                    throw EspressoError.shouldNotReachHere("unexpected kind");
            }
            // @formatter:on
            arrayStoreNode = injectQuick(curBCI, arrayStoreNode, SLIM_QUICK);
        }
    }
    return arrayStoreNode.execute(frame) - Bytecodes.stackEffectOf(storeOpcode);
}
Also used : LongArrayStoreQuickNode(com.oracle.truffle.espresso.nodes.quick.interop.LongArrayStoreQuickNode) ReferenceArrayStoreQuickNode(com.oracle.truffle.espresso.nodes.quick.interop.ReferenceArrayStoreQuickNode) FloatArrayStoreQuickNode(com.oracle.truffle.espresso.nodes.quick.interop.FloatArrayStoreQuickNode) CharArrayStoreQuickNode(com.oracle.truffle.espresso.nodes.quick.interop.CharArrayStoreQuickNode) ByteArrayStoreQuickNode(com.oracle.truffle.espresso.nodes.quick.interop.ByteArrayStoreQuickNode) IntArrayStoreQuickNode(com.oracle.truffle.espresso.nodes.quick.interop.IntArrayStoreQuickNode) DoubleArrayStoreQuickNode(com.oracle.truffle.espresso.nodes.quick.interop.DoubleArrayStoreQuickNode) BaseQuickNode(com.oracle.truffle.espresso.nodes.quick.BaseQuickNode) ShortArrayStoreQuickNode(com.oracle.truffle.espresso.nodes.quick.interop.ShortArrayStoreQuickNode)

Aggregations

BaseQuickNode (com.oracle.truffle.espresso.nodes.quick.BaseQuickNode)1 ByteArrayStoreQuickNode (com.oracle.truffle.espresso.nodes.quick.interop.ByteArrayStoreQuickNode)1 CharArrayStoreQuickNode (com.oracle.truffle.espresso.nodes.quick.interop.CharArrayStoreQuickNode)1 DoubleArrayStoreQuickNode (com.oracle.truffle.espresso.nodes.quick.interop.DoubleArrayStoreQuickNode)1 FloatArrayStoreQuickNode (com.oracle.truffle.espresso.nodes.quick.interop.FloatArrayStoreQuickNode)1 IntArrayStoreQuickNode (com.oracle.truffle.espresso.nodes.quick.interop.IntArrayStoreQuickNode)1 LongArrayStoreQuickNode (com.oracle.truffle.espresso.nodes.quick.interop.LongArrayStoreQuickNode)1 ReferenceArrayStoreQuickNode (com.oracle.truffle.espresso.nodes.quick.interop.ReferenceArrayStoreQuickNode)1 ShortArrayStoreQuickNode (com.oracle.truffle.espresso.nodes.quick.interop.ShortArrayStoreQuickNode)1