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 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 // Used to implement conditional jump: | 221 // Used to implement conditional jump: |
222 // | 222 // |
223 // IfNeStrictTOS | 223 // IfNeStrictTOS |
224 // Jump T ;; jump if not equal | 224 // Jump T ;; jump if not equal |
225 // | 225 // |
226 // - If<Cond>Null rA | 226 // - If<Cond>Null rA |
227 // | 227 // |
228 // Cond is Eq or Ne. Skips the next instruction unless the given condition | 228 // Cond is Eq or Ne. Skips the next instruction unless the given condition |
229 // holds. | 229 // holds. |
230 // | 230 // |
| 231 // - If<Cond> rA, rD |
| 232 // |
| 233 // Cond is Le, Lt, Ge, Gt, or unsigned variants ULe, ULt, UGe, UGt. |
| 234 // Skips the next instruction unless FP[rA] <Cond> FP[rD]. Assumes that |
| 235 // FP[rA] and FP[rD] are Smis. |
| 236 // |
231 // - CreateArrayTOS | 237 // - CreateArrayTOS |
232 // | 238 // |
233 // Allocate array of length SP[0] with type arguments SP[-1]. | 239 // Allocate array of length SP[0] with type arguments SP[-1]. |
234 // | 240 // |
235 // - Allocate D | 241 // - Allocate D |
236 // | 242 // |
237 // Allocate object of class PP[D] with no type arguments. | 243 // Allocate object of class PP[D] with no type arguments. |
238 // | 244 // |
239 // - AllocateT | 245 // - AllocateT |
240 // | 246 // |
241 // Allocate object of class SP[0] with type arguments SP[-1]. | 247 // Allocate object of class SP[0] with type arguments SP[-1]. |
242 // | 248 // |
243 // - StoreIndexedTOS | 249 // - StoreIndexedTOS |
244 // | 250 // |
245 // Store SP[0] into array SP[-2] at index SP[-1]. No typechecking is done. | 251 // Store SP[0] into array SP[-2] at index SP[-1]. No typechecking is done. |
246 // SP[-2] is assumed to be a RawArray, SP[-1] to be a smi. | 252 // SP[-2] is assumed to be a RawArray, SP[-1] to be a smi. |
247 // | 253 // |
248 // - StoreIndexed rA, rB, rC | 254 // - StoreIndexed rA, rB, rC |
249 // | 255 // |
250 // Store rC into array rA at index rB. No typechecking is done. | 256 // Store rC into array rA at index rB. No typechecking is done. |
251 // rA is assumed to be a RawArray, rB to be a smi. | 257 // rA is assumed to be a RawArray, rB to be a smi. |
252 // | 258 // |
| 259 // - LoadIndexed rA, rB, rC |
| 260 // |
| 261 // Loads from array FP[rB] at index FP[rC] into FP[rA]. No typechecking is |
| 262 // done. FP[rB] is assumed to be a RawArray, and to contain a Smi at FP[rC]. |
| 263 // |
253 // - StoreField rA, B, rC | 264 // - StoreField rA, B, rC |
254 // | 265 // |
255 // Store value FP[rC] into object FP[rA] at offset (in words) B. | 266 // Store value FP[rC] into object FP[rA] at offset (in words) B. |
256 // | 267 // |
257 // - StoreFieldTOS D | 268 // - StoreFieldTOS D |
258 // | 269 // |
259 // Store value SP[0] into object SP[-1] at offset (in words) D. | 270 // Store value SP[0] into object SP[-1] at offset (in words) D. |
260 // | 271 // |
261 // - LoadField rA, rB, C | 272 // - LoadField rA, rB, C |
262 // | 273 // |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 V(BitNot, A_D, reg, reg, ___) \ | 521 V(BitNot, A_D, reg, reg, ___) \ |
511 V(StoreStaticTOS, D, lit, ___, ___) \ | 522 V(StoreStaticTOS, D, lit, ___, ___) \ |
512 V(PushStatic, D, lit, ___, ___) \ | 523 V(PushStatic, D, lit, ___, ___) \ |
513 V(InitStaticTOS, 0, ___, ___, ___) \ | 524 V(InitStaticTOS, 0, ___, ___, ___) \ |
514 V(IfNeStrictTOS, 0, ___, ___, ___) \ | 525 V(IfNeStrictTOS, 0, ___, ___, ___) \ |
515 V(IfEqStrictTOS, 0, ___, ___, ___) \ | 526 V(IfEqStrictTOS, 0, ___, ___, ___) \ |
516 V(IfNeStrictNumTOS, 0, ___, ___, ___) \ | 527 V(IfNeStrictNumTOS, 0, ___, ___, ___) \ |
517 V(IfEqStrictNumTOS, 0, ___, ___, ___) \ | 528 V(IfEqStrictNumTOS, 0, ___, ___, ___) \ |
518 V(IfNeStrict, A_D, reg, reg, ___) \ | 529 V(IfNeStrict, A_D, reg, reg, ___) \ |
519 V(IfEqStrict, A_D, reg, reg, ___) \ | 530 V(IfEqStrict, A_D, reg, reg, ___) \ |
| 531 V(IfLe, A_D, reg, reg, ___) \ |
| 532 V(IfLt, A_D, reg, reg, ___) \ |
| 533 V(IfGe, A_D, reg, reg, ___) \ |
| 534 V(IfGt, A_D, reg, reg, ___) \ |
| 535 V(IfULe, A_D, reg, reg, ___) \ |
| 536 V(IfULt, A_D, reg, reg, ___) \ |
| 537 V(IfUGe, A_D, reg, reg, ___) \ |
| 538 V(IfUGt, A_D, reg, reg, ___) \ |
520 V(IfNeStrictNum, A_D, reg, reg, ___) \ | 539 V(IfNeStrictNum, A_D, reg, reg, ___) \ |
521 V(IfEqStrictNum, A_D, reg, reg, ___) \ | 540 V(IfEqStrictNum, A_D, reg, reg, ___) \ |
522 V(IfEqNull, A, reg, ___, ___) \ | 541 V(IfEqNull, A, reg, ___, ___) \ |
523 V(IfNeNull, A, reg, ___, ___) \ | 542 V(IfNeNull, A, reg, ___, ___) \ |
524 V(CreateArrayTOS, 0, ___, ___, ___) \ | 543 V(CreateArrayTOS, 0, ___, ___, ___) \ |
525 V(Allocate, D, lit, ___, ___) \ | 544 V(Allocate, D, lit, ___, ___) \ |
526 V(AllocateT, 0, ___, ___, ___) \ | 545 V(AllocateT, 0, ___, ___, ___) \ |
527 V(StoreIndexedTOS, 0, ___, ___, ___) \ | 546 V(StoreIndexedTOS, 0, ___, ___, ___) \ |
528 V(StoreIndexed, A_B_C, reg, reg, reg) \ | 547 V(StoreIndexed, A_B_C, reg, reg, reg) \ |
| 548 V(LoadIndexed, A_B_C, reg, reg, reg) \ |
529 V(StoreField, A_B_C, reg, num, reg) \ | 549 V(StoreField, A_B_C, reg, num, reg) \ |
530 V(StoreFieldTOS, D, num, ___, ___) \ | 550 V(StoreFieldTOS, D, num, ___, ___) \ |
531 V(LoadField, A_B_C, reg, reg, num) \ | 551 V(LoadField, A_B_C, reg, reg, num) \ |
532 V(LoadFieldTOS, D, num, ___, ___) \ | 552 V(LoadFieldTOS, D, num, ___, ___) \ |
533 V(BooleanNegateTOS, 0, ___, ___, ___) \ | 553 V(BooleanNegateTOS, 0, ___, ___, ___) \ |
534 V(BooleanNegate, A_D, reg, reg, ___) \ | 554 V(BooleanNegate, A_D, reg, reg, ___) \ |
535 V(Throw, A, num, ___, ___) \ | 555 V(Throw, A, num, ___, ___) \ |
536 V(Entry, A_B_C, num, num, num) \ | 556 V(Entry, A_B_C, num, num, num) \ |
537 V(EntryOptional, A_B_C, num, num, num) \ | 557 V(EntryOptional, A_B_C, num, num, num) \ |
538 V(EntryOptimized, A_D, num, num, ___) \ | 558 V(EntryOptimized, A_D, num, num, ___) \ |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
670 | 690 |
671 // After a comparison, the condition NEXT_IS_TRUE means the following | 691 // After a comparison, the condition NEXT_IS_TRUE means the following |
672 // instruction is executed if the comparision is true and skipped over overwise. | 692 // instruction is executed if the comparision is true and skipped over overwise. |
673 // Conidition NEXT_IS_FALSE means the following instruction is executed if the | 693 // Conidition NEXT_IS_FALSE means the following instruction is executed if the |
674 // comparison is false and skipped over otherwise. | 694 // comparison is false and skipped over otherwise. |
675 enum Condition { NEXT_IS_TRUE, NEXT_IS_FALSE }; | 695 enum Condition { NEXT_IS_TRUE, NEXT_IS_FALSE }; |
676 | 696 |
677 } // namespace dart | 697 } // namespace dart |
678 | 698 |
679 #endif // VM_CONSTANTS_DBC_H_ | 699 #endif // VM_CONSTANTS_DBC_H_ |
OLD | NEW |