OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/globals.h" | 5 #include "vm/globals.h" |
6 #if defined(TARGET_ARCH_IA32) | 6 #if defined(TARGET_ARCH_IA32) |
7 | 7 |
8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
9 #include "vm/compiler.h" | 9 #include "vm/compiler.h" |
10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
760 // code below. | 760 // code below. |
761 ASSERT(kExitLinkSlotFromEntryFp == -7); | 761 ASSERT(kExitLinkSlotFromEntryFp == -7); |
762 __ movl(EDX, Address(THR, Thread::top_exit_frame_info_offset())); | 762 __ movl(EDX, Address(THR, Thread::top_exit_frame_info_offset())); |
763 __ pushl(EDX); | 763 __ pushl(EDX); |
764 __ movl(Address(THR, Thread::top_exit_frame_info_offset()), Immediate(0)); | 764 __ movl(Address(THR, Thread::top_exit_frame_info_offset()), Immediate(0)); |
765 | 765 |
766 // Load arguments descriptor array into EDX. | 766 // Load arguments descriptor array into EDX. |
767 __ movl(EDX, Address(EBP, kArgumentsDescOffset)); | 767 __ movl(EDX, Address(EBP, kArgumentsDescOffset)); |
768 __ movl(EDX, Address(EDX, VMHandles::kOffsetOfRawPtrInHandle)); | 768 __ movl(EDX, Address(EDX, VMHandles::kOffsetOfRawPtrInHandle)); |
769 | 769 |
| 770 // No need to check for type args, disallowed by DartEntry::InvokeFunction. |
770 // Load number of arguments into EBX. | 771 // Load number of arguments into EBX. |
771 __ movl(EBX, FieldAddress(EDX, ArgumentsDescriptor::count_offset())); | 772 __ movl(EBX, FieldAddress(EDX, ArgumentsDescriptor::count_offset())); |
772 __ SmiUntag(EBX); | 773 __ SmiUntag(EBX); |
773 | 774 |
774 // Set up arguments for the dart call. | 775 // Set up arguments for the dart call. |
775 Label push_arguments; | 776 Label push_arguments; |
776 Label done_push_arguments; | 777 Label done_push_arguments; |
777 __ testl(EBX, EBX); // check if there are arguments. | 778 __ testl(EBX, EBX); // check if there are arguments. |
778 __ j(ZERO, &done_push_arguments, Assembler::kNearJump); | 779 __ j(ZERO, &done_push_arguments, Assembler::kNearJump); |
779 __ movl(EAX, Immediate(0)); | 780 __ movl(EAX, Immediate(0)); |
(...skipping 1355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2135 } | 2136 } |
2136 | 2137 |
2137 | 2138 |
2138 void StubCode::GenerateAsynchronousGapMarkerStub(Assembler* assembler) { | 2139 void StubCode::GenerateAsynchronousGapMarkerStub(Assembler* assembler) { |
2139 __ int3(); | 2140 __ int3(); |
2140 } | 2141 } |
2141 | 2142 |
2142 } // namespace dart | 2143 } // namespace dart |
2143 | 2144 |
2144 #endif // defined TARGET_ARCH_IA32 | 2145 #endif // defined TARGET_ARCH_IA32 |
OLD | NEW |