| 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/assembler_macros.h" | 9 #include "vm/assembler_macros.h" |
| 10 #include "vm/compiler.h" | 10 #include "vm/compiler.h" |
| (...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 672 // returning here. | 672 // returning here. |
| 673 // If no call method exists, throw a NoSuchMethodError. | 673 // If no call method exists, throw a NoSuchMethodError. |
| 674 // EDI: non-closure object. | 674 // EDI: non-closure object. |
| 675 // EDX: arguments descriptor array. | 675 // EDX: arguments descriptor array. |
| 676 | 676 |
| 677 // Create a stub frame as we are pushing some objects on the stack before | 677 // Create a stub frame as we are pushing some objects on the stack before |
| 678 // calling into the runtime. | 678 // calling into the runtime. |
| 679 AssemblerMacros::EnterStubFrame(assembler); | 679 AssemblerMacros::EnterStubFrame(assembler); |
| 680 | 680 |
| 681 __ pushl(raw_null); // Setup space on stack for result from error reporting. | 681 __ pushl(raw_null); // Setup space on stack for result from error reporting. |
| 682 __ pushl(EDI); // Non-closure object. | |
| 683 __ pushl(EDX); // Arguments descriptor. | 682 __ pushl(EDX); // Arguments descriptor. |
| 684 // Load smi-tagged arguments array length, including the non-closure. | 683 // Load smi-tagged arguments array length, including the non-closure. |
| 685 __ movl(EDX, FieldAddress(EDX, ArgumentsDescriptor::count_offset())); | 684 __ movl(EDX, FieldAddress(EDX, ArgumentsDescriptor::count_offset())); |
| 686 // See stack layout below explaining "wordSize * 6" offset. | 685 // See stack layout below explaining "wordSize * 5" offset. |
| 687 PushArgumentsArray(assembler, (kWordSize * 6)); | 686 PushArgumentsArray(assembler, (kWordSize * 5)); |
| 688 | 687 |
| 689 // Stack: | 688 // Stack: |
| 690 // TOS + 0: Argument array. | 689 // TOS + 0: Argument array. |
| 691 // TOS + 1: Arguments descriptor array. | 690 // TOS + 1: Arguments descriptor array. |
| 692 // TOS + 2: Non-closure object. | 691 // TOS + 2: Place for result from the call. |
| 693 // TOS + 3: Place for result from the call. | 692 // TOS + 3: PC marker => RawInstruction object. |
| 694 // TOS + 4: PC marker => RawInstruction object. | 693 // TOS + 4: Saved EBP of previous frame. <== EBP |
| 695 // TOS + 5: Saved EBP of previous frame. <== EBP | 694 // TOS + 5: Dart code return address |
| 696 // TOS + 6: Dart code return address | 695 // TOS + 6: Last argument of caller. |
| 697 // TOS + 7: Last argument of caller. | |
| 698 // .... | 696 // .... |
| 699 __ CallRuntime(kInvokeNonClosureRuntimeEntry); | 697 __ CallRuntime(kInvokeNonClosureRuntimeEntry); |
| 700 // Remove arguments. | 698 // Remove arguments. |
| 701 __ popl(EAX); | 699 __ popl(EAX); |
| 702 __ popl(EAX); | 700 __ popl(EAX); |
| 703 __ popl(EAX); | |
| 704 __ popl(EAX); // Get result into EAX. | 701 __ popl(EAX); // Get result into EAX. |
| 705 | 702 |
| 706 // Remove the stub frame as we are about to return. | 703 // Remove the stub frame as we are about to return. |
| 707 __ LeaveFrame(); | 704 __ LeaveFrame(); |
| 708 __ ret(); | 705 __ ret(); |
| 709 } | 706 } |
| 710 | 707 |
| 711 | 708 |
| 712 // Called when invoking dart code from C++ (VM code). | 709 // Called when invoking dart code from C++ (VM code). |
| 713 // Input parameters: | 710 // Input parameters: |
| (...skipping 1410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2124 __ Bind(&done); | 2121 __ Bind(&done); |
| 2125 __ popl(temp); | 2122 __ popl(temp); |
| 2126 __ popl(right); | 2123 __ popl(right); |
| 2127 __ popl(left); | 2124 __ popl(left); |
| 2128 __ ret(); | 2125 __ ret(); |
| 2129 } | 2126 } |
| 2130 | 2127 |
| 2131 } // namespace dart | 2128 } // namespace dart |
| 2132 | 2129 |
| 2133 #endif // defined TARGET_ARCH_IA32 | 2130 #endif // defined TARGET_ARCH_IA32 |
| OLD | NEW |