| 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_ARM) | 6 #if defined(TARGET_ARCH_ARM) |
| 7 | 7 |
| 8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
| 9 #include "vm/code_generator.h" | 9 #include "vm/code_generator.h" |
| 10 #include "vm/cpu.h" | 10 #include "vm/cpu.h" |
| (...skipping 1527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1538 void StubCode::GenerateTwoArgsCheckInlineCacheStub(Assembler* assembler) { | 1538 void StubCode::GenerateTwoArgsCheckInlineCacheStub(Assembler* assembler) { |
| 1539 GenerateUsageCounterIncrement(assembler, R6); | 1539 GenerateUsageCounterIncrement(assembler, R6); |
| 1540 GenerateNArgsCheckInlineCacheStub(assembler, | 1540 GenerateNArgsCheckInlineCacheStub(assembler, |
| 1541 2, | 1541 2, |
| 1542 kInlineCacheMissHandlerTwoArgsRuntimeEntry, | 1542 kInlineCacheMissHandlerTwoArgsRuntimeEntry, |
| 1543 Token::kILLEGAL, | 1543 Token::kILLEGAL, |
| 1544 kIgnoreRanges); | 1544 kIgnoreRanges); |
| 1545 } | 1545 } |
| 1546 | 1546 |
| 1547 | 1547 |
| 1548 void StubCode::GenerateThreeArgsCheckInlineCacheStub(Assembler* assembler) { | |
| 1549 GenerateUsageCounterIncrement(assembler, R6); | |
| 1550 GenerateNArgsCheckInlineCacheStub(assembler, | |
| 1551 3, | |
| 1552 kInlineCacheMissHandlerThreeArgsRuntimeEntry, | |
| 1553 Token::kILLEGAL, | |
| 1554 kIgnoreRanges); | |
| 1555 } | |
| 1556 | |
| 1557 | |
| 1558 void StubCode::GenerateSmiAddInlineCacheStub(Assembler* assembler) { | 1548 void StubCode::GenerateSmiAddInlineCacheStub(Assembler* assembler) { |
| 1559 GenerateUsageCounterIncrement(assembler, R6); | 1549 GenerateUsageCounterIncrement(assembler, R6); |
| 1560 GenerateNArgsCheckInlineCacheStub(assembler, | 1550 GenerateNArgsCheckInlineCacheStub(assembler, |
| 1561 2, | 1551 2, |
| 1562 kInlineCacheMissHandlerTwoArgsRuntimeEntry, | 1552 kInlineCacheMissHandlerTwoArgsRuntimeEntry, |
| 1563 Token::kADD, | 1553 Token::kADD, |
| 1564 kCollectRanges); | 1554 kCollectRanges); |
| 1565 } | 1555 } |
| 1566 | 1556 |
| 1567 | 1557 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1612 | 1602 |
| 1613 void StubCode::GenerateTwoArgsOptimizedCheckInlineCacheStub( | 1603 void StubCode::GenerateTwoArgsOptimizedCheckInlineCacheStub( |
| 1614 Assembler* assembler) { | 1604 Assembler* assembler) { |
| 1615 GenerateOptimizedUsageCounterIncrement(assembler); | 1605 GenerateOptimizedUsageCounterIncrement(assembler); |
| 1616 GenerateNArgsCheckInlineCacheStub(assembler, 2, | 1606 GenerateNArgsCheckInlineCacheStub(assembler, 2, |
| 1617 kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL, | 1607 kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL, |
| 1618 kIgnoreRanges); | 1608 kIgnoreRanges); |
| 1619 } | 1609 } |
| 1620 | 1610 |
| 1621 | 1611 |
| 1622 void StubCode::GenerateThreeArgsOptimizedCheckInlineCacheStub( | |
| 1623 Assembler* assembler) { | |
| 1624 GenerateOptimizedUsageCounterIncrement(assembler); | |
| 1625 GenerateNArgsCheckInlineCacheStub(assembler, 3, | |
| 1626 kInlineCacheMissHandlerThreeArgsRuntimeEntry, Token::kILLEGAL, | |
| 1627 kIgnoreRanges); | |
| 1628 } | |
| 1629 | |
| 1630 | |
| 1631 // Intermediary stub between a static call and its target. ICData contains | 1612 // Intermediary stub between a static call and its target. ICData contains |
| 1632 // the target function and the call count. | 1613 // the target function and the call count. |
| 1633 // R5: ICData | 1614 // R5: ICData |
| 1634 void StubCode::GenerateZeroArgsUnoptimizedStaticCallStub(Assembler* assembler) { | 1615 void StubCode::GenerateZeroArgsUnoptimizedStaticCallStub(Assembler* assembler) { |
| 1635 GenerateUsageCounterIncrement(assembler, R6); | 1616 GenerateUsageCounterIncrement(assembler, R6); |
| 1636 #if defined(DEBUG) | 1617 #if defined(DEBUG) |
| 1637 { Label ok; | 1618 { Label ok; |
| 1638 // Check that the IC data array has NumArgsTested() == 0. | 1619 // Check that the IC data array has NumArgsTested() == 0. |
| 1639 // 'NumArgsTested' is stored in the least significant bits of 'state_bits'. | 1620 // 'NumArgsTested' is stored in the least significant bits of 'state_bits'. |
| 1640 __ ldr(R6, FieldAddress(R5, ICData::state_bits_offset())); | 1621 __ ldr(R6, FieldAddress(R5, ICData::state_bits_offset())); |
| (...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2130 // Result: | 2111 // Result: |
| 2131 // R1: entry point. | 2112 // R1: entry point. |
| 2132 void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) { | 2113 void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) { |
| 2133 EmitMegamorphicLookup(assembler, R0, R1, R1); | 2114 EmitMegamorphicLookup(assembler, R0, R1, R1); |
| 2134 __ Ret(); | 2115 __ Ret(); |
| 2135 } | 2116 } |
| 2136 | 2117 |
| 2137 } // namespace dart | 2118 } // namespace dart |
| 2138 | 2119 |
| 2139 #endif // defined TARGET_ARCH_ARM | 2120 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |