27 import static jdk.vm.ci.aarch64.AArch64.r0; |
27 import static jdk.vm.ci.aarch64.AArch64.r0; |
28 import static jdk.vm.ci.aarch64.AArch64.r3; |
28 import static jdk.vm.ci.aarch64.AArch64.r3; |
29 import static jdk.vm.ci.hotspot.HotSpotCallingConventionType.NativeCall; |
29 import static jdk.vm.ci.hotspot.HotSpotCallingConventionType.NativeCall; |
30 import static jdk.vm.ci.meta.Value.ILLEGAL; |
30 import static jdk.vm.ci.meta.Value.ILLEGAL; |
31 import static org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage.JUMP_ADDRESS; |
31 import static org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage.JUMP_ADDRESS; |
32 import static org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage.Reexecutability.REEXECUTABLE_ONLY_AFTER_EXCEPTION; |
32 import static org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage.Reexecutability.NOT_REEXECUTABLE; |
33 import static org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage.RegisterEffect.PRESERVES_REGISTERS; |
33 import static org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage.RegisterEffect.PRESERVES_REGISTERS; |
34 import static org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage.Transition.LEAF; |
34 import static org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage.Transition.LEAF; |
35 import static org.graalvm.compiler.hotspot.replacements.CRC32CSubstitutions.UPDATE_BYTES_CRC32C; |
35 import static org.graalvm.compiler.hotspot.replacements.CRC32CSubstitutions.UPDATE_BYTES_CRC32C; |
36 import static org.graalvm.compiler.hotspot.replacements.CRC32Substitutions.UPDATE_BYTES_CRC32; |
36 import static org.graalvm.compiler.hotspot.replacements.CRC32Substitutions.UPDATE_BYTES_CRC32; |
37 import static jdk.internal.vm.compiler.word.LocationIdentity.any; |
37 import static jdk.internal.vm.compiler.word.LocationIdentity.any; |
74 // The calling convention for the exception handler stub is (only?) defined in |
74 // The calling convention for the exception handler stub is (only?) defined in |
75 // TemplateInterpreterGenerator::generate_throw_exception() |
75 // TemplateInterpreterGenerator::generate_throw_exception() |
76 RegisterValue exception = r0.asValue(LIRKind.reference(word)); |
76 RegisterValue exception = r0.asValue(LIRKind.reference(word)); |
77 RegisterValue exceptionPc = r3.asValue(LIRKind.value(word)); |
77 RegisterValue exceptionPc = r3.asValue(LIRKind.value(word)); |
78 CallingConvention exceptionCc = new CallingConvention(0, ILLEGAL, exception, exceptionPc); |
78 CallingConvention exceptionCc = new CallingConvention(0, ILLEGAL, exception, exceptionPc); |
79 register(new HotSpotForeignCallLinkageImpl(HotSpotBackend.EXCEPTION_HANDLER, 0L, PRESERVES_REGISTERS, LEAF, REEXECUTABLE_ONLY_AFTER_EXCEPTION, exceptionCc, null, any())); |
79 register(new HotSpotForeignCallLinkageImpl(HotSpotBackend.EXCEPTION_HANDLER, 0L, PRESERVES_REGISTERS, LEAF, NOT_REEXECUTABLE, exceptionCc, null, any())); |
80 register(new HotSpotForeignCallLinkageImpl(HotSpotBackend.EXCEPTION_HANDLER_IN_CALLER, JUMP_ADDRESS, PRESERVES_REGISTERS, LEAF, REEXECUTABLE_ONLY_AFTER_EXCEPTION, exceptionCc, null, any())); |
80 register(new HotSpotForeignCallLinkageImpl(HotSpotBackend.EXCEPTION_HANDLER_IN_CALLER, JUMP_ADDRESS, PRESERVES_REGISTERS, LEAF, NOT_REEXECUTABLE, exceptionCc, null, any())); |
81 |
81 |
82 // These stubs do callee saving |
82 // These stubs do callee saving |
83 if (config.useCRC32Intrinsics) { |
83 if (config.useCRC32Intrinsics) { |
84 registerForeignCall(UPDATE_BYTES_CRC32, config.updateBytesCRC32Stub, NativeCall, PRESERVES_REGISTERS, LEAF, REEXECUTABLE_ONLY_AFTER_EXCEPTION, any()); |
84 registerForeignCall(UPDATE_BYTES_CRC32, config.updateBytesCRC32Stub, NativeCall, PRESERVES_REGISTERS, LEAF, NOT_REEXECUTABLE, any()); |
85 } |
85 } |
86 if (config.useCRC32CIntrinsics) { |
86 if (config.useCRC32CIntrinsics) { |
87 registerForeignCall(UPDATE_BYTES_CRC32C, config.updateBytesCRC32C, NativeCall, PRESERVES_REGISTERS, LEAF, REEXECUTABLE_ONLY_AFTER_EXCEPTION, any()); |
87 registerForeignCall(UPDATE_BYTES_CRC32C, config.updateBytesCRC32C, NativeCall, PRESERVES_REGISTERS, LEAF, NOT_REEXECUTABLE, any()); |
88 } |
88 } |
89 |
89 |
90 super.initialize(providers, options); |
90 super.initialize(providers, options); |
91 } |
91 } |
92 |
92 |