--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotForeignCallsProviderImpl.java Tue Sep 24 08:54:08 2019 -0700
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotForeignCallsProviderImpl.java Tue Sep 24 12:47:15 2019 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
import static jdk.vm.ci.hotspot.HotSpotCallingConventionType.JavaCall;
import static jdk.vm.ci.hotspot.HotSpotCallingConventionType.JavaCallee;
-import static org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage.RegisterEffect.PRESERVES_REGISTERS;
+import static org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage.RegisterEffect.DESTROYS_ALL_CALLER_SAVE_REGISTERS;
import static org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage.Transition.SAFEPOINT;
import java.util.ArrayList;
@@ -114,13 +114,14 @@
ForeignCallDescriptor descriptor,
Transition transition,
Reexecutability reexecutability,
+ RegisterEffect effect,
LocationIdentity... killedLocations) {
return register(HotSpotForeignCallLinkageImpl.create(metaAccess,
codeCache,
wordTypes,
this,
descriptor,
- 0L, PRESERVES_REGISTERS,
+ 0L, effect,
JavaCall,
JavaCallee,
transition,
@@ -129,13 +130,13 @@
}
/**
- * Creates and registers the linkage for a foreign call.
+ * Creates and registers the linkage for a foreign call. All foreign calls are assumed to have
+ * the effect {@link RegisterEffect#DESTROYS_ALL_CALLER_SAVE_REGISTERS} since they are outside
+ * of Graal's knowledge.
*
* @param descriptor the signature of the foreign call
* @param address the address of the code to call (must be non-zero)
* @param outgoingCcType outgoing (caller) calling convention type
- * @param effect specifies if the call destroys or preserves all registers (apart from
- * temporaries which are always destroyed)
* @param transition specifies if this is a {@linkplain Transition#LEAF leaf} call
* @param reexecutability specifies if the foreign call can be re-executed without (meaningful)
* side effects. Deoptimization will not return to a point before a foreign call that
@@ -146,7 +147,6 @@
ForeignCallDescriptor descriptor,
long address,
CallingConvention.Type outgoingCcType,
- RegisterEffect effect,
Transition transition,
Reexecutability reexecutability,
LocationIdentity... killedLocations) {
@@ -159,7 +159,7 @@
this,
descriptor,
address,
- effect,
+ DESTROYS_ALL_CALLER_SAVE_REGISTERS,
outgoingCcType,
null, // incomingCcType
transition,