46 import org.graalvm.compiler.hotspot.HotSpotForeignCallLinkageImpl; |
46 import org.graalvm.compiler.hotspot.HotSpotForeignCallLinkageImpl; |
47 import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider; |
47 import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider; |
48 import org.graalvm.compiler.hotspot.meta.HotSpotHostForeignCallsProvider; |
48 import org.graalvm.compiler.hotspot.meta.HotSpotHostForeignCallsProvider; |
49 import org.graalvm.compiler.hotspot.meta.HotSpotProviders; |
49 import org.graalvm.compiler.hotspot.meta.HotSpotProviders; |
50 import org.graalvm.compiler.options.OptionValues; |
50 import org.graalvm.compiler.options.OptionValues; |
|
51 import org.graalvm.compiler.replacements.amd64.AMD64ArrayIndexOf; |
51 import org.graalvm.compiler.word.WordTypes; |
52 import org.graalvm.compiler.word.WordTypes; |
52 |
53 |
53 import jdk.vm.ci.code.CallingConvention; |
54 import jdk.vm.ci.code.CallingConvention; |
54 import jdk.vm.ci.code.CodeCacheProvider; |
55 import jdk.vm.ci.code.CodeCacheProvider; |
55 import jdk.vm.ci.code.RegisterValue; |
56 import jdk.vm.ci.code.RegisterValue; |
106 } |
107 } |
107 if (config.useCRC32CIntrinsics) { |
108 if (config.useCRC32CIntrinsics) { |
108 registerForeignCall(UPDATE_BYTES_CRC32C, config.updateBytesCRC32C, NativeCall, PRESERVES_REGISTERS, LEAF_NOFP, REEXECUTABLE_ONLY_AFTER_EXCEPTION, any()); |
109 registerForeignCall(UPDATE_BYTES_CRC32C, config.updateBytesCRC32C, NativeCall, PRESERVES_REGISTERS, LEAF_NOFP, REEXECUTABLE_ONLY_AFTER_EXCEPTION, any()); |
109 } |
110 } |
110 |
111 |
|
112 link(new AMD64ArrayIndexOfStub(AMD64ArrayIndexOf.STUB_INDEX_OF_TWO_CONSECUTIVE_BYTES, options, providers, |
|
113 registerStubCall(AMD64ArrayIndexOf.STUB_INDEX_OF_TWO_CONSECUTIVE_BYTES, LEAF, REEXECUTABLE, NO_LOCATIONS))); |
|
114 link(new AMD64ArrayIndexOfStub(AMD64ArrayIndexOf.STUB_INDEX_OF_TWO_CONSECUTIVE_CHARS, options, providers, |
|
115 registerStubCall(AMD64ArrayIndexOf.STUB_INDEX_OF_TWO_CONSECUTIVE_CHARS, LEAF, REEXECUTABLE, NO_LOCATIONS))); |
|
116 link(new AMD64ArrayIndexOfStub(AMD64ArrayIndexOf.STUB_INDEX_OF_1_BYTE, options, providers, |
|
117 registerStubCall(AMD64ArrayIndexOf.STUB_INDEX_OF_1_BYTE, LEAF, REEXECUTABLE, NO_LOCATIONS))); |
|
118 link(new AMD64ArrayIndexOfStub(AMD64ArrayIndexOf.STUB_INDEX_OF_2_BYTES, options, providers, |
|
119 registerStubCall(AMD64ArrayIndexOf.STUB_INDEX_OF_2_BYTES, LEAF, REEXECUTABLE, NO_LOCATIONS))); |
|
120 link(new AMD64ArrayIndexOfStub(AMD64ArrayIndexOf.STUB_INDEX_OF_3_BYTES, options, providers, |
|
121 registerStubCall(AMD64ArrayIndexOf.STUB_INDEX_OF_3_BYTES, LEAF, REEXECUTABLE, NO_LOCATIONS))); |
|
122 link(new AMD64ArrayIndexOfStub(AMD64ArrayIndexOf.STUB_INDEX_OF_4_BYTES, options, providers, |
|
123 registerStubCall(AMD64ArrayIndexOf.STUB_INDEX_OF_4_BYTES, LEAF, REEXECUTABLE, NO_LOCATIONS))); |
|
124 link(new AMD64ArrayIndexOfStub(AMD64ArrayIndexOf.STUB_INDEX_OF_1_CHAR, options, providers, |
|
125 registerStubCall(AMD64ArrayIndexOf.STUB_INDEX_OF_1_CHAR, LEAF, REEXECUTABLE, NO_LOCATIONS))); |
|
126 link(new AMD64ArrayIndexOfStub(AMD64ArrayIndexOf.STUB_INDEX_OF_2_CHARS, options, providers, |
|
127 registerStubCall(AMD64ArrayIndexOf.STUB_INDEX_OF_2_CHARS, LEAF, REEXECUTABLE, NO_LOCATIONS))); |
|
128 link(new AMD64ArrayIndexOfStub(AMD64ArrayIndexOf.STUB_INDEX_OF_3_CHARS, options, providers, |
|
129 registerStubCall(AMD64ArrayIndexOf.STUB_INDEX_OF_3_CHARS, LEAF, REEXECUTABLE, NO_LOCATIONS))); |
|
130 link(new AMD64ArrayIndexOfStub(AMD64ArrayIndexOf.STUB_INDEX_OF_4_CHARS, options, providers, |
|
131 registerStubCall(AMD64ArrayIndexOf.STUB_INDEX_OF_4_CHARS, LEAF, REEXECUTABLE, NO_LOCATIONS))); |
|
132 |
111 super.initialize(providers, options); |
133 super.initialize(providers, options); |
112 } |
134 } |
113 |
135 |
114 @Override |
136 @Override |
115 public Value[] getNativeABICallerSaveRegisters() { |
137 public Value[] getNativeABICallerSaveRegisters() { |