| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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_ARM64) | 6 #if defined(TARGET_ARCH_ARM64) |
| 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/compiler.h" | 10 #include "vm/compiler.h" |
| (...skipping 1586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1597 | 1597 |
| 1598 | 1598 |
| 1599 void StubCode::GenerateTwoArgsCheckInlineCacheStub(Assembler* assembler) { | 1599 void StubCode::GenerateTwoArgsCheckInlineCacheStub(Assembler* assembler) { |
| 1600 GenerateUsageCounterIncrement(assembler, R6); | 1600 GenerateUsageCounterIncrement(assembler, R6); |
| 1601 GenerateNArgsCheckInlineCacheStub(assembler, 2, | 1601 GenerateNArgsCheckInlineCacheStub(assembler, 2, |
| 1602 kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL, | 1602 kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL, |
| 1603 kIgnoreRanges); | 1603 kIgnoreRanges); |
| 1604 } | 1604 } |
| 1605 | 1605 |
| 1606 | 1606 |
| 1607 void StubCode::GenerateThreeArgsCheckInlineCacheStub(Assembler* assembler) { | |
| 1608 GenerateUsageCounterIncrement(assembler, R6); | |
| 1609 GenerateNArgsCheckInlineCacheStub(assembler, 3, | |
| 1610 kInlineCacheMissHandlerThreeArgsRuntimeEntry, Token::kILLEGAL, | |
| 1611 kIgnoreRanges); | |
| 1612 } | |
| 1613 | |
| 1614 | |
| 1615 void StubCode::GenerateSmiAddInlineCacheStub(Assembler* assembler) { | 1607 void StubCode::GenerateSmiAddInlineCacheStub(Assembler* assembler) { |
| 1616 GenerateUsageCounterIncrement(assembler, R6); | 1608 GenerateUsageCounterIncrement(assembler, R6); |
| 1617 GenerateNArgsCheckInlineCacheStub(assembler, 2, | 1609 GenerateNArgsCheckInlineCacheStub(assembler, 2, |
| 1618 kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kADD, | 1610 kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kADD, |
| 1619 kCollectRanges); | 1611 kCollectRanges); |
| 1620 } | 1612 } |
| 1621 | 1613 |
| 1622 | 1614 |
| 1623 void StubCode::GenerateSmiSubInlineCacheStub(Assembler* assembler) { | 1615 void StubCode::GenerateSmiSubInlineCacheStub(Assembler* assembler) { |
| 1624 GenerateUsageCounterIncrement(assembler, R6); | 1616 GenerateUsageCounterIncrement(assembler, R6); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1667 | 1659 |
| 1668 void StubCode::GenerateTwoArgsOptimizedCheckInlineCacheStub( | 1660 void StubCode::GenerateTwoArgsOptimizedCheckInlineCacheStub( |
| 1669 Assembler* assembler) { | 1661 Assembler* assembler) { |
| 1670 GenerateOptimizedUsageCounterIncrement(assembler); | 1662 GenerateOptimizedUsageCounterIncrement(assembler); |
| 1671 GenerateNArgsCheckInlineCacheStub(assembler, 2, | 1663 GenerateNArgsCheckInlineCacheStub(assembler, 2, |
| 1672 kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL, | 1664 kInlineCacheMissHandlerTwoArgsRuntimeEntry, Token::kILLEGAL, |
| 1673 kIgnoreRanges); | 1665 kIgnoreRanges); |
| 1674 } | 1666 } |
| 1675 | 1667 |
| 1676 | 1668 |
| 1677 void StubCode::GenerateThreeArgsOptimizedCheckInlineCacheStub( | |
| 1678 Assembler* assembler) { | |
| 1679 GenerateOptimizedUsageCounterIncrement(assembler); | |
| 1680 GenerateNArgsCheckInlineCacheStub(assembler, 3, | |
| 1681 kInlineCacheMissHandlerThreeArgsRuntimeEntry, Token::kILLEGAL, | |
| 1682 kIgnoreRanges); | |
| 1683 } | |
| 1684 | |
| 1685 | |
| 1686 void StubCode::GenerateZeroArgsUnoptimizedStaticCallStub(Assembler* assembler) { | 1669 void StubCode::GenerateZeroArgsUnoptimizedStaticCallStub(Assembler* assembler) { |
| 1687 GenerateUsageCounterIncrement(assembler, R6); | 1670 GenerateUsageCounterIncrement(assembler, R6); |
| 1688 #if defined(DEBUG) | 1671 #if defined(DEBUG) |
| 1689 { Label ok; | 1672 { Label ok; |
| 1690 // Check that the IC data array has NumArgsTested() == 0. | 1673 // Check that the IC data array has NumArgsTested() == 0. |
| 1691 // 'NumArgsTested' is stored in the least significant bits of 'state_bits'. | 1674 // 'NumArgsTested' is stored in the least significant bits of 'state_bits'. |
| 1692 __ LoadFromOffset(R6, R5, ICData::state_bits_offset() - kHeapObjectTag, | 1675 __ LoadFromOffset(R6, R5, ICData::state_bits_offset() - kHeapObjectTag, |
| 1693 kNoPP, kUnsignedWord); | 1676 kNoPP, kUnsignedWord); |
| 1694 ASSERT(ICData::NumArgsTestedShift() == 0); // No shift needed. | 1677 ASSERT(ICData::NumArgsTestedShift() == 0); // No shift needed. |
| 1695 __ andi(R6, R6, Immediate(ICData::NumArgsTestedMask())); | 1678 __ andi(R6, R6, Immediate(ICData::NumArgsTestedMask())); |
| (...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2180 // Result: | 2163 // Result: |
| 2181 // R1: entry point. | 2164 // R1: entry point. |
| 2182 void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) { | 2165 void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) { |
| 2183 EmitMegamorphicLookup(assembler, R0, R1, R1); | 2166 EmitMegamorphicLookup(assembler, R0, R1, R1); |
| 2184 __ ret(); | 2167 __ ret(); |
| 2185 } | 2168 } |
| 2186 | 2169 |
| 2187 } // namespace dart | 2170 } // namespace dart |
| 2188 | 2171 |
| 2189 #endif // defined TARGET_ARCH_ARM64 | 2172 #endif // defined TARGET_ARCH_ARM64 |
| OLD | NEW |