| 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, ___) \
 | 
| 
 |