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, D |
| 594 // |
| 595 // Next instruction is a Nop with S, the size of the class-id range. |
| 596 // If the class id in FP[rA] is between the D D + S, then skip the |
| 597 // following instruction. |
| 598 // |
593 // - CheckBitTest rA, D | 599 // - CheckBitTest rA, D |
594 // | 600 // |
595 // Skips the next 3 instructions if the object at FP[rA] is a valid class for | 601 // 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 | 602 // 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 | 603 // 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. | 604 // FP[rA] is a Smi. Skips 2 instructions otherwise. |
599 // | 605 // |
600 // - CheckCids rA, rB, rC | 606 // - CheckCids rA, rB, rC |
601 // | 607 // |
602 // Skips rC + 1 instructions if the object at FP[rA] is a Smi and | 608 // 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, ___) \ | 840 V(InstantiateTypeArgumentsTOS, A_D, num, lit, ___) \ |
835 V(InstanceOf, 0, ___, ___, ___) \ | 841 V(InstanceOf, 0, ___, ___, ___) \ |
836 V(BadTypeError, 0, ___, ___, ___) \ | 842 V(BadTypeError, 0, ___, ___, ___) \ |
837 V(AssertAssignable, A_D, num, lit, ___) \ | 843 V(AssertAssignable, A_D, num, lit, ___) \ |
838 V(AssertBoolean, A, num, ___, ___) \ | 844 V(AssertBoolean, A, num, ___, ___) \ |
839 V(TestSmi, A_D, reg, reg, ___) \ | 845 V(TestSmi, A_D, reg, reg, ___) \ |
840 V(TestCids, A_D, reg, num, ___) \ | 846 V(TestCids, A_D, reg, num, ___) \ |
841 V(CheckSmi, A, reg, ___, ___) \ | 847 V(CheckSmi, A, reg, ___, ___) \ |
842 V(CheckEitherNonSmi, A_D, reg, reg, ___) \ | 848 V(CheckEitherNonSmi, A_D, reg, reg, ___) \ |
843 V(CheckClassId, A_D, reg, num, ___) \ | 849 V(CheckClassId, A_D, reg, num, ___) \ |
| 850 V(CheckClassIdRange, A_D, reg, num, ___) \ |
844 V(CheckBitTest, A_D, reg, num, ___) \ | 851 V(CheckBitTest, A_D, reg, num, ___) \ |
845 V(CheckCids, A_B_C, reg, num, num) \ | 852 V(CheckCids, A_B_C, reg, num, num) \ |
846 V(CheckCidsByRange, A_B_C, reg, num, num) \ | 853 V(CheckCidsByRange, A_B_C, reg, num, num) \ |
847 V(CheckStack, 0, ___, ___, ___) \ | 854 V(CheckStack, 0, ___, ___, ___) \ |
848 V(CheckStackAlwaysExit, 0, ___, ___, ___) \ | 855 V(CheckStackAlwaysExit, 0, ___, ___, ___) \ |
849 V(DebugStep, 0, ___, ___, ___) \ | 856 V(DebugStep, 0, ___, ___, ___) \ |
850 V(DebugBreak, A, num, ___, ___) \ | 857 V(DebugBreak, A, num, ___, ___) \ |
851 V(Deopt, A_D, num, num, ___) \ | 858 V(Deopt, A_D, num, num, ___) \ |
852 V(DeoptRewind, 0, ___, ___, ___) | 859 V(DeoptRewind, 0, ___, ___, ___) |
853 | 860 |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
987 | 994 |
988 // After a comparison, the condition NEXT_IS_TRUE means the following | 995 // After a comparison, the condition NEXT_IS_TRUE means the following |
989 // instruction is executed if the comparison is true and skipped over overwise. | 996 // 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 | 997 // Condition NEXT_IS_FALSE means the following instruction is executed if the |
991 // comparison is false and skipped over otherwise. | 998 // comparison is false and skipped over otherwise. |
992 enum Condition { NEXT_IS_TRUE, NEXT_IS_FALSE }; | 999 enum Condition { NEXT_IS_TRUE, NEXT_IS_FALSE }; |
993 | 1000 |
994 } // namespace dart | 1001 } // namespace dart |
995 | 1002 |
996 #endif // RUNTIME_VM_CONSTANTS_DBC_H_ | 1003 #endif // RUNTIME_VM_CONSTANTS_DBC_H_ |
OLD | NEW |