| 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 1495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1506 } | 1506 } |
| 1507 | 1507 |
| 1508 | 1508 |
| 1509 // Do not count as no type feedback is collected. | 1509 // Do not count as no type feedback is collected. |
| 1510 void StubCode::GenerateClosureCallInlineCacheStub(Assembler* assembler) { | 1510 void StubCode::GenerateClosureCallInlineCacheStub(Assembler* assembler) { |
| 1511 GenerateNArgsCheckInlineCacheStub( | 1511 GenerateNArgsCheckInlineCacheStub( |
| 1512 assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry); | 1512 assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry); |
| 1513 } | 1513 } |
| 1514 | 1514 |
| 1515 | 1515 |
| 1516 // Megamorphic call is currently implemented as IC call but through a stub | |
| 1517 // that does not check/count function invocations. | |
| 1518 void StubCode::GenerateMegamorphicCallStub(Assembler* assembler) { | |
| 1519 GenerateNArgsCheckInlineCacheStub( | |
| 1520 assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry); | |
| 1521 } | |
| 1522 | |
| 1523 // Intermediary stub between a static call and its target. ICData contains | 1516 // Intermediary stub between a static call and its target. ICData contains |
| 1524 // the target function and the call count. | 1517 // the target function and the call count. |
| 1525 // ECX: ICData | 1518 // ECX: ICData |
| 1526 void StubCode::GenerateZeroArgsUnoptimizedStaticCallStub(Assembler* assembler) { | 1519 void StubCode::GenerateZeroArgsUnoptimizedStaticCallStub(Assembler* assembler) { |
| 1527 GenerateUsageCounterIncrement(assembler, EBX); | 1520 GenerateUsageCounterIncrement(assembler, EBX); |
| 1528 | 1521 |
| 1529 #if defined(DEBUG) | 1522 #if defined(DEBUG) |
| 1530 { Label ok; | 1523 { Label ok; |
| 1531 // Check that the IC data array has NumArgsTested() == num_args. | 1524 // Check that the IC data array has NumArgsTested() == num_args. |
| 1532 // 'NumArgsTested' is stored in the least significant bits of 'state_bits'. | 1525 // 'NumArgsTested' is stored in the least significant bits of 'state_bits'. |
| (...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1920 const Register temp = ECX; | 1913 const Register temp = ECX; |
| 1921 __ movl(left, Address(ESP, 2 * kWordSize)); | 1914 __ movl(left, Address(ESP, 2 * kWordSize)); |
| 1922 __ movl(right, Address(ESP, 1 * kWordSize)); | 1915 __ movl(right, Address(ESP, 1 * kWordSize)); |
| 1923 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp); | 1916 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp); |
| 1924 __ ret(); | 1917 __ ret(); |
| 1925 } | 1918 } |
| 1926 | 1919 |
| 1927 } // namespace dart | 1920 } // namespace dart |
| 1928 | 1921 |
| 1929 #endif // defined TARGET_ARCH_IA32 | 1922 #endif // defined TARGET_ARCH_IA32 |
| OLD | NEW |