Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 #ifndef RUNTIME_VM_CONSTANTS_DBC_H_ | 5 #ifndef RUNTIME_VM_CONSTANTS_DBC_H_ |
| 6 #define RUNTIME_VM_CONSTANTS_DBC_H_ | 6 #define RUNTIME_VM_CONSTANTS_DBC_H_ |
| 7 | 7 |
| 8 #include "platform/globals.h" | 8 #include "platform/globals.h" |
| 9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
| 10 #include "platform/utils.h" | 10 #include "platform/utils.h" |
| (...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 583 // | 583 // |
| 584 // - CheckEitherNonSmi rA, rD | 584 // - CheckEitherNonSmi rA, rD |
| 585 // | 585 // |
| 586 // If either FP[rA] or FP[rD] is not a Smi, then skip the next instruction. | 586 // If either FP[rA] or FP[rD] is not a Smi, then skip the next instruction. |
| 587 // | 587 // |
| 588 // - CheckClassId rA, D | 588 // - CheckClassId rA, D |
| 589 // | 589 // |
| 590 // If the class id in FP[rA] matches the class id D, then skip the | 590 // If the class id in FP[rA] matches the class id D, then skip the |
| 591 // following instruction. | 591 // following instruction. |
| 592 // | 592 // |
| 593 // - CheckClassIdRange rA, B, C | |
| 594 // | |
| 595 // If the class id in FP[rA] is between the class ids B and C, then skip the | |
| 596 // following instruction. | |
| 597 // | |
| 593 // - CheckBitTest rA, D | 598 // - CheckBitTest rA, D |
| 594 // | 599 // |
| 595 // Skips the next 3 instructions if the object at FP[rA] is a valid class for | 600 // Skips the next 3 instructions if the object at FP[rA] is a valid class for |
| 596 // a dense switch with low cid encoded in the following Nop instruction, and | 601 // a dense switch with low cid encoded in the following Nop instruction, and |
| 597 // the cid mask encoded in the Nop instruction after that, or if D == 1 and | 602 // the cid mask encoded in the Nop instruction after that, or if D == 1 and |
| 598 // FP[rA] is a Smi. Skips 2 instructions otherwise. | 603 // FP[rA] is a Smi. Skips 2 instructions otherwise. |
| 599 // | 604 // |
| 600 // - CheckCids rA, rB, rC | 605 // - CheckCids rA, rB, rC |
| 601 // | 606 // |
| 602 // Skips rC + 1 instructions if the object at FP[rA] is a Smi and | 607 // Skips rC + 1 instructions if the object at FP[rA] is a Smi and |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 834 V(InstantiateTypeArgumentsTOS, A_D, num, lit, ___) \ | 839 V(InstantiateTypeArgumentsTOS, A_D, num, lit, ___) \ |
| 835 V(InstanceOf, 0, ___, ___, ___) \ | 840 V(InstanceOf, 0, ___, ___, ___) \ |
| 836 V(BadTypeError, 0, ___, ___, ___) \ | 841 V(BadTypeError, 0, ___, ___, ___) \ |
| 837 V(AssertAssignable, A_D, num, lit, ___) \ | 842 V(AssertAssignable, A_D, num, lit, ___) \ |
| 838 V(AssertBoolean, A, num, ___, ___) \ | 843 V(AssertBoolean, A, num, ___, ___) \ |
| 839 V(TestSmi, A_D, reg, reg, ___) \ | 844 V(TestSmi, A_D, reg, reg, ___) \ |
| 840 V(TestCids, A_D, reg, num, ___) \ | 845 V(TestCids, A_D, reg, num, ___) \ |
| 841 V(CheckSmi, A, reg, ___, ___) \ | 846 V(CheckSmi, A, reg, ___, ___) \ |
| 842 V(CheckEitherNonSmi, A_D, reg, reg, ___) \ | 847 V(CheckEitherNonSmi, A_D, reg, reg, ___) \ |
| 843 V(CheckClassId, A_D, reg, num, ___) \ | 848 V(CheckClassId, A_D, reg, num, ___) \ |
| 849 V(CheckClassIdRange, A_B_C, reg, num, num) \ | |
|
kustermann
2017/05/18 09:59:45
The class range [start, end] limits are constraine
erikcorry
2017/05/18 14:25:30
Changed to a 16 bit representation with the 2nd ar
| |
| 844 V(CheckBitTest, A_D, reg, num, ___) \ | 850 V(CheckBitTest, A_D, reg, num, ___) \ |
| 845 V(CheckCids, A_B_C, reg, num, num) \ | 851 V(CheckCids, A_B_C, reg, num, num) \ |
| 846 V(CheckCidsByRange, A_B_C, reg, num, num) \ | 852 V(CheckCidsByRange, A_B_C, reg, num, num) \ |
| 847 V(CheckStack, 0, ___, ___, ___) \ | 853 V(CheckStack, 0, ___, ___, ___) \ |
| 848 V(CheckStackAlwaysExit, 0, ___, ___, ___) \ | 854 V(CheckStackAlwaysExit, 0, ___, ___, ___) \ |
| 849 V(DebugStep, 0, ___, ___, ___) \ | 855 V(DebugStep, 0, ___, ___, ___) \ |
| 850 V(DebugBreak, A, num, ___, ___) \ | 856 V(DebugBreak, A, num, ___, ___) \ |
| 851 V(Deopt, A_D, num, num, ___) \ | 857 V(Deopt, A_D, num, num, ___) \ |
| 852 V(DeoptRewind, 0, ___, ___, ___) | 858 V(DeoptRewind, 0, ___, ___, ___) |
| 853 | 859 |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 987 | 993 |
| 988 // After a comparison, the condition NEXT_IS_TRUE means the following | 994 // After a comparison, the condition NEXT_IS_TRUE means the following |
| 989 // instruction is executed if the comparison is true and skipped over overwise. | 995 // instruction is executed if the comparison is true and skipped over overwise. |
| 990 // Condition NEXT_IS_FALSE means the following instruction is executed if the | 996 // Condition NEXT_IS_FALSE means the following instruction is executed if the |
| 991 // comparison is false and skipped over otherwise. | 997 // comparison is false and skipped over otherwise. |
| 992 enum Condition { NEXT_IS_TRUE, NEXT_IS_FALSE }; | 998 enum Condition { NEXT_IS_TRUE, NEXT_IS_FALSE }; |
| 993 | 999 |
| 994 } // namespace dart | 1000 } // namespace dart |
| 995 | 1001 |
| 996 #endif // RUNTIME_VM_CONSTANTS_DBC_H_ | 1002 #endif // RUNTIME_VM_CONSTANTS_DBC_H_ |
| OLD | NEW |