Index: runtime/vm/stub_code_ia32.cc |
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc |
index 219afeaaf0a77b8857a9dc006bd3ec6516b5d6c7..22b494a30d9e8c0454a7387a5ca05a99f6e44a6b 100644 |
--- a/runtime/vm/stub_code_ia32.cc |
+++ b/runtime/vm/stub_code_ia32.cc |
@@ -120,7 +120,8 @@ void StubCode::GeneratePrintStopMessageStub(Assembler* assembler) { |
// EAX : address of first argument in argument array. |
// ECX : address of the native function to call. |
// EDX : argc_tag including number of arguments and function kind. |
-void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) { |
+static void GenerateCallNativeWithWrapperStub(Assembler* assembler, |
+ ExternalLabel* wrapper) { |
const intptr_t native_args_struct_offset = |
NativeEntry::kNumCallWrapperArguments * kWordSize; |
const intptr_t thread_offset = |
@@ -172,8 +173,7 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) { |
__ movl(Address(ESP, 0), EAX); // Pass the pointer to the NativeArguments. |
__ movl(Address(ESP, kWordSize), ECX); // Function to call. |
- ExternalLabel label(NativeEntry::NativeCallWrapperEntry()); |
- __ call(&label); |
+ __ call(wrapper); |
__ movl(Assembler::VMTagAddress(), Immediate(VMTag::kDartTagId)); |
@@ -185,13 +185,25 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) { |
} |
+void StubCode::GenerateCallNoScopeNativeStub(Assembler* assembler) { |
+ ExternalLabel wrapper(NativeEntry::NoScopeNativeCallWrapperEntry()); |
+ GenerateCallNativeWithWrapperStub(assembler, &wrapper); |
+} |
+ |
+ |
+void StubCode::GenerateCallAutoScopeNativeStub(Assembler* assembler) { |
+ ExternalLabel wrapper(NativeEntry::AutoScopeNativeCallWrapperEntry()); |
+ GenerateCallNativeWithWrapperStub(assembler, &wrapper); |
+} |
+ |
+ |
// Input parameters: |
// ESP : points to return address. |
// ESP + 4 : address of return value. |
// EAX : address of first argument in argument array. |
// ECX : address of the native function to call. |
// EDX : argc_tag including number of arguments and function kind. |
-void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) { |
+void StubCode::GenerateCallBootstrapNativeStub(Assembler* assembler) { |
const intptr_t native_args_struct_offset = kWordSize; |
const intptr_t thread_offset = |
NativeArguments::thread_offset() + native_args_struct_offset; |