src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements.amd64/src/org/graalvm/compiler/replacements/amd64/AMD64ArrayIndexOfDispatchNode.java
author chegar
Thu, 17 Oct 2019 20:54:25 +0100
branchdatagramsocketimpl-branch
changeset 58679 9c3209ff7550
parent 58678 9cf78a70fa4f
parent 57537 ecc6e394475f
permissions -rw-r--r--
datagramsocketimpl-branch: merge with default
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
55509
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
     1
/*
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
     2
 * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
     4
 *
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
     7
 * published by the Free Software Foundation.
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
     8
 *
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    13
 * accompanied this code).
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    14
 *
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    18
 *
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    21
 * questions.
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    22
 */
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    23
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    24
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    25
package org.graalvm.compiler.replacements.amd64;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    26
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    27
import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_512;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    28
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    29
import org.graalvm.compiler.core.common.spi.ForeignCallDescriptor;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    30
import org.graalvm.compiler.core.common.type.StampFactory;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    31
import org.graalvm.compiler.graph.NodeClass;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    32
import org.graalvm.compiler.graph.NodeInputList;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    33
import org.graalvm.compiler.nodeinfo.InputType;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    34
import org.graalvm.compiler.nodeinfo.NodeCycles;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    35
import org.graalvm.compiler.nodeinfo.NodeInfo;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    36
import org.graalvm.compiler.nodes.DeoptimizingNode;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    37
import org.graalvm.compiler.nodes.FixedWithNextNode;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    38
import org.graalvm.compiler.nodes.FrameState;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    39
import org.graalvm.compiler.nodes.NamedLocationIdentity;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    40
import org.graalvm.compiler.nodes.ValueNode;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    41
import org.graalvm.compiler.nodes.ValueNodeUtil;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    42
import org.graalvm.compiler.nodes.memory.MemoryAccess;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    43
import org.graalvm.compiler.nodes.memory.MemoryNode;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    44
import org.graalvm.compiler.nodes.spi.Lowerable;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    45
import org.graalvm.compiler.nodes.spi.LoweringTool;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    46
import jdk.internal.vm.compiler.word.LocationIdentity;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    47
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    48
import jdk.vm.ci.meta.JavaKind;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    49
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    50
/**
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    51
 * This node is a placeholder for all variants of intrinsified indexof-operations. It may be lowered
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    52
 * to a {@link AMD64ArrayIndexOfNode} or a specialized snippet.
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    53
 */
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    54
@NodeInfo(size = SIZE_512, cycles = NodeCycles.CYCLES_UNKNOWN)
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    55
public class AMD64ArrayIndexOfDispatchNode extends FixedWithNextNode implements Lowerable, MemoryAccess, DeoptimizingNode.DeoptBefore {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    56
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    57
    public static final NodeClass<AMD64ArrayIndexOfDispatchNode> TYPE = NodeClass.create(AMD64ArrayIndexOfDispatchNode.class);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    58
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    59
    private final ForeignCallDescriptor stubCallDescriptor;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    60
    private final JavaKind arrayKind;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    61
    private final JavaKind valueKind;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    62
    private final boolean findTwoConsecutive;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    63
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    64
    @Input private ValueNode arrayPointer;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    65
    @Input private ValueNode arrayLength;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    66
    @Input private ValueNode fromIndex;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    67
    @Input private NodeInputList<ValueNode> searchValues;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    68
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    69
    @OptionalInput(InputType.Memory) private MemoryNode lastLocationAccess;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    70
    @OptionalInput(InputType.State) protected FrameState stateBefore;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    71
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    72
    public AMD64ArrayIndexOfDispatchNode(@ConstantNodeParameter ForeignCallDescriptor stubCallDescriptor, @ConstantNodeParameter JavaKind arrayKind, @ConstantNodeParameter JavaKind valueKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    73
                    @ConstantNodeParameter boolean findTwoConsecutive, ValueNode arrayPointer, ValueNode arrayLength, ValueNode fromIndex, ValueNode... searchValues) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    74
        super(TYPE, StampFactory.forKind(JavaKind.Int));
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    75
        this.stubCallDescriptor = stubCallDescriptor;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    76
        this.arrayKind = arrayKind;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    77
        this.valueKind = valueKind;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    78
        this.findTwoConsecutive = findTwoConsecutive;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    79
        this.arrayPointer = arrayPointer;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    80
        this.arrayLength = arrayLength;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    81
        this.fromIndex = fromIndex;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    82
        this.searchValues = new NodeInputList<>(this, searchValues);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    83
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    84
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    85
    public boolean isFindTwoConsecutive() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    86
        return findTwoConsecutive;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    87
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    88
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    89
    public ValueNode getArrayPointer() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    90
        return arrayPointer;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    91
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    92
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    93
    public ValueNode getArrayLength() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    94
        return arrayLength;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    95
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    96
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    97
    public ValueNode getFromIndex() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    98
        return fromIndex;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
    99
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   100
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   101
    public NodeInputList<ValueNode> getSearchValues() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   102
        return searchValues;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   103
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   104
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   105
    @Override
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   106
    public boolean canDeoptimize() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   107
        return true;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   108
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   109
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   110
    @Override
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   111
    public void setStateBefore(FrameState f) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   112
        updateUsages(stateBefore, f);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   113
        stateBefore = f;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   114
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   115
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   116
    @Override
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   117
    public FrameState stateBefore() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   118
        return stateBefore;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   119
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   120
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   121
    public ForeignCallDescriptor getStubCallDescriptor() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   122
        return stubCallDescriptor;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   123
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   124
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   125
    public int getNumberOfValues() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   126
        return searchValues.size();
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   127
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   128
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   129
    public JavaKind getArrayKind() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   130
        return arrayKind;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   131
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   132
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   133
    public JavaKind getValueKind() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   134
        return valueKind;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   135
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   136
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   137
    public JavaKind getComparisonKind() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   138
        return findTwoConsecutive ? (valueKind == JavaKind.Byte ? JavaKind.Char : JavaKind.Int) : valueKind;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   139
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   140
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   141
    public ValueNode[] getStubCallArgs() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   142
        ValueNode[] ret = new ValueNode[searchValues.size() + 3];
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   143
        ret[0] = arrayPointer;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   144
        ret[1] = arrayLength;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   145
        ret[2] = fromIndex;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   146
        for (int i = 0; i < searchValues.size(); i++) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   147
            ret[3 + i] = searchValues.get(i);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   148
        }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   149
        return ret;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   150
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   151
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   152
    public AMD64ArrayIndexOfDispatchNode(@ConstantNodeParameter ForeignCallDescriptor stubCallDescriptor, @ConstantNodeParameter JavaKind arrayKind, @ConstantNodeParameter JavaKind valueKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   153
                    ValueNode arrayPointer, ValueNode arrayLength, ValueNode fromIndex, ValueNode... searchValues) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   154
        this(stubCallDescriptor, arrayKind, valueKind, false, arrayPointer, arrayLength, fromIndex, searchValues);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   155
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   156
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   157
    @Override
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   158
    public LocationIdentity getLocationIdentity() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   159
        return NamedLocationIdentity.getArrayLocation(arrayKind);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   160
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   161
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   162
    @Override
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   163
    public void lower(LoweringTool tool) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   164
        tool.getLowerer().lower(this, tool);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   165
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   166
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   167
    @Override
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   168
    public MemoryNode getLastLocationAccess() {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   169
        return lastLocationAccess;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   170
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   171
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   172
    @Override
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   173
    public void setLastLocationAccess(MemoryNode lla) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   174
        updateUsages(ValueNodeUtil.asNode(lastLocationAccess), ValueNodeUtil.asNode(lla));
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   175
        lastLocationAccess = lla;
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   176
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   177
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   178
    @NodeIntrinsic
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   179
    private static native int optimizedArrayIndexOf(
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   180
                    @ConstantNodeParameter ForeignCallDescriptor descriptor,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   181
                    @ConstantNodeParameter JavaKind arrayKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   182
                    @ConstantNodeParameter JavaKind valueKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   183
                    @ConstantNodeParameter boolean findTwoConsecutive,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   184
                    Object array, int arrayLength, int fromIndex, byte v1);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   185
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   186
    @NodeIntrinsic
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   187
    private static native int optimizedArrayIndexOf(
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   188
                    @ConstantNodeParameter ForeignCallDescriptor descriptor,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   189
                    @ConstantNodeParameter JavaKind arrayKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   190
                    @ConstantNodeParameter JavaKind valueKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   191
                    @ConstantNodeParameter boolean findTwoConsecutive,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   192
                    Object array, int arrayLength, int fromIndex, byte v1, byte v2);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   193
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   194
    @NodeIntrinsic
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   195
    private static native int optimizedArrayIndexOf(
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   196
                    @ConstantNodeParameter ForeignCallDescriptor descriptor,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   197
                    @ConstantNodeParameter JavaKind arrayKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   198
                    @ConstantNodeParameter JavaKind valueKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   199
                    @ConstantNodeParameter boolean findTwoConsecutive,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   200
                    Object array, int arrayLength, int fromIndex, byte v1, byte v2, byte v3);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   201
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   202
    @NodeIntrinsic
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   203
    private static native int optimizedArrayIndexOf(
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   204
                    @ConstantNodeParameter ForeignCallDescriptor descriptor,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   205
                    @ConstantNodeParameter JavaKind arrayKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   206
                    @ConstantNodeParameter JavaKind valueKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   207
                    @ConstantNodeParameter boolean findTwoConsecutive,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   208
                    Object array, int arrayLength, int fromIndex, byte v1, byte v2, byte v3, byte v4);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   209
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   210
    @NodeIntrinsic
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   211
    private static native int optimizedArrayIndexOf(
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   212
                    @ConstantNodeParameter ForeignCallDescriptor descriptor,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   213
                    @ConstantNodeParameter JavaKind arrayKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   214
                    @ConstantNodeParameter JavaKind valueKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   215
                    @ConstantNodeParameter boolean findTwoConsecutive,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   216
                    Object array, int arrayLength, int fromIndex, char v1);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   217
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   218
    @NodeIntrinsic
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   219
    private static native int optimizedArrayIndexOf(
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   220
                    @ConstantNodeParameter ForeignCallDescriptor descriptor,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   221
                    @ConstantNodeParameter JavaKind arrayKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   222
                    @ConstantNodeParameter JavaKind valueKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   223
                    @ConstantNodeParameter boolean findTwoConsecutive,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   224
                    Object array, int arrayLength, int fromIndex, char v1, char v2);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   225
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   226
    @NodeIntrinsic
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   227
    private static native int optimizedArrayIndexOf(
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   228
                    @ConstantNodeParameter ForeignCallDescriptor descriptor,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   229
                    @ConstantNodeParameter JavaKind arrayKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   230
                    @ConstantNodeParameter JavaKind valueKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   231
                    @ConstantNodeParameter boolean findTwoConsecutive,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   232
                    Object array, int arrayLength, int fromIndex, char v1, char v2, char v3);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   233
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   234
    @NodeIntrinsic
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   235
    private static native int optimizedArrayIndexOf(
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   236
                    @ConstantNodeParameter ForeignCallDescriptor descriptor,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   237
                    @ConstantNodeParameter JavaKind arrayKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   238
                    @ConstantNodeParameter JavaKind valueKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   239
                    @ConstantNodeParameter boolean findTwoConsecutive,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   240
                    Object array, int arrayLength, int fromIndex, char v1, char v2, char v3, char v4);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   241
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   242
    @NodeIntrinsic
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   243
    private static native int optimizedArrayIndexOf(
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   244
                    @ConstantNodeParameter ForeignCallDescriptor descriptor,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   245
                    @ConstantNodeParameter JavaKind arrayKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   246
                    @ConstantNodeParameter JavaKind valueKind,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   247
                    @ConstantNodeParameter boolean findTwoConsecutive,
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   248
                    Object array, int arrayLength, int fromIndex, int searchValue);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   249
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   250
    public static int indexOf(@ConstantNodeParameter ForeignCallDescriptor descriptor, byte[] array, int arrayLength, int fromIndex, byte v1) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   251
        return optimizedArrayIndexOf(descriptor, JavaKind.Byte, JavaKind.Byte, false, array, arrayLength, fromIndex, v1);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   252
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   253
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   254
    public static int indexOf(@ConstantNodeParameter ForeignCallDescriptor descriptor, byte[] array, int arrayLength, int fromIndex, byte v1, byte v2) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   255
        return optimizedArrayIndexOf(descriptor, JavaKind.Byte, JavaKind.Byte, false, array, arrayLength, fromIndex, v1, v2);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   256
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   257
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   258
    public static int indexOf(@ConstantNodeParameter ForeignCallDescriptor descriptor, byte[] array, int arrayLength, int fromIndex, byte v1, byte v2, byte v3) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   259
        return optimizedArrayIndexOf(descriptor, JavaKind.Byte, JavaKind.Byte, false, array, arrayLength, fromIndex, v1, v2, v3);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   260
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   261
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   262
    public static int indexOf(@ConstantNodeParameter ForeignCallDescriptor descriptor, byte[] array, int arrayLength, int fromIndex, byte v1, byte v2, byte v3, byte v4) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   263
        return optimizedArrayIndexOf(descriptor, JavaKind.Byte, JavaKind.Byte, false, array, arrayLength, fromIndex, v1, v2, v3, v4);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   264
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   265
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   266
    public static int indexOf(@ConstantNodeParameter ForeignCallDescriptor descriptor, byte[] array, int arrayLength, int fromIndex, char v1) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   267
        return optimizedArrayIndexOf(descriptor, JavaKind.Byte, JavaKind.Char, false, array, arrayLength, fromIndex, v1);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   268
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   269
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   270
    public static int indexOf(@ConstantNodeParameter ForeignCallDescriptor descriptor, byte[] array, int arrayLength, int fromIndex, char v1, char v2) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   271
        return optimizedArrayIndexOf(descriptor, JavaKind.Byte, JavaKind.Char, false, array, arrayLength, fromIndex, v1, v2);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   272
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   273
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   274
    public static int indexOf(@ConstantNodeParameter ForeignCallDescriptor descriptor, byte[] array, int arrayLength, int fromIndex, char v1, char v2, char v3) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   275
        return optimizedArrayIndexOf(descriptor, JavaKind.Byte, JavaKind.Char, false, array, arrayLength, fromIndex, v1, v2, v3);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   276
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   277
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   278
    public static int indexOf(@ConstantNodeParameter ForeignCallDescriptor descriptor, byte[] array, int arrayLength, int fromIndex, char v1, char v2, char v3, char v4) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   279
        return optimizedArrayIndexOf(descriptor, JavaKind.Byte, JavaKind.Char, false, array, arrayLength, fromIndex, v1, v2, v3, v4);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   280
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   281
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   282
    public static int indexOf(@ConstantNodeParameter ForeignCallDescriptor descriptor, char[] array, int arrayLength, int fromIndex, char v1) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   283
        return optimizedArrayIndexOf(descriptor, JavaKind.Char, JavaKind.Char, false, array, arrayLength, fromIndex, v1);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   284
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   285
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   286
    public static int indexOf(@ConstantNodeParameter ForeignCallDescriptor descriptor, char[] array, int arrayLength, int fromIndex, char v1, char v2) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   287
        return optimizedArrayIndexOf(descriptor, JavaKind.Char, JavaKind.Char, false, array, arrayLength, fromIndex, v1, v2);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   288
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   289
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   290
    public static int indexOf(@ConstantNodeParameter ForeignCallDescriptor descriptor, char[] array, int arrayLength, int fromIndex, char v1, char v2, char v3) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   291
        return optimizedArrayIndexOf(descriptor, JavaKind.Char, JavaKind.Char, false, array, arrayLength, fromIndex, v1, v2, v3);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   292
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   293
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   294
    public static int indexOf(@ConstantNodeParameter ForeignCallDescriptor descriptor, char[] array, int arrayLength, int fromIndex, char v1, char v2, char v3, char v4) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   295
        return optimizedArrayIndexOf(descriptor, JavaKind.Char, JavaKind.Char, false, array, arrayLength, fromIndex, v1, v2, v3, v4);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   296
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   297
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   298
    public static int indexOf2ConsecutiveBytes(@ConstantNodeParameter ForeignCallDescriptor descriptor, byte[] array, int arrayLength, int fromIndex, int values) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   299
        return optimizedArrayIndexOf(descriptor, JavaKind.Byte, JavaKind.Byte, true, array, arrayLength, fromIndex, values);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   300
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   301
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   302
    public static int indexOf2ConsecutiveChars(@ConstantNodeParameter ForeignCallDescriptor descriptor, byte[] array, int arrayLength, int fromIndex, int values) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   303
        return optimizedArrayIndexOf(descriptor, JavaKind.Byte, JavaKind.Char, true, array, arrayLength, fromIndex, values);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   304
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   305
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   306
    public static int indexOf2ConsecutiveChars(@ConstantNodeParameter ForeignCallDescriptor descriptor, char[] array, int arrayLength, int fromIndex, int values) {
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   307
        return optimizedArrayIndexOf(descriptor, JavaKind.Char, JavaKind.Char, true, array, arrayLength, fromIndex, values);
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   308
    }
d58442b8abc1 8225497: Update Graal
jwilhelm
parents:
diff changeset
   309
}