Index: runtime/vm/stub_code_x64.cc |
=================================================================== |
--- runtime/vm/stub_code_x64.cc (revision 31283) |
+++ runtime/vm/stub_code_x64.cc (working copy) |
@@ -161,8 +161,18 @@ |
__ leaq(RAX, Address(RBP, 2 * kWordSize)); // Compute return value addr. |
__ movq(Address(RSP, retval_offset), RAX); // Set retval in NativeArguments. |
__ movq(RDI, RSP); // Pass the pointer to the NativeArguments. |
+ |
+ // Call native function (setsup scope if not leaf function). |
+ Label leaf_call; |
+ Label done; |
+ __ testq(R10, Immediate(NativeArguments::AutoSetupScopeMask())); |
+ __ j(ZERO, &leaf_call); |
__ movq(RSI, RBX); // Pass pointer to function entrypoint. |
__ call(&NativeEntry::NativeCallWrapperLabel()); |
+ __ jmp(&done); |
+ __ Bind(&leaf_call); |
+ __ call(RBX); |
+ __ Bind(&done); |
// Reset exit frame information in Isolate structure. |
__ movq(Address(CTX, Isolate::top_exit_frame_info_offset()), Immediate(0)); |