| 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_X64) | 6 #if defined(TARGET_ARCH_X64) | 
| 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 313 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 324 } | 324 } | 
| 325 | 325 | 
| 326 | 326 | 
| 327 // Input parameters: | 327 // Input parameters: | 
| 328 //   R10: smi-tagged argument count, may be zero. | 328 //   R10: smi-tagged argument count, may be zero. | 
| 329 //   RBP[kParamEndSlotFromFp + 1]: last argument. | 329 //   RBP[kParamEndSlotFromFp + 1]: last argument. | 
| 330 static void PushArgumentsArray(Assembler* assembler) { | 330 static void PushArgumentsArray(Assembler* assembler) { | 
| 331   __ LoadObject(R12, Object::null_object()); | 331   __ LoadObject(R12, Object::null_object()); | 
| 332   // Allocate array to store arguments of caller. | 332   // Allocate array to store arguments of caller. | 
| 333   __ movq(RBX, R12);  // Null element type for raw Array. | 333   __ movq(RBX, R12);  // Null element type for raw Array. | 
| 334   const ExternalLabel array_label(StubCode::AllocateArrayEntryPoint()); | 334   __ Call(*StubCode::AllocateArray_entry()); | 
| 335   __ call(&array_label); |  | 
| 336   __ SmiUntag(R10); | 335   __ SmiUntag(R10); | 
| 337   // RAX: newly allocated array. | 336   // RAX: newly allocated array. | 
| 338   // R10: length of the array (was preserved by the stub). | 337   // R10: length of the array (was preserved by the stub). | 
| 339   __ pushq(RAX);  // Array is in RAX and on top of stack. | 338   __ pushq(RAX);  // Array is in RAX and on top of stack. | 
| 340   __ leaq(R12, Address(RBP, R10, TIMES_8, kParamEndSlotFromFp * kWordSize)); | 339   __ leaq(R12, Address(RBP, R10, TIMES_8, kParamEndSlotFromFp * kWordSize)); | 
| 341   __ leaq(RBX, FieldAddress(RAX, Array::data_offset())); | 340   __ leaq(RBX, FieldAddress(RAX, Array::data_offset())); | 
| 342   // R12: address of first argument on stack. | 341   // R12: address of first argument on stack. | 
| 343   // RBX: address of first argument in array. | 342   // RBX: address of first argument in array. | 
| 344   Label loop, loop_condition; | 343   Label loop, loop_condition; | 
| 345 #if defined(DEBUG) | 344 #if defined(DEBUG) | 
| (...skipping 817 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1163   } | 1162   } | 
| 1164   __ CallRuntime(kAllocateObjectRuntimeEntry, 2);  // Allocate object. | 1163   __ CallRuntime(kAllocateObjectRuntimeEntry, 2);  // Allocate object. | 
| 1165   __ popq(RAX);  // Pop argument (type arguments of object). | 1164   __ popq(RAX);  // Pop argument (type arguments of object). | 
| 1166   __ popq(RAX);  // Pop argument (class of object). | 1165   __ popq(RAX);  // Pop argument (class of object). | 
| 1167   __ popq(RAX);  // Pop result (newly allocated object). | 1166   __ popq(RAX);  // Pop result (newly allocated object). | 
| 1168   // RAX: new object | 1167   // RAX: new object | 
| 1169   // Restore the frame pointer. | 1168   // Restore the frame pointer. | 
| 1170   __ LeaveStubFrame(); | 1169   __ LeaveStubFrame(); | 
| 1171   __ ret(); | 1170   __ ret(); | 
| 1172   *patch_code_pc_offset = assembler->CodeSize(); | 1171   *patch_code_pc_offset = assembler->CodeSize(); | 
| 1173   __ JmpPatchable(&StubCode::FixAllocationStubTargetLabel(), new_pp); | 1172   __ JmpPatchable(*StubCode::FixAllocationStubTarget_entry(), new_pp); | 
| 1174 } | 1173 } | 
| 1175 | 1174 | 
| 1176 | 1175 | 
| 1177 // Called for invoking "dynamic noSuchMethod(Invocation invocation)" function | 1176 // Called for invoking "dynamic noSuchMethod(Invocation invocation)" function | 
| 1178 // from the entry code of a dart function after an error in passed argument | 1177 // from the entry code of a dart function after an error in passed argument | 
| 1179 // name or number is detected. | 1178 // name or number is detected. | 
| 1180 // Input parameters: | 1179 // Input parameters: | 
| 1181 //   RSP : points to return address. | 1180 //   RSP : points to return address. | 
| 1182 //   RSP + 8 : address of last argument. | 1181 //   RSP + 8 : address of last argument. | 
| 1183 //   R10 : arguments descriptor array. | 1182 //   R10 : arguments descriptor array. | 
| (...skipping 965 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2149 // Result: | 2148 // Result: | 
| 2150 //  RCX: entry point. | 2149 //  RCX: entry point. | 
| 2151 void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) { | 2150 void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) { | 
| 2152   EmitMegamorphicLookup(assembler, RDI, RBX, RCX); | 2151   EmitMegamorphicLookup(assembler, RDI, RBX, RCX); | 
| 2153   __ ret(); | 2152   __ ret(); | 
| 2154 } | 2153 } | 
| 2155 | 2154 | 
| 2156 }  // namespace dart | 2155 }  // namespace dart | 
| 2157 | 2156 | 
| 2158 #endif  // defined TARGET_ARCH_X64 | 2157 #endif  // defined TARGET_ARCH_X64 | 
| OLD | NEW | 
|---|