| 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 VM_CONSTANTS_DBC_H_ | 5 #ifndef VM_CONSTANTS_DBC_H_ |
| 6 #define VM_CONSTANTS_DBC_H_ | 6 #define 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 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 // - StoreIndexedTOS | 306 // - StoreIndexedTOS |
| 307 // | 307 // |
| 308 // Store SP[0] into array SP[-2] at index SP[-1]. No typechecking is done. | 308 // Store SP[0] into array SP[-2] at index SP[-1]. No typechecking is done. |
| 309 // SP[-2] is assumed to be a RawArray, SP[-1] to be a smi. | 309 // SP[-2] is assumed to be a RawArray, SP[-1] to be a smi. |
| 310 // | 310 // |
| 311 // - StoreIndexed rA, rB, rC | 311 // - StoreIndexed rA, rB, rC |
| 312 // | 312 // |
| 313 // Store FP[rC] into array FP[rA] at index FP[rB]. No typechecking is done. | 313 // Store FP[rC] into array FP[rA] at index FP[rB]. No typechecking is done. |
| 314 // FP[rA] is assumed to be a RawArray, FP[rB] to be a smi. | 314 // FP[rA] is assumed to be a RawArray, FP[rB] to be a smi. |
| 315 // | 315 // |
| 316 // - StoreFloat64Indexed rA, rB, rC | 316 // - StoreIndexed{Float64, Uint8} rA, rB, rC |
| 317 // | 317 // |
| 318 // Store the unboxed double in FP[rC] into the typed data array at FP[rA] | 318 // Store the unboxed double or tagged Smi in FP[rC] into the typed data array |
| 319 // at index FP[rB]. | 319 // at FP[rA] at index FP[rB]. |
| 320 // |
| 321 // - StoreIndexedExternalUint8 rA, rB, rC |
| 322 // |
| 323 // Similar to StoreIndexedUint8 but FP[rA] is an external typed data aray. |
| 320 // | 324 // |
| 321 // - LoadIndexed rA, rB, rC | 325 // - LoadIndexed rA, rB, rC |
| 322 // | 326 // |
| 323 // Loads from array FP[rB] at index FP[rC] into FP[rA]. No typechecking is | 327 // Loads from array FP[rB] at index FP[rC] into FP[rA]. No typechecking is |
| 324 // done. FP[rB] is assumed to be a RawArray, and to contain a Smi at FP[rC]. | 328 // done. FP[rB] is assumed to be a RawArray, and to contain a Smi at FP[rC]. |
| 325 // | 329 // |
| 326 // - Load{Float64, OneByteString, TwoByteString}Indexed rA, rB, rC | 330 // - LoadIndexed{Float64, OneByteString, TwoByteString, Uint8, Int8} rA, rB, rC |
| 327 // | 331 // |
| 328 // Loads from typed data array FP[rB] at index FP[rC] into an unboxed double, | 332 // Loads from typed data array FP[rB] at index FP[rC] into an unboxed double, |
| 329 // or tagged Smi in FP[rA] as indicated by the type in the name. | 333 // or tagged Smi in FP[rA] as indicated by the type in the name. |
| 330 // | 334 // |
| 335 // - LoadIndexedExternal{Int8, Uint8} rA, rB, rC |
| 336 // |
| 337 // Loads from the external typed data array FP[rB] at index FP[rC] into |
| 338 // FP[rA]. No typechecking is done. |
| 339 // |
| 331 // - StoreField rA, B, rC | 340 // - StoreField rA, B, rC |
| 332 // | 341 // |
| 333 // Store value FP[rC] into object FP[rA] at offset (in words) B. | 342 // Store value FP[rC] into object FP[rA] at offset (in words) B. |
| 334 // | 343 // |
| 335 // - StoreFieldTOS D | 344 // - StoreFieldTOS D |
| 336 // | 345 // |
| 337 // Store value SP[0] into object SP[-1] at offset (in words) D. | 346 // Store value SP[0] into object SP[-1] at offset (in words) D. |
| 338 // | 347 // |
| 339 // - LoadField rA, rB, C | 348 // - LoadField rA, rB, C |
| 340 // | 349 // |
| 341 // Load value at offset (in words) C from object FP[rB] into FP[rA]. | 350 // Load value at offset (in words) C from object FP[rB] into FP[rA]. |
| 342 // | 351 // |
| 352 // - LoadUntagged rA, rB, C |
| 353 // |
| 354 // Like LoadField, but assumes that FP[rB] is untagged. |
| 355 // |
| 343 // - LoadFieldTOS D | 356 // - LoadFieldTOS D |
| 344 // | 357 // |
| 345 // Push value at offset (in words) D from object SP[0]. | 358 // Push value at offset (in words) D from object SP[0]. |
| 346 // | 359 // |
| 347 // - BooleanNegateTOS | 360 // - BooleanNegateTOS |
| 348 // | 361 // |
| 349 // SP[0] = !SP[0] | 362 // SP[0] = !SP[0] |
| 350 // | 363 // |
| 351 // - BooleanNegate rA, rD | 364 // - BooleanNegate rA, rD |
| 352 // | 365 // |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 644 V(IfDGt, A_D, reg, reg, ___) \ | 657 V(IfDGt, A_D, reg, reg, ___) \ |
| 645 V(IfNeStrictNum, A_D, reg, reg, ___) \ | 658 V(IfNeStrictNum, A_D, reg, reg, ___) \ |
| 646 V(IfEqStrictNum, A_D, reg, reg, ___) \ | 659 V(IfEqStrictNum, A_D, reg, reg, ___) \ |
| 647 V(IfEqNull, A, reg, ___, ___) \ | 660 V(IfEqNull, A, reg, ___, ___) \ |
| 648 V(IfNeNull, A, reg, ___, ___) \ | 661 V(IfNeNull, A, reg, ___, ___) \ |
| 649 V(CreateArrayTOS, 0, ___, ___, ___) \ | 662 V(CreateArrayTOS, 0, ___, ___, ___) \ |
| 650 V(Allocate, D, lit, ___, ___) \ | 663 V(Allocate, D, lit, ___, ___) \ |
| 651 V(AllocateT, 0, ___, ___, ___) \ | 664 V(AllocateT, 0, ___, ___, ___) \ |
| 652 V(StoreIndexedTOS, 0, ___, ___, ___) \ | 665 V(StoreIndexedTOS, 0, ___, ___, ___) \ |
| 653 V(StoreIndexed, A_B_C, reg, reg, reg) \ | 666 V(StoreIndexed, A_B_C, reg, reg, reg) \ |
| 654 V(StoreFloat64Indexed, A_B_C, reg, reg, reg) \ | 667 V(StoreIndexedUint8, A_B_C, reg, reg, reg) \ |
| 668 V(StoreIndexedExternalUint8, A_B_C, reg, reg, reg) \ |
| 669 V(StoreIndexedFloat64, A_B_C, reg, reg, reg) \ |
| 655 V(LoadIndexed, A_B_C, reg, reg, reg) \ | 670 V(LoadIndexed, A_B_C, reg, reg, reg) \ |
| 656 V(LoadFloat64Indexed, A_B_C, reg, reg, reg) \ | 671 V(LoadIndexedUint8, A_B_C, reg, reg, reg) \ |
| 657 V(LoadOneByteStringIndexed, A_B_C, reg, reg, reg) \ | 672 V(LoadIndexedInt8, A_B_C, reg, reg, reg) \ |
| 658 V(LoadTwoByteStringIndexed, A_B_C, reg, reg, reg) \ | 673 V(LoadIndexedExternalUint8, A_B_C, reg, reg, reg) \ |
| 674 V(LoadIndexedExternalInt8, A_B_C, reg, reg, reg) \ |
| 675 V(LoadIndexedFloat64, A_B_C, reg, reg, reg) \ |
| 676 V(LoadIndexedOneByteString, A_B_C, reg, reg, reg) \ |
| 677 V(LoadIndexedTwoByteString, A_B_C, reg, reg, reg) \ |
| 659 V(StoreField, A_B_C, reg, num, reg) \ | 678 V(StoreField, A_B_C, reg, num, reg) \ |
| 660 V(StoreFieldTOS, D, num, ___, ___) \ | 679 V(StoreFieldTOS, D, num, ___, ___) \ |
| 661 V(LoadField, A_B_C, reg, reg, num) \ | 680 V(LoadField, A_B_C, reg, reg, num) \ |
| 681 V(LoadUntagged, A_B_C, reg, reg, num) \ |
| 662 V(LoadFieldTOS, D, num, ___, ___) \ | 682 V(LoadFieldTOS, D, num, ___, ___) \ |
| 663 V(BooleanNegateTOS, 0, ___, ___, ___) \ | 683 V(BooleanNegateTOS, 0, ___, ___, ___) \ |
| 664 V(BooleanNegate, A_D, reg, reg, ___) \ | 684 V(BooleanNegate, A_D, reg, reg, ___) \ |
| 665 V(Throw, A, num, ___, ___) \ | 685 V(Throw, A, num, ___, ___) \ |
| 666 V(Entry, A_B_C, num, num, num) \ | 686 V(Entry, A_B_C, num, num, num) \ |
| 667 V(EntryOptional, A_B_C, num, num, num) \ | 687 V(EntryOptional, A_B_C, num, num, num) \ |
| 668 V(EntryOptimized, A_D, num, num, ___) \ | 688 V(EntryOptimized, A_D, num, num, ___) \ |
| 669 V(Frame, D, num, ___, ___) \ | 689 V(Frame, D, num, ___, ___) \ |
| 670 V(SetFrame, A, num, ___, num) \ | 690 V(SetFrame, A, num, ___, num) \ |
| 671 V(AllocateContext, D, num, ___, ___) \ | 691 V(AllocateContext, D, num, ___, ___) \ |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 824 | 844 |
| 825 // After a comparison, the condition NEXT_IS_TRUE means the following | 845 // After a comparison, the condition NEXT_IS_TRUE means the following |
| 826 // instruction is executed if the comparision is true and skipped over overwise. | 846 // instruction is executed if the comparision is true and skipped over overwise. |
| 827 // Conidition NEXT_IS_FALSE means the following instruction is executed if the | 847 // Conidition NEXT_IS_FALSE means the following instruction is executed if the |
| 828 // comparison is false and skipped over otherwise. | 848 // comparison is false and skipped over otherwise. |
| 829 enum Condition { NEXT_IS_TRUE, NEXT_IS_FALSE }; | 849 enum Condition { NEXT_IS_TRUE, NEXT_IS_FALSE }; |
| 830 | 850 |
| 831 } // namespace dart | 851 } // namespace dart |
| 832 | 852 |
| 833 #endif // VM_CONSTANTS_DBC_H_ | 853 #endif // VM_CONSTANTS_DBC_H_ |
| OLD | NEW |