Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1474)

Unified Diff: runtime/vm/constants_dbc.h

Issue 2120703002: DBC: Enables unboxed doubles (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Rename BoxDouble -> WriteIntoDouble Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/assembler_dbc_test.cc ('k') | runtime/vm/deopt_instructions.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/constants_dbc.h
diff --git a/runtime/vm/constants_dbc.h b/runtime/vm/constants_dbc.h
index a15058d4e207bc23bd26886e6b6ea43c00f0c118..dddbcf9948887cbe6e50f8b538e02f1370dba0dc 100644
--- a/runtime/vm/constants_dbc.h
+++ b/runtime/vm/constants_dbc.h
@@ -183,11 +183,19 @@ namespace dart {
// the immediately following instruction is skipped. These instructions
// expect their operands to be Smis, but don't check that they are.
//
+// - DAdd, DSub, DMul, DDiv rA, rB, rC
+//
+// Arithmetic operaions on unboxed doubles. FP[rA] <- FP[rB] op FP[rC].
+//
// - Neg rA , rD
//
// FP[rA] <- -FP[rD]. Assumes FP[rD] is a Smi. If there is no overflow the
// immediately following instruction is skipped.
//
+// - DNeg rA, rD
+//
+// FP[rA] <- -FP[rD]. Assumes FP[rD] is an unboxed double.
+//
// - BitOr, BitAnd, BitXor rA, rB, rC
//
// FP[rA] <- FP[rB] op FP[rC]. These instructions expect their operands to be
@@ -197,6 +205,24 @@ namespace dart {
//
// FP[rA] <- ~FP[rD]. As above, assumes FP[rD] is a Smi.
//
+// - WriteIntoDouble rA, rD
+//
+// Box the double in FP[rD] with the result in FP[rA].
+//
+// - UnboxDouble rA, rD
+//
+// Unbox the double in FP[rD] into FP[rA]. Assumes FP[rD] is a double.
+//
+// - CheckedUnboxDouble rA, rD
+//
+// Unboxes FP[rD] into FP[rA] and skips the following instruction unless
+// FP[rD] is not a double or a Smi. When FP[rD] is a Smi, converts it to a
+// double.
+//
+// - SmiToDouble rA, rD
+//
+// Convert the Smi in FP[rD] to an unboxed double in FP[rA].
+//
// - StoreStaticT`OS D
//
// Stores TOS into the static field PP[D].
@@ -230,9 +256,10 @@ namespace dart {
//
// - If<Cond> rA, rD
//
-// Cond is Le, Lt, Ge, Gt, or unsigned variants ULe, ULt, UGe, UGt.
+// Cond is Le, Lt, Ge, Gt, unsigned variants ULe, ULt, UGe, UGt, and
+// unboxed double variants DEq, DNe, DLe, DLt, DGe, DGt.
// Skips the next instruction unless FP[rA] <Cond> FP[rD]. Assumes that
-// FP[rA] and FP[rD] are Smis.
+// FP[rA] and FP[rD] are Smis or unboxed doubles as inidcated by <Cond>.
//
// - CreateArrayTOS
//
@@ -398,9 +425,13 @@ namespace dart {
//
// If FP[rA] is a Smi, then skip the next instruction.
//
+// - CheckEitherNonSmi rA, rD
+//
+// If either FP[rA] or FP[rD] is not a Smi, then skip the next instruction.
+//
// - CheckClassId rA, D
//
-// If the object at FP[rA]'s class id matches the class id D, then skip the
+// If the class id in FP[rA] matches the class id D, then skip the
// following instruction.
//
// - CheckDenseSwitch rA, D
@@ -526,6 +557,15 @@ namespace dart {
V(BitAnd, A_B_C, reg, reg, reg) \
V(BitXor, A_B_C, reg, reg, reg) \
V(BitNot, A_D, reg, reg, ___) \
+ V(WriteIntoDouble, A_D, reg, reg, ___) \
+ V(UnboxDouble, A_D, reg, reg, ___) \
+ V(CheckedUnboxDouble, A_D, reg, reg, ___) \
+ V(SmiToDouble, A_D, reg, reg, ___) \
+ V(DAdd, A_B_C, reg, reg, reg) \
+ V(DSub, A_B_C, reg, reg, reg) \
+ V(DMul, A_B_C, reg, reg, reg) \
+ V(DDiv, A_B_C, reg, reg, reg) \
+ V(DNeg, A_D, reg, reg, ___) \
V(StoreStaticTOS, D, lit, ___, ___) \
V(PushStatic, D, lit, ___, ___) \
V(InitStaticTOS, 0, ___, ___, ___) \
@@ -543,6 +583,12 @@ namespace dart {
V(IfULt, A_D, reg, reg, ___) \
V(IfUGe, A_D, reg, reg, ___) \
V(IfUGt, A_D, reg, reg, ___) \
+ V(IfDNe, A_D, reg, reg, ___) \
+ V(IfDEq, A_D, reg, reg, ___) \
+ V(IfDLe, A_D, reg, reg, ___) \
+ V(IfDLt, A_D, reg, reg, ___) \
+ V(IfDGe, A_D, reg, reg, ___) \
+ V(IfDGt, A_D, reg, reg, ___) \
V(IfNeStrictNum, A_D, reg, reg, ___) \
V(IfEqStrictNum, A_D, reg, reg, ___) \
V(IfEqNull, A, reg, ___, ___) \
@@ -576,6 +622,7 @@ namespace dart {
V(TestSmi, A_D, reg, reg, ___) \
V(TestCids, A_D, reg, num, ___) \
V(CheckSmi, A, reg, ___, ___) \
+ V(CheckEitherNonSmi, A_D, reg, reg, ___) \
V(CheckClassId, A_D, reg, num, ___) \
V(CheckDenseSwitch, A_D, reg, num, ___) \
V(CheckCids, A_B_C, reg, num, ___) \
« no previous file with comments | « runtime/vm/assembler_dbc_test.cc ('k') | runtime/vm/deopt_instructions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698