Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(823)

Side by Side Diff: runtime/vm/stub_code_ia32.cc

Issue 1270803003: VM: More abstract interface for generating stub calls. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/stub_code_arm64.cc ('k') | runtime/vm/stub_code_mips.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 323
324 // Input parameters: 324 // Input parameters:
325 // EDX: smi-tagged argument count, may be zero. 325 // EDX: smi-tagged argument count, may be zero.
326 // EBP[kParamEndSlotFromFp + 1]: last argument. 326 // EBP[kParamEndSlotFromFp + 1]: last argument.
327 // Uses EAX, EBX, ECX, EDX, EDI. 327 // Uses EAX, EBX, ECX, EDX, EDI.
328 static void PushArgumentsArray(Assembler* assembler) { 328 static void PushArgumentsArray(Assembler* assembler) {
329 // Allocate array to store arguments of caller. 329 // Allocate array to store arguments of caller.
330 const Immediate& raw_null = 330 const Immediate& raw_null =
331 Immediate(reinterpret_cast<intptr_t>(Object::null())); 331 Immediate(reinterpret_cast<intptr_t>(Object::null()));
332 __ movl(ECX, raw_null); // Null element type for raw Array. 332 __ movl(ECX, raw_null); // Null element type for raw Array.
333 const ExternalLabel array_label(StubCode::AllocateArrayEntryPoint()); 333 __ Call(*StubCode::AllocateArray_entry());
334 __ call(&array_label);
335 __ SmiUntag(EDX); 334 __ SmiUntag(EDX);
336 // EAX: newly allocated array. 335 // EAX: newly allocated array.
337 // EDX: length of the array (was preserved by the stub). 336 // EDX: length of the array (was preserved by the stub).
338 __ pushl(EAX); // Array is in EAX and on top of stack. 337 __ pushl(EAX); // Array is in EAX and on top of stack.
339 __ leal(EBX, Address(EBP, EDX, TIMES_4, kParamEndSlotFromFp * kWordSize)); 338 __ leal(EBX, Address(EBP, EDX, TIMES_4, kParamEndSlotFromFp * kWordSize));
340 __ leal(ECX, FieldAddress(EAX, Array::data_offset())); 339 __ leal(ECX, FieldAddress(EAX, Array::data_offset()));
341 // EBX: address of first argument on stack. 340 // EBX: address of first argument on stack.
342 // ECX: address of first argument in array. 341 // ECX: address of first argument in array.
343 Label loop, loop_condition; 342 Label loop, loop_condition;
344 __ jmp(&loop_condition, Assembler::kNearJump); 343 __ jmp(&loop_condition, Assembler::kNearJump);
(...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after
1127 __ popl(EAX); // Pop argument (type arguments of object). 1126 __ popl(EAX); // Pop argument (type arguments of object).
1128 __ popl(EAX); // Pop argument (class of object). 1127 __ popl(EAX); // Pop argument (class of object).
1129 __ popl(EAX); // Pop result (newly allocated object). 1128 __ popl(EAX); // Pop result (newly allocated object).
1130 // EAX: new object 1129 // EAX: new object
1131 // Restore the frame pointer. 1130 // Restore the frame pointer.
1132 __ LeaveFrame(); 1131 __ LeaveFrame();
1133 __ ret(); 1132 __ ret();
1134 // Emit function patching code. This will be swapped with the first 5 bytes 1133 // Emit function patching code. This will be swapped with the first 5 bytes
1135 // at entry point. 1134 // at entry point.
1136 *patch_code_pc_offset = assembler->CodeSize(); 1135 *patch_code_pc_offset = assembler->CodeSize();
1137 __ jmp(&StubCode::FixAllocationStubTargetLabel()); 1136 __ Jmp(*StubCode::FixAllocationStubTarget_entry());
1138 } 1137 }
1139 1138
1140 1139
1141 // Called for invoking "dynamic noSuchMethod(Invocation invocation)" function 1140 // Called for invoking "dynamic noSuchMethod(Invocation invocation)" function
1142 // from the entry code of a dart function after an error in passed argument 1141 // from the entry code of a dart function after an error in passed argument
1143 // name or number is detected. 1142 // name or number is detected.
1144 // Input parameters: 1143 // Input parameters:
1145 // ESP : points to return address. 1144 // ESP : points to return address.
1146 // ESP + 4 : address of last argument. 1145 // ESP + 4 : address of last argument.
1147 // EDX : arguments descriptor array. 1146 // EDX : arguments descriptor array.
(...skipping 947 matching lines...) Expand 10 before | Expand all | Expand 10 after
2095 // EBX: entry point. 2094 // EBX: entry point.
2096 void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) { 2095 void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) {
2097 EmitMegamorphicLookup(assembler, EDI, EBX, EBX); 2096 EmitMegamorphicLookup(assembler, EDI, EBX, EBX);
2098 __ ret(); 2097 __ ret();
2099 } 2098 }
2100 2099
2101 2100
2102 } // namespace dart 2101 } // namespace dart
2103 2102
2104 #endif // defined TARGET_ARCH_IA32 2103 #endif // defined TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « runtime/vm/stub_code_arm64.cc ('k') | runtime/vm/stub_code_mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698