Implemented a new scheduler and FP register allocator.

Improved performance by 50% over existing JIT for some FP benchmarks.
diff --git a/vm/compiler/codegen/arm/Assemble.c b/vm/compiler/codegen/arm/Assemble.c
index 4d7dadc..6147fd6 100644
--- a/vm/compiler/codegen/arm/Assemble.c
+++ b/vm/compiler/codegen/arm/Assemble.c
@@ -56,7 +56,6 @@
  * [f]ormats:
  *     h -> 4-digit hex
  *     d -> decimal
- *     D -> decimal+8 (used to convert 3-bit regnum field to high reg)
  *     E -> decimal*4
  *     F -> decimal*2
  *     c -> branch condition (beq, bne, etc.)
@@ -89,7 +88,7 @@
                  "adds", "r!0d, r!1d, #!2d", 1),
     ENCODING_MAP(THUMB_ADD_RI8,       0x3000,
                  BITBLT, 10, 8, BITBLT, 7, 0, UNUSED, -1, -1, UNUSED, -1, -1,
-                 IS_BINARY_OP | REG_DEF0 | REG_USE0 | SETS_CCODES,
+                 IS_BINARY_OP | REG_DEF0_USE0 | SETS_CCODES,
                  "adds", "r!0d, r!0d, #!1d", 1),
     ENCODING_MAP(THUMB_ADD_RRR,       0x1800,
                  BITBLT, 2, 0, BITBLT, 5, 3, BITBLT, 8, 6, UNUSED, -1, -1,
@@ -149,23 +148,23 @@
                  "bkpt", "!0d", 1),
     ENCODING_MAP(THUMB_BLX_1,         0xf000,
                  BITBLT, 10, 0, UNUSED, -1, -1, UNUSED, -1, -1, UNUSED, -1, -1,
-                 IS_BINARY_OP | IS_BRANCH,
+                 IS_BINARY_OP | IS_BRANCH | REG_DEF_LR,
                  "blx_1", "!0u", 1),
     ENCODING_MAP(THUMB_BLX_2,         0xe800,
                  BITBLT, 10, 0, UNUSED, -1, -1, UNUSED, -1, -1, UNUSED, -1, -1,
-                 IS_BINARY_OP | IS_BRANCH,
+                 IS_BINARY_OP | IS_BRANCH | REG_DEF_LR,
                  "blx_2", "!0v", 1),
     ENCODING_MAP(THUMB_BL_1,          0xf000,
                  BITBLT, 10, 0, UNUSED, -1, -1, UNUSED, -1, -1, UNUSED, -1, -1,
-                 IS_UNARY_OP | IS_BRANCH,
+                 IS_UNARY_OP | IS_BRANCH | REG_DEF_LR,
                  "bl_1", "!0u", 1),
     ENCODING_MAP(THUMB_BL_2,          0xf800,
                  BITBLT, 10, 0, UNUSED, -1, -1, UNUSED, -1, -1, UNUSED, -1, -1,
-                 IS_UNARY_OP | IS_BRANCH,
+                 IS_UNARY_OP | IS_BRANCH | REG_DEF_LR,
                  "bl_2", "!0v", 1),
     ENCODING_MAP(THUMB_BLX_R,         0x4780,
                  BITBLT, 6, 3, UNUSED, -1, -1, UNUSED, -1, -1, UNUSED, -1, -1,
-                 IS_UNARY_OP | IS_BRANCH,
+                 IS_UNARY_OP | REG_USE0 | IS_BRANCH | REG_DEF_LR,
                  "blx", "r!0d", 1),
     ENCODING_MAP(THUMB_BX,            0x4700,
                  BITBLT, 6, 3, UNUSED, -1, -1, UNUSED, -1, -1, UNUSED, -1, -1,
@@ -186,22 +185,22 @@
     ENCODING_MAP(THUMB_CMP_LH,        0x4540,
                  BITBLT, 2, 0, BITBLT, 5, 3, UNUSED, -1, -1, UNUSED, -1, -1,
                  IS_BINARY_OP | REG_USE01 | SETS_CCODES,
-                 "cmp", "r!0d, r!1D", 1),
+                 "cmp", "r!0d, r!1d", 1),
     ENCODING_MAP(THUMB_CMP_HL,        0x4580,
                  BITBLT, 2, 0, BITBLT, 5, 3, UNUSED, -1, -1, UNUSED, -1, -1,
                  IS_BINARY_OP | REG_USE01 | SETS_CCODES,
-                 "cmp", "r!0D, r!1d", 1),
+                 "cmp", "r!0d, r!1d", 1),
     ENCODING_MAP(THUMB_CMP_HH,        0x45c0,
                  BITBLT, 2, 0, BITBLT, 5, 3, UNUSED, -1, -1, UNUSED, -1, -1,
                  IS_BINARY_OP | REG_USE01 | SETS_CCODES,
-                 "cmp", "r!0D, r!1D", 1),
+                 "cmp", "r!0d, r!1d", 1),
     ENCODING_MAP(THUMB_EOR_RR,        0x4040,
                  BITBLT, 2, 0, BITBLT, 5, 3, UNUSED, -1, -1, UNUSED, -1, -1,
                  IS_BINARY_OP | REG_DEF0_USE01 | SETS_CCODES,
                  "eors", "r!0d, r!1d", 1),
     ENCODING_MAP(THUMB_LDMIA,         0xc800,
                  BITBLT, 10, 8, BITBLT, 7, 0, UNUSED, -1, -1, UNUSED, -1, -1,
-                 IS_BINARY_OP | REG_DEF0 | REG_USE0 | REG_DEF_LIST1,
+                 IS_BINARY_OP | REG_DEF0_USE0 | REG_DEF_LIST1,
                  "ldmia", "r!0d!!, <!1R>", 1),
     ENCODING_MAP(THUMB_LDR_RRI5,      0x6800,
                  BITBLT, 2, 0, BITBLT, 5, 3, BITBLT, 10, 6, UNUSED, -1, -1,
@@ -270,15 +269,15 @@
     ENCODING_MAP(THUMB_MOV_RR_H2H,    0x46c0,
                  BITBLT, 2, 0, BITBLT, 5, 3, UNUSED, -1, -1, UNUSED, -1, -1,
                  IS_BINARY_OP | REG_DEF0_USE1,
-                 "mov", "r!0D, r!1D", 1),
+                 "mov", "r!0d, r!1d", 1),
     ENCODING_MAP(THUMB_MOV_RR_H2L,    0x4640,
                  BITBLT, 2, 0, BITBLT, 5, 3, UNUSED, -1, -1, UNUSED, -1, -1,
                  IS_BINARY_OP | REG_DEF0_USE1,
-                 "mov", "r!0d, r!1D", 1),
+                 "mov", "r!0d, r!1d", 1),
     ENCODING_MAP(THUMB_MOV_RR_L2H,    0x4680,
                  BITBLT, 2, 0, BITBLT, 5, 3, UNUSED, -1, -1, UNUSED, -1, -1,
                  IS_BINARY_OP | REG_DEF0_USE1,
-                 "mov", "r!0D, r!1d", 1),
+                 "mov", "r!0d, r!1d", 1),
     ENCODING_MAP(THUMB_MUL,           0x4340,
                  BITBLT, 2, 0, BITBLT, 5, 3, UNUSED, -1, -1, UNUSED, -1, -1,
                  IS_BINARY_OP | REG_DEF0_USE01 | SETS_CCODES,
@@ -349,7 +348,7 @@
                  "subs", "r!0d, r!1d, #!2d]", 1),
     ENCODING_MAP(THUMB_SUB_RI8,       0x3800,
                  BITBLT, 10, 8, BITBLT, 7, 0, UNUSED, -1, -1, UNUSED, -1, -1,
-                 IS_BINARY_OP | REG_DEF0 | REG_USE0 | SETS_CCODES,
+                 IS_BINARY_OP | REG_DEF0_USE0 | SETS_CCODES,
                  "subs", "r!0d, #!1d", 1),
     ENCODING_MAP(THUMB_SUB_RRR,       0x1a00,
                  BITBLT, 2, 0, BITBLT, 5, 3, BITBLT, 8, 6, UNUSED, -1, -1,
@@ -471,13 +470,13 @@
                  BITBLT, 15, 12, BITBLT, 19, 16, BITBLT, 8, 0, UNUSED, -1, -1,
                  IS_TERTIARY_OP | REG_DEF0_USE1,
                  "ldr", "r!0d,[r!1d, #-!2d]", 2),
-    ENCODING_MAP(THUMB2_CBNZ,       0xb900,
+    ENCODING_MAP(THUMB2_CBNZ,       0xb900, /* Note: does not affect flags */
                  BITBLT, 2, 0, IMM6, -1, -1, UNUSED, -1, -1, UNUSED, -1, -1,
-                 IS_BINARY_OP,  /* Note: does not affect flags */
+                 IS_BINARY_OP | REG_USE0 | IS_BRANCH,
                  "cbnz", "r!0d,!1t", 1),
-    ENCODING_MAP(THUMB2_CBZ,       0xb100,
+    ENCODING_MAP(THUMB2_CBZ,       0xb100, /* Note: does not affect flags */
                  BITBLT, 2, 0, IMM6, -1, -1, UNUSED, -1, -1, UNUSED, -1, -1,
-                 IS_BINARY_OP, /* Note: does not affect flags */
+                 IS_BINARY_OP | REG_USE0 | IS_BRANCH,
                  "cbz", "r!0d,!1t", 1),
     ENCODING_MAP(THUMB2_ADD_RRI12,       0xf2000000,
                  BITBLT, 11, 8, BITBLT, 19, 16, IMM12, -1, -1, UNUSED, -1, -1,
@@ -497,11 +496,11 @@
                  "vmov.f64 ", " !0S, !1S", 2),
     ENCODING_MAP(THUMB2_LDMIA,         0xe8900000,
                  BITBLT, 19, 16, BITBLT, 15, 0, UNUSED, -1, -1, UNUSED, -1, -1,
-                 IS_BINARY_OP | REG_DEF0 | REG_USE0 | REG_DEF_LIST1,
+                 IS_BINARY_OP | REG_DEF0_USE0 | REG_DEF_LIST1,
                  "ldmia", "r!0d!!, <!1R>", 2),
     ENCODING_MAP(THUMB2_STMIA,         0xe8800000,
                  BITBLT, 19, 16, BITBLT, 15, 0, UNUSED, -1, -1, UNUSED, -1, -1,
-                 IS_BINARY_OP | REG_DEF0 | REG_USE0 | REG_USE_LIST1,
+                 IS_BINARY_OP | REG_DEF0_USE0 | REG_USE_LIST1,
                  "stmia", "r!0d!!, <!1R>", 2),
     ENCODING_MAP(THUMB2_ADD_RRR,  0xeb100000, /* setflags encoding */
                  BITBLT, 11, 8, BITBLT, 19, 16, BITBLT, 3, 0, SHIFT, -1, -1,
@@ -758,7 +757,7 @@
                  "fmsr", "!0s, r!1d", 2),
     ENCODING_MAP(THUMB2_FMRRD,       0xec500b10,
                  BITBLT, 15, 12, BITBLT, 19, 16, DFP, 5, 0, UNUSED, -1, -1,
-                 IS_TERTIARY_OP | REG_DEF0 | REG_DEF1 | REG_USE2,
+                 IS_TERTIARY_OP | REG_DEF01_USE2,
                  "fmrrd", "r!0d, r!1d, !2S", 2),
     ENCODING_MAP(THUMB2_FMDRR,       0xec400b10,
                  DFP, 5, 0, BITBLT, 15, 12, BITBLT, 19, 16, UNUSED, -1, -1,
@@ -766,7 +765,6 @@
                  "fmdrr", "!0S, r!1d, r!2d", 2),
 };
 
-
 /*
  * The fake NOP of moving r0 to r0 actually will incur data stalls if r0 is
  * not ready. Since r5 (rFP) is not updated often, it is less likely to