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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 // | 79 // |
80 // | 80 // |
81 // INSTRUCTIONS | 81 // INSTRUCTIONS |
82 // | 82 // |
83 // - Trap | 83 // - Trap |
84 // | 84 // |
85 // Unreachable instruction. | 85 // Unreachable instruction. |
86 // | 86 // |
87 // - Nop D | 87 // - Nop D |
88 // | 88 // |
89 // This instuction does nothing. It may refer to an object in the constant | 89 // This instruction does nothing. It may refer to an object in the constant |
90 // pool that may be decoded by other instructions. | 90 // pool that may be decoded by other instructions. |
91 // | 91 // |
92 // - Compile | 92 // - Compile |
93 // | 93 // |
94 // Compile current function and start executing newly produced code | 94 // Compile current function and start executing newly produced code |
95 // (used to implement LazyCompileStub); | 95 // (used to implement LazyCompileStub); |
96 // | 96 // |
97 // - Intrinsic id | 97 // - Intrinsic id |
98 // | 98 // |
99 // Execute intrinsic with the given id. If intrinsic returns true then | 99 // Execute intrinsic with the given id. If intrinsic returns true then |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 // FP[rA] <- {min, max}(FP[rB], FP[rC]). Assumes that FP[rB], and FP[rC] are | 218 // FP[rA] <- {min, max}(FP[rB], FP[rC]). Assumes that FP[rB], and FP[rC] are |
219 // Smis. | 219 // Smis. |
220 // | 220 // |
221 // - Neg rA , rD | 221 // - Neg rA , rD |
222 // | 222 // |
223 // FP[rA] <- -FP[rD]. Assumes FP[rD] is a Smi. If there is no overflow the | 223 // FP[rA] <- -FP[rD]. Assumes FP[rD] is a Smi. If there is no overflow the |
224 // immediately following instruction is skipped. | 224 // immediately following instruction is skipped. |
225 // | 225 // |
226 // - DMin, DMax, DAdd, DSub, DMul, DDiv, DPow, DMod rA, rB, rC | 226 // - DMin, DMax, DAdd, DSub, DMul, DDiv, DPow, DMod rA, rB, rC |
227 // | 227 // |
228 // Arithmetic operaions on unboxed doubles. FP[rA] <- FP[rB] op FP[rC]. | 228 // Arithmetic operations on unboxed doubles. FP[rA] <- FP[rB] op FP[rC]. |
229 // | 229 // |
230 // - DNeg, DCos, DSin, DSqrt rA, rD | 230 // - DNeg, DCos, DSin, DSqrt rA, rD |
231 // | 231 // |
232 // FP[rA] <- op(FP[rD]). Assumes FP[rD] is an unboxed double. | 232 // FP[rA] <- op(FP[rD]). Assumes FP[rD] is an unboxed double. |
233 // | 233 // |
234 // - DTruncate, DFloor, DCeil rA, rD | 234 // - DTruncate, DFloor, DCeil rA, rD |
235 // | 235 // |
236 // Applies trunc(), floor(), or ceil() to the unboxed double in FP[rD], and | 236 // Applies trunc(), floor(), or ceil() to the unboxed double in FP[rD], and |
237 // stores the result in FP[rA]. | 237 // stores the result in FP[rA]. |
238 // | 238 // |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 // - If<Cond>Null rA | 327 // - If<Cond>Null rA |
328 // | 328 // |
329 // Cond is Eq or Ne. Skips the next instruction unless the given condition | 329 // Cond is Eq or Ne. Skips the next instruction unless the given condition |
330 // holds. | 330 // holds. |
331 // | 331 // |
332 // - If<Cond> rA, rD | 332 // - If<Cond> rA, rD |
333 // | 333 // |
334 // Cond is Le, Lt, Ge, Gt, unsigned variants ULe, ULt, UGe, UGt, and | 334 // Cond is Le, Lt, Ge, Gt, unsigned variants ULe, ULt, UGe, UGt, and |
335 // unboxed double variants DEq, DNe, DLe, DLt, DGe, DGt. | 335 // unboxed double variants DEq, DNe, DLe, DLt, DGe, DGt. |
336 // Skips the next instruction unless FP[rA] <Cond> FP[rD]. Assumes that | 336 // Skips the next instruction unless FP[rA] <Cond> FP[rD]. Assumes that |
337 // FP[rA] and FP[rD] are Smis or unboxed doubles as inidcated by <Cond>. | 337 // FP[rA] and FP[rD] are Smis or unboxed doubles as indicated by <Cond>. |
338 // | 338 // |
339 // - CreateArrayTOS | 339 // - CreateArrayTOS |
340 // | 340 // |
341 // Allocate array of length SP[0] with type arguments SP[-1]. | 341 // Allocate array of length SP[0] with type arguments SP[-1]. |
342 // | 342 // |
343 // - CreateArrayOpt rA, rB, rC | 343 // - CreateArrayOpt rA, rB, rC |
344 // | 344 // |
345 // Try to allocate a new array where FP[rB] is the length, and FP[rC] is the | 345 // Try to allocate a new array where FP[rB] is the length, and FP[rC] is the |
346 // type. If allocation is successful, the result is stored in FP[rA], and | 346 // type. If allocation is successful, the result is stored in FP[rA], and |
347 // the next four instructions, which should be the | 347 // the next four instructions, which should be the |
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
994 | 994 |
995 // After a comparison, the condition NEXT_IS_TRUE means the following | 995 // After a comparison, the condition NEXT_IS_TRUE means the following |
996 // 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. |
997 // 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 |
998 // comparison is false and skipped over otherwise. | 998 // comparison is false and skipped over otherwise. |
999 enum Condition { NEXT_IS_TRUE, NEXT_IS_FALSE, INVALID_CONDITION }; | 999 enum Condition { NEXT_IS_TRUE, NEXT_IS_FALSE, INVALID_CONDITION }; |
1000 | 1000 |
1001 } // namespace dart | 1001 } // namespace dart |
1002 | 1002 |
1003 #endif // RUNTIME_VM_CONSTANTS_DBC_H_ | 1003 #endif // RUNTIME_VM_CONSTANTS_DBC_H_ |
OLD | NEW |