Remove the single ref inter mode NEWFROMNEARMV

Change-Id: I246da885154303d139f5d97c53ebfc55d6dc82ca
diff --git a/av1/common/av1_loopfilter.c b/av1/common/av1_loopfilter.c
index df23cde..3d4d94a 100644
--- a/av1/common/av1_loopfilter.c
+++ b/av1/common/av1_loopfilter.c
@@ -263,10 +263,8 @@
 
 static const int mode_lf_lut[MB_MODE_COUNT] = {
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // INTRA_MODES
-  1, 1, 0, 1                     // INTER_MODES (ZEROMV == 0)
+  1, 1, 0, 1,                    // INTER_MODES (ZEROMV == 0)
 #if CONFIG_EXT_INTER
-  ,
-  1,                            // NEWFROMNEARMV mode
   1, 1, 1, 1, 1, 1, 1, 1, 0, 1  // INTER_COMPOUND_MODES (ZERO_ZEROMV == 0)
 #endif                          // CONFIG_EXT_INTER
 };
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 8243f2a..3910faa 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -118,7 +118,7 @@
 
 #if CONFIG_EXT_INTER
 static INLINE int is_inter_singleref_mode(PREDICTION_MODE mode) {
-  return mode >= NEARESTMV && mode <= NEWFROMNEARMV;
+  return mode >= NEARESTMV && mode <= NEWMV;
 }
 
 static INLINE int is_inter_compound_mode(PREDICTION_MODE mode) {
@@ -144,7 +144,6 @@
     MB_MODE_COUNT,  // NEARMV
     MB_MODE_COUNT,  // ZEROMV
     MB_MODE_COUNT,  // NEWMV
-    MB_MODE_COUNT,  // NEWFROMNEARMV
     NEARESTMV,      // NEAREST_NEARESTMV
     NEARESTMV,      // NEAREST_NEARMV
     NEARMV,         // NEAR_NEARESTMV
@@ -179,7 +178,6 @@
     MB_MODE_COUNT,  // NEARMV
     MB_MODE_COUNT,  // ZEROMV
     MB_MODE_COUNT,  // NEWMV
-    MB_MODE_COUNT,  // NEWFROMNEARMV
     NEARESTMV,      // NEAREST_NEARESTMV
     NEARMV,         // NEAREST_NEARMV
     NEARESTMV,      // NEAR_NEARESTMV
@@ -196,9 +194,8 @@
 }
 
 static INLINE int have_newmv_in_inter_mode(PREDICTION_MODE mode) {
-  return (mode == NEWMV || mode == NEWFROMNEARMV || mode == NEW_NEWMV ||
-          mode == NEAREST_NEWMV || mode == NEW_NEARESTMV ||
-          mode == NEAR_NEWMV || mode == NEW_NEARMV);
+  return (mode == NEWMV || mode == NEW_NEWMV || mode == NEAREST_NEWMV ||
+          mode == NEW_NEARESTMV || mode == NEAR_NEWMV || mode == NEW_NEARMV);
 }
 
 static INLINE int use_masked_motion_search(COMPOUND_TYPE type) {
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index 922e514..611cc3e 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -747,24 +747,10 @@
 
 static const aom_prob default_drl_prob[DRL_MODE_CONTEXTS] = { 128, 160, 180,
                                                               128, 160 };
-
-#if CONFIG_EXT_INTER
-static const aom_prob default_new2mv_prob = 180;
-#endif  // CONFIG_EXT_INTER
 #endif  // CONFIG_REF_MV
 
 static const aom_prob
     default_inter_mode_probs[INTER_MODE_CONTEXTS][INTER_MODES - 1] = {
-#if CONFIG_EXT_INTER
-      // TODO(zoeliu): To adjust the initial default probs
-      { 2, 173, 34, 173 },  // 0 = both zero mv
-      { 7, 145, 85, 145 },  // 1 = one zero mv + one a predicted mv
-      { 7, 166, 63, 166 },  // 2 = two predicted mvs
-      { 7, 94, 66, 128 },   // 3 = one predicted/zero and one new mv
-      { 8, 64, 46, 128 },   // 4 = two new mvs
-      { 17, 81, 31, 128 },  // 5 = one intra neighbour + x
-      { 25, 29, 30, 96 },   // 6 = two intra neighbours
-#else
       { 2, 173, 34 },  // 0 = both zero mv
       { 7, 145, 85 },  // 1 = one zero mv + one a predicted mv
       { 7, 166, 63 },  // 2 = two predicted mvs
@@ -772,7 +758,6 @@
       { 8, 64, 46 },   // 4 = two new mvs
       { 17, 81, 31 },  // 5 = one intra neighbour + x
       { 25, 29, 30 },  // 6 = two intra neighbours
-#endif  // CONFIG_EXT_INTER
     };
 
 #if CONFIG_EXT_INTER
@@ -951,14 +936,8 @@
 #endif  // CONFIG_ALT_INTRA
 
 const aom_tree_index av1_inter_mode_tree[TREE_SIZE(INTER_MODES)] = {
-  -INTER_OFFSET(ZEROMV),    2,
-  -INTER_OFFSET(NEARESTMV), 4,
-#if CONFIG_EXT_INTER
-  -INTER_OFFSET(NEARMV),    6,
-  -INTER_OFFSET(NEWMV),     -INTER_OFFSET(NEWFROMNEARMV)
-#else
-  -INTER_OFFSET(NEARMV),    -INTER_OFFSET(NEWMV)
-#endif  // CONFIG_EXT_INTER
+  -INTER_OFFSET(ZEROMV), 2, -INTER_OFFSET(NEARESTMV), 4, -INTER_OFFSET(NEARMV),
+  -INTER_OFFSET(NEWMV)
 };
 
 #if CONFIG_EXT_INTER
@@ -1780,7 +1759,7 @@
                                    },
                                },
                              };
-#else
+#else  // !CONFIG_EXT_TX
 
 /* clang-format off */
 const aom_tree_index av1_ext_tx_tree[TREE_SIZE(TX_TYPES)] = {
@@ -1943,7 +1922,7 @@
       { 23680, 23929, 27831, 30446, 30598, 31129, 31244, 31655, 31868, 32234,
         32768, 0 },
     };
-#else
+#else   // !CONFIG_ALT_INTRA
 static const aom_cdf_prob default_if_y_mode_cdf[BLOCK_SIZE_GROUPS][CDF_SIZE(
     INTRA_MODES)] = {
   { 8320, 11376, 12880, 19959, 23072, 24067, 25461, 26917, 29157, 32768, 0 },
@@ -2560,7 +2539,7 @@
           { 6656, 12164, 16993, 21568, 22933, 23648, 25322, 26602, 27806, 29841,
             32768, 0 },
       },
-#else
+#else   // !CONFIG_ALT_INTRA
       { { 17536, 19321, 21527, 25360, 27516, 28026, 29323, 30023, 30999, 32768,
           0 },
         { 11776, 15466, 22360, 24865, 26991, 27889, 29299, 30519, 31398, 32768,
@@ -2795,9 +2774,6 @@
   av1_copy(fc->zeromv_prob, default_zeromv_prob);
   av1_copy(fc->refmv_prob, default_refmv_prob);
   av1_copy(fc->drl_prob, default_drl_prob);
-#if CONFIG_EXT_INTER
-  fc->new2mv_prob = default_new2mv_prob;
-#endif  // CONFIG_EXT_INTER
 #endif  // CONFIG_REF_MV
   av1_copy(fc->inter_mode_probs, default_inter_mode_probs);
 #if CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
@@ -3013,10 +2989,6 @@
   for (i = 0; i < DRL_MODE_CONTEXTS; ++i)
     fc->drl_prob[i] =
         av1_mode_mv_merge_probs(pre_fc->drl_prob[i], counts->drl_mode[i]);
-#if CONFIG_EXT_INTER
-  fc->new2mv_prob =
-      av1_mode_mv_merge_probs(pre_fc->new2mv_prob, counts->new2mv_mode);
-#endif  // CONFIG_EXT_INTER
 #else
   for (i = 0; i < INTER_MODE_CONTEXTS; i++)
     aom_tree_merge_probs(av1_inter_mode_tree, pre_fc->inter_mode_probs[i],
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index cd9e7e3..6ec269e 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -181,10 +181,6 @@
   aom_prob zeromv_prob[ZEROMV_MODE_CONTEXTS];
   aom_prob refmv_prob[REFMV_MODE_CONTEXTS];
   aom_prob drl_prob[DRL_MODE_CONTEXTS];
-
-#if CONFIG_EXT_INTER
-  aom_prob new2mv_prob;
-#endif  // CONFIG_EXT_INTER
 #endif  // CONFIG_REF_MV
 
   aom_prob inter_mode_probs[INTER_MODE_CONTEXTS][INTER_MODES - 1];
@@ -344,9 +340,6 @@
   unsigned int zeromv_mode[ZEROMV_MODE_CONTEXTS][2];
   unsigned int refmv_mode[REFMV_MODE_CONTEXTS][2];
   unsigned int drl_mode[DRL_MODE_CONTEXTS][2];
-#if CONFIG_EXT_INTER
-  unsigned int new2mv_mode[2];
-#endif  // CONFIG_EXT_INTER
 #endif
 
   unsigned int inter_mode[INTER_MODE_CONTEXTS][INTER_MODES];
diff --git a/av1/common/enums.h b/av1/common/enums.h
index 00860f9..b42a326 100644
--- a/av1/common/enums.h
+++ b/av1/common/enums.h
@@ -314,7 +314,6 @@
   ZEROMV,
   NEWMV,
 #if CONFIG_EXT_INTER
-  NEWFROMNEARMV,
   NEAREST_NEARESTMV,
   NEAREST_NEARMV,
   NEAR_NEARESTMV,
@@ -389,11 +388,7 @@
 #define DIRECTIONAL_MODES (INTRA_MODES - 2)
 #endif  // CONFIG_EXT_INTRA
 
-#if CONFIG_EXT_INTER
-#define INTER_MODES (1 + NEWFROMNEARMV - NEARESTMV)
-#else
 #define INTER_MODES (1 + NEWMV - NEARESTMV)
-#endif  // CONFIG_EXT_INTER
 
 #if CONFIG_EXT_INTER
 #define INTER_COMPOUND_MODES (1 + NEW_NEWMV - NEAREST_NEARESTMV)
diff --git a/av1/common/mvref_common.c b/av1/common/mvref_common.c
index 442f83f..36f6cad 100644
--- a/av1/common/mvref_common.c
+++ b/av1/common/mvref_common.c
@@ -48,12 +48,7 @@
           ref_mv_stack[index].weight = 2 * len;
           ++(*refmv_count);
 
-#if CONFIG_EXT_INTER
-          if (candidate->mode == NEWMV || candidate->mode == NEWFROMNEARMV)
-#else
-          if (candidate->mode == NEWMV)
-#endif  // CONFIG_EXT_INTER
-            ++newmv_count;
+          if (candidate->mode == NEWMV) ++newmv_count;
         }
 
         if (candidate_mi->mbmi.sb_type < BLOCK_8X8 && block >= 0 &&
@@ -76,12 +71,7 @@
             ref_mv_stack[index].weight = len;
             ++(*refmv_count);
 
-#if CONFIG_EXT_INTER
-            if (candidate->mode == NEWMV || candidate->mode == NEWFROMNEARMV)
-#else
-            if (candidate->mode == NEWMV)
-#endif  // CONFIG_EXT_INTER
-              ++newmv_count;
+            if (candidate->mode == NEWMV) ++newmv_count;
           }
         }
       }
diff --git a/av1/common/mvref_common.h b/av1/common/mvref_common.h
index 9baef8d..a8abcba 100644
--- a/av1/common/mvref_common.h
+++ b/av1/common/mvref_common.h
@@ -64,7 +64,6 @@
   3,    // ZEROMV
   1,    // NEWMV
 #if CONFIG_EXT_INTER
-  1,    // NEWFROMNEARMV
   0,    // NEAREST_NEARESTMV
   0,    // NEAREST_NEARMV
   0,    // NEAR_NEARESTMV
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index e3f45cf..897999c 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -188,9 +188,6 @@
     av1_diff_update_prob(r, &fc->refmv_prob[i], ACCT_STR);
   for (i = 0; i < DRL_MODE_CONTEXTS; ++i)
     av1_diff_update_prob(r, &fc->drl_prob[i], ACCT_STR);
-#if CONFIG_EXT_INTER
-  av1_diff_update_prob(r, &fc->new2mv_prob, ACCT_STR);
-#endif  // CONFIG_EXT_INTER
 #else
 #if !CONFIG_EC_ADAPT
   int i, j;
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 3d75628..20b6d3c 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -169,11 +169,7 @@
 #endif  // CONFIG_EXT_INTER
 
 static PREDICTION_MODE read_inter_mode(FRAME_CONTEXT *ec_ctx, MACROBLOCKD *xd,
-#if CONFIG_REF_MV && CONFIG_EXT_INTER
-                                       MB_MODE_INFO *mbmi,
-#endif
                                        aom_reader *r, int16_t ctx) {
-
 #if CONFIG_REF_MV
   FRAME_COUNTS *counts = xd->counts;
   int16_t mode_ctx = ctx & NEWMV_CTX_MASK;
@@ -181,23 +177,7 @@
 
   if (aom_read(r, mode_prob, ACCT_STR) == 0) {
     if (counts) ++counts->newmv_mode[mode_ctx][0];
-
-#if CONFIG_EXT_INTER
-    if (has_second_ref(mbmi)) {
-#endif  // CONFIG_EXT_INTER
-      return NEWMV;
-#if CONFIG_EXT_INTER
-    } else {
-      mode_prob = ec_ctx->new2mv_prob;
-      if (aom_read(r, mode_prob, ACCT_STR) == 0) {
-        if (counts) ++counts->new2mv_mode[0];
-        return NEWMV;
-      } else {
-        if (counts) ++counts->new2mv_mode[1];
-        return NEWFROMNEARMV;
-      }
-    }
-#endif  // CONFIG_EXT_INTER
+    return NEWMV;
   }
   if (counts) ++counts->newmv_mode[mode_ctx][1];
 
@@ -1365,9 +1345,6 @@
   (void)bsize;
 
   switch (mode) {
-#if CONFIG_EXT_INTER
-    case NEWFROMNEARMV:
-#endif  // CONFIG_EXT_INTER
     case NEWMV: {
       FRAME_COUNTS *counts = xd->counts;
 #if !CONFIG_REF_MV
@@ -1628,9 +1605,6 @@
   const int unify_bsize = CONFIG_CB4X4;
   int_mv nearestmv[2], nearmv[2];
   int_mv ref_mvs[MODE_CTX_REF_FRAMES][MAX_MV_REF_CANDIDATES];
-#if CONFIG_EXT_INTER
-  int mv_idx;
-#endif  // CONFIG_EXT_INTER
   int ref, is_compound;
   int16_t inter_mode_ctx[MODE_CTX_REF_FRAMES];
 #if CONFIG_REF_MV && CONFIG_EXT_INTER
@@ -1734,11 +1708,7 @@
         mbmi->mode = read_inter_compound_mode(cm, xd, r, mode_ctx);
       else
 #endif  // CONFIG_EXT_INTER
-        mbmi->mode = read_inter_mode(ec_ctx, xd,
-#if CONFIG_REF_MV && CONFIG_EXT_INTER
-                                     mbmi,
-#endif  // CONFIG_REF_MV && CONFIG_EXT_INTER
-                                     r, mode_ctx);
+        mbmi->mode = read_inter_mode(ec_ctx, xd, r, mode_ctx);
 #if CONFIG_REF_MV
 #if CONFIG_EXT_INTER
       if (mbmi->mode == NEARMV || mbmi->mode == NEAR_NEARMV ||
@@ -1859,15 +1829,9 @@
           b_mode = read_inter_compound_mode(cm, xd, r, mode_ctx);
         else
 #endif  // CONFIG_EXT_INTER
-          b_mode = read_inter_mode(ec_ctx, xd,
-#if CONFIG_REF_MV && CONFIG_EXT_INTER
-                                   mbmi,
-#endif  // CONFIG_REF_MV && CONFIG_EXT_INTER
-                                   r, mode_ctx);
+          b_mode = read_inter_mode(ec_ctx, xd, r, mode_ctx);
 
 #if CONFIG_EXT_INTER
-        mv_idx = (b_mode == NEWFROMNEARMV) ? 1 : 0;
-
         if (b_mode != ZEROMV && b_mode != ZERO_ZEROMV) {
 #else
         if (b_mode != ZEROMV) {
@@ -1917,8 +1881,8 @@
 
         if (!assign_mv(cm, xd, b_mode, mbmi->ref_frame, j, block,
 #if CONFIG_EXT_INTER
-                       ref_mv[mv_idx],
-#else
+                       ref_mv[0],
+#else   // !CONFIG_EXT_INTER
                        ref_mv_s8,
 #endif  // CONFIG_EXT_INTER
                        nearest_sub8x8, near_sub8x8, mi_row, mi_col, is_compound,
@@ -1971,12 +1935,7 @@
     }
 
     int mv_corrupted_flag =
-        !assign_mv(cm, xd, mbmi->mode, mbmi->ref_frame, 0, mbmi->mv,
-#if CONFIG_EXT_INTER
-                   mbmi->mode == NEWFROMNEARMV ? nearmv : nearestmv,
-#else
-                   ref_mv,
-#endif  // CONFIG_EXT_INTER
+        !assign_mv(cm, xd, mbmi->mode, mbmi->ref_frame, 0, mbmi->mv, ref_mv,
                    nearestmv, nearmv, mi_row, mi_col, is_compound, allow_hp, r);
     aom_merge_corrupted_flag(&xd->corrupted, mv_corrupted_flag);
   }
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 7e9e1cd..57ce7e2 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -240,26 +240,15 @@
 #endif  // CONFIG_EXT_INTER
 
 static void write_inter_mode(aom_writer *w, PREDICTION_MODE mode,
-                             FRAME_CONTEXT *ec_ctx,
-#if CONFIG_REF_MV && CONFIG_EXT_INTER
-                             int is_compound,
-#endif  // CONFIG_REF_MV && CONFIG_EXT_INTER
-                             const int16_t mode_ctx) {
+                             FRAME_CONTEXT *ec_ctx, const int16_t mode_ctx) {
 #if CONFIG_REF_MV
   const int16_t newmv_ctx = mode_ctx & NEWMV_CTX_MASK;
   const aom_prob newmv_prob = ec_ctx->newmv_prob[newmv_ctx];
-#if CONFIG_EXT_INTER
-  aom_write(w, mode != NEWMV && mode != NEWFROMNEARMV, newmv_prob);
 
-  if (!is_compound && (mode == NEWMV || mode == NEWFROMNEARMV))
-    aom_write(w, mode == NEWFROMNEARMV, ec_ctx->new2mv_prob);
+#define IS_NEWMV_MODE(mode) ((mode) == NEWMV)
+  aom_write(w, !IS_NEWMV_MODE(mode), newmv_prob);
 
-  if (mode != NEWMV && mode != NEWFROMNEARMV) {
-#else
-  aom_write(w, mode != NEWMV, newmv_prob);
-
-  if (mode != NEWMV) {
-#endif  // CONFIG_EXT_INTER
+  if (!IS_NEWMV_MODE(mode)) {
     const int16_t zeromv_ctx = (mode_ctx >> ZEROMV_OFFSET) & ZEROMV_CTX_MASK;
     const aom_prob zeromv_prob = ec_ctx->zeromv_prob[zeromv_ctx];
 
@@ -282,7 +271,10 @@
       aom_write(w, mode != NEARESTMV, refmv_prob);
     }
   }
-#else
+
+#undef IS_NEWMV_MODE
+
+#else  // !CONFIG_REF_MV
   assert(is_inter_mode(mode));
 #if CONFIG_EC_MULTISYMBOL
   aom_write_symbol(w, av1_inter_mode_ind[INTER_OFFSET(mode)],
@@ -520,10 +512,6 @@
   for (i = 0; i < DRL_MODE_CONTEXTS; ++i)
     av1_cond_prob_diff_update(w, &cm->fc->drl_prob[i], counts->drl_mode[i],
                               probwt);
-#if CONFIG_EXT_INTER
-  av1_cond_prob_diff_update(w, &cm->fc->new2mv_prob, counts->new2mv_mode,
-                            probwt);
-#endif  // CONFIG_EXT_INTER
 }
 #endif
 
@@ -1734,11 +1722,7 @@
           write_inter_compound_mode(cm, w, mode, mode_ctx);
         else if (is_inter_singleref_mode(mode))
 #endif  // CONFIG_EXT_INTER
-          write_inter_mode(w, mode, ec_ctx,
-#if CONFIG_REF_MV && CONFIG_EXT_INTER
-                           is_compound,
-#endif  // CONFIG_REF_MV && CONFIG_EXT_INTER
-                           mode_ctx);
+          write_inter_mode(w, mode, ec_ctx, mode_ctx);
 
 #if CONFIG_REF_MV
 #if CONFIG_EXT_INTER
@@ -1778,15 +1762,10 @@
             write_inter_compound_mode(cm, w, b_mode, mode_ctx);
           else if (is_inter_singleref_mode(b_mode))
 #endif  // CONFIG_EXT_INTER
-            write_inter_mode(w, b_mode, ec_ctx,
-#if CONFIG_REF_MV && CONFIG_EXT_INTER
-                             has_second_ref(mbmi),
-#endif  // CONFIG_REF_MV && CONFIG_EXT_INTER
-                             mode_ctx);
+            write_inter_mode(w, b_mode, ec_ctx, mode_ctx);
 
 #if CONFIG_EXT_INTER
-          if (b_mode == NEWMV || b_mode == NEWFROMNEARMV ||
-              b_mode == NEW_NEWMV) {
+          if (b_mode == NEWMV || b_mode == NEW_NEWMV) {
 #else
           if (b_mode == NEWMV) {
 #endif  // CONFIG_EXT_INTER
@@ -1838,7 +1817,7 @@
       }
     } else {
 #if CONFIG_EXT_INTER
-      if (mode == NEWMV || mode == NEWFROMNEARMV || mode == NEW_NEWMV) {
+      if (mode == NEWMV || mode == NEW_NEWMV) {
 #else
       if (mode == NEWMV) {
 #endif  // CONFIG_EXT_INTER
@@ -1852,15 +1831,8 @@
           nmv_context *nmvc = &ec_ctx->nmvc[nmv_ctx];
 #endif
           ref_mv = mbmi_ext->ref_mvs[mbmi->ref_frame[ref]][0];
-#if CONFIG_EXT_INTER
-          if (mode == NEWFROMNEARMV)
-            av1_encode_mv(cpi, w, &mbmi->mv[ref].as_mv,
-                          &mbmi_ext->ref_mvs[mbmi->ref_frame[ref]][1].as_mv,
-                          nmvc, allow_hp);
-          else
-#endif  // CONFIG_EXT_INTER
-            av1_encode_mv(cpi, w, &mbmi->mv[ref].as_mv, &ref_mv.as_mv, nmvc,
-                          allow_hp);
+          av1_encode_mv(cpi, w, &mbmi->mv[ref].as_mv, &ref_mv.as_mv, nmvc,
+                        allow_hp);
         }
 #if CONFIG_EXT_INTER
       } else if (mode == NEAREST_NEWMV || mode == NEAR_NEWMV) {
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 7b8d8d3..a44ab51 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -1989,17 +1989,9 @@
 
 #if CONFIG_REF_MV
 static void update_inter_mode_stats(FRAME_COUNTS *counts, PREDICTION_MODE mode,
-#if CONFIG_EXT_INTER
-                                    int is_compound,
-#endif  // CONFIG_EXT_INTER
                                     int16_t mode_context) {
   int16_t mode_ctx = mode_context & NEWMV_CTX_MASK;
-#if CONFIG_EXT_INTER
-  if (mode == NEWMV || mode == NEWFROMNEARMV) {
-    if (!is_compound) ++counts->new2mv_mode[mode == NEWFROMNEARMV];
-#else
   if (mode == NEWMV) {
-#endif  // CONFIG_EXT_INTER
     ++counts->newmv_mode[mode_ctx][0];
     return;
   } else {
@@ -2219,11 +2211,7 @@
 #endif  // CONFIG_EXT_INTER
           mode_ctx = av1_mode_context_analyzer(mbmi_ext->mode_context,
                                                mbmi->ref_frame, bsize, -1);
-          update_inter_mode_stats(counts, mode,
-#if CONFIG_EXT_INTER
-                                  has_second_ref(mbmi),
-#endif  // CONFIG_EXT_INTER
-                                  mode_ctx);
+          update_inter_mode_stats(counts, mode, mode_ctx);
 #if CONFIG_EXT_INTER
         }
 #endif  // CONFIG_EXT_INTER
@@ -2291,11 +2279,7 @@
 #endif  // CONFIG_EXT_INTER
               mode_ctx = av1_mode_context_analyzer(mbmi_ext->mode_context,
                                                    mbmi->ref_frame, bsize, j);
-              update_inter_mode_stats(counts, b_mode,
-#if CONFIG_EXT_INTER
-                                      has_second_ref(mbmi),
-#endif  // CONFIG_EXT_INTER
-                                      mode_ctx);
+              update_inter_mode_stats(counts, b_mode, mode_ctx);
 #if CONFIG_EXT_INTER
             }
 #endif  // CONFIG_EXT_INTER
diff --git a/av1/encoder/encodemv.c b/av1/encoder/encodemv.c
index 5b6f9b6..7a37379 100644
--- a/av1/encoder/encodemv.c
+++ b/av1/encoder/encodemv.c
@@ -294,14 +294,13 @@
                     nmv_context_counts *nmv_counts) {
   int i;
   PREDICTION_MODE mode = mbmi->mode;
-  int mv_idx = (mode == NEWFROMNEARMV);
 #if !CONFIG_REF_MV
   nmv_context_counts *counts = nmv_counts;
 #endif
 
-  if (mode == NEWMV || mode == NEWFROMNEARMV || mode == NEW_NEWMV) {
+  if (mode == NEWMV || mode == NEW_NEWMV) {
     for (i = 0; i < 1 + has_second_ref(mbmi); ++i) {
-      const MV *ref = &mbmi_ext->ref_mvs[mbmi->ref_frame[i]][mv_idx].as_mv;
+      const MV *ref = &mbmi_ext->ref_mvs[mbmi->ref_frame[i]][0].as_mv;
       const MV diff = { mvs[i].as_mv.row - ref->row,
                         mvs[i].as_mv.col - ref->col };
 #if CONFIG_REF_MV
@@ -354,7 +353,7 @@
   nmv_context_counts *counts = nmv_counts;
 #endif
 
-  if (mode == NEWMV || mode == NEWFROMNEARMV || mode == NEW_NEWMV) {
+  if (mode == NEWMV || mode == NEW_NEWMV) {
     for (i = 0; i < 1 + has_second_ref(&mi->mbmi); ++i) {
       const MV *ref = &mi->bmi[block].ref_mv[i].as_mv;
       const MV diff = { mvs[i].as_mv.row - ref->row,
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 6b122c7..84fe8e2 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -542,9 +542,6 @@
   int zeromv_mode_cost[ZEROMV_MODE_CONTEXTS][2];
   int refmv_mode_cost[REFMV_MODE_CONTEXTS][2];
   int drl_mode_cost0[DRL_MODE_CONTEXTS][2];
-#if CONFIG_EXT_INTER
-  int new2mv_mode_cost[2];
-#endif  // CONFIG_EXT_INTER
 #endif
 
   unsigned int inter_mode_cost[INTER_MODE_CONTEXTS][INTER_MODES];
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c
index 417f15c..fdb860d 100644
--- a/av1/encoder/rd.c
+++ b/av1/encoder/rd.c
@@ -457,10 +457,6 @@
         cpi->drl_mode_cost0[i][0] = av1_cost_bit(cm->fc->drl_prob[i], 0);
         cpi->drl_mode_cost0[i][1] = av1_cost_bit(cm->fc->drl_prob[i], 1);
       }
-#if CONFIG_EXT_INTER
-      cpi->new2mv_mode_cost[0] = av1_cost_bit(cm->fc->new2mv_prob, 0);
-      cpi->new2mv_mode_cost[1] = av1_cost_bit(cm->fc->new2mv_prob, 1);
-#endif  // CONFIG_EXT_INTER
 #else
       for (i = 0; i < INTER_MODE_CONTEXTS; ++i)
         av1_cost_tokens((int *)cpi->inter_mode_cost[i],
@@ -930,17 +926,6 @@
   rd->thresh_mult[THR_NEARA] += 1000;
   rd->thresh_mult[THR_NEARG] += 1000;
 
-#if CONFIG_EXT_INTER
-  rd->thresh_mult[THR_NEWFROMNEARMV] += 1000;
-#if CONFIG_EXT_REFS
-  rd->thresh_mult[THR_NEWFROMNEARL2] += 1000;
-  rd->thresh_mult[THR_NEWFROMNEARL3] += 1000;
-  rd->thresh_mult[THR_NEWFROMNEARB] += 1000;
-#endif  // CONFIG_EXT_REFS
-  rd->thresh_mult[THR_NEWFROMNEARA] += 1000;
-  rd->thresh_mult[THR_NEWFROMNEARG] += 1000;
-#endif  // CONFIG_EXT_INTER
-
   rd->thresh_mult[THR_ZEROMV] += 2000;
 #if CONFIG_EXT_REFS
   rd->thresh_mult[THR_ZEROL2] += 2000;
diff --git a/av1/encoder/rd.h b/av1/encoder/rd.h
index 35093e2d..6285d47 100644
--- a/av1/encoder/rd.h
+++ b/av1/encoder/rd.h
@@ -85,17 +85,6 @@
   THR_NEARA,
   THR_NEARG,
 
-#if CONFIG_EXT_INTER
-  THR_NEWFROMNEARMV,
-#if CONFIG_EXT_REFS
-  THR_NEWFROMNEARL2,
-  THR_NEWFROMNEARL3,
-  THR_NEWFROMNEARB,
-#endif  // CONFIG_EXT_REFS
-  THR_NEWFROMNEARA,
-  THR_NEWFROMNEARG,
-#endif  // CONFIG_EXT_INTER
-
   THR_ZEROMV,
 #if CONFIG_EXT_REFS
   THR_ZEROL2,
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 3fa9302..bb61c94 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -173,17 +173,6 @@
   { NEARMV, { ALTREF_FRAME, NONE_FRAME } },
   { NEARMV, { GOLDEN_FRAME, NONE_FRAME } },
 
-#if CONFIG_EXT_INTER
-  { NEWFROMNEARMV, { LAST_FRAME, NONE_FRAME } },
-#if CONFIG_EXT_REFS
-  { NEWFROMNEARMV, { LAST2_FRAME, NONE_FRAME } },
-  { NEWFROMNEARMV, { LAST3_FRAME, NONE_FRAME } },
-  { NEWFROMNEARMV, { BWDREF_FRAME, NONE_FRAME } },
-#endif  // CONFIG_EXT_REFS
-  { NEWFROMNEARMV, { ALTREF_FRAME, NONE_FRAME } },
-  { NEWFROMNEARMV, { GOLDEN_FRAME, NONE_FRAME } },
-#endif  // CONFIG_EXT_INTER
-
   { ZEROMV, { LAST_FRAME, NONE_FRAME } },
 #if CONFIG_EXT_REFS
   { ZEROMV, { LAST2_FRAME, NONE_FRAME } },
@@ -4925,15 +4914,11 @@
     return cpi
         ->inter_compound_mode_cost[mode_context][INTER_COMPOUND_OFFSET(mode)];
   } else {
-    if (mode == NEWMV || mode == NEWFROMNEARMV) {
+    if (mode == NEWMV) {
 #else
   if (mode == NEWMV) {
 #endif  // CONFIG_EXT_INTER
       mode_cost = cpi->newmv_mode_cost[mode_ctx][0];
-#if CONFIG_EXT_INTER
-      if (!is_compound)
-        mode_cost += cpi->new2mv_mode_cost[mode == NEWFROMNEARMV];
-#endif  // CONFIG_EXT_INTER
       return mode_cost;
     } else {
       mode_cost = cpi->newmv_mode_cost[mode_ctx][1];
@@ -5011,11 +4996,7 @@
   (void)mi_col;
 
   switch (mode) {
-    case NEWMV:
-#if CONFIG_EXT_INTER
-    case NEWFROMNEARMV:
-#endif  // CONFIG_EXT_INTER
-      this_mv[0].as_int = seg_mvs[mbmi->ref_frame[0]].as_int;
+    case NEWMV: this_mv[0].as_int = seg_mvs[mbmi->ref_frame[0]].as_int;
 #if CONFIG_EXT_INTER
       if (!cpi->common.allow_high_precision_mv)
         lower_mv_precision(&this_mv[0].as_mv, 0);
@@ -5749,12 +5730,9 @@
     const AV1_COMP *const cpi, MACROBLOCK *x, int_mv *best_ref_mv,
     int_mv *second_best_ref_mv, int64_t best_rd, int *returntotrate,
     int *returnyrate, int64_t *returndistortion, int *skippable, int64_t *psse,
-    int mvthresh,
+    int mvthresh, int_mv seg_mvs[4][TOTAL_REFS_PER_FRAME],
 #if CONFIG_EXT_INTER
-    int_mv seg_mvs[4][2][TOTAL_REFS_PER_FRAME],
     int_mv compound_seg_newmvs[4][2],
-#else
-    int_mv seg_mvs[4][TOTAL_REFS_PER_FRAME],
 #endif  // CONFIG_EXT_INTER
     BEST_SEG_INFO *bsi_buf, int filter_idx, int mi_row, int mi_col) {
   BEST_SEG_INFO *bsi = bsi_buf + filter_idx;
@@ -5846,7 +5824,6 @@
       uint8_t ref_mv_count[2];
 #endif  // CONFIG_REF_MV
 #if CONFIG_EXT_INTER
-      int mv_idx;
       int_mv ref_mvs_sub8x8[2][2];
 #endif  // CONFIG_EXT_INTER
 #if CONFIG_PVQ
@@ -5935,8 +5912,7 @@
 // search for the best motion vector on this segment
 #if CONFIG_EXT_INTER
       for (this_mode = (has_second_rf ? NEAREST_NEARESTMV : NEARESTMV);
-           this_mode <= (has_second_rf ? NEW_NEWMV : NEWFROMNEARMV);
-           ++this_mode)
+           this_mode <= (has_second_rf ? NEW_NEWMV : NEWMV); ++this_mode)
 #else
       for (this_mode = NEARESTMV; this_mode <= NEWMV; ++this_mode)
 #endif  // CONFIG_EXT_INTER
@@ -5949,10 +5925,8 @@
 
         mode_idx = INTER_OFFSET(this_mode);
 #if CONFIG_EXT_INTER
-        mv_idx = (this_mode == NEWFROMNEARMV) ? 1 : 0;
-
         for (ref = 0; ref < 1 + has_second_rf; ++ref)
-          bsi->ref_mv[ref]->as_int = ref_mvs_sub8x8[mv_idx][ref].as_int;
+          bsi->ref_mv[ref]->as_int = ref_mvs_sub8x8[0][ref].as_int;
 #endif  // CONFIG_EXT_INTER
         bsi->rdstat[index][mode_idx].brdcost = INT64_MAX;
         if (!(inter_mode_mask & (1 << this_mode))) continue;
@@ -6042,7 +6016,7 @@
         if (!has_second_rf &&
 #if CONFIG_EXT_INTER
             have_newmv_in_inter_mode(this_mode) &&
-            (seg_mvs[index][mv_idx][mbmi->ref_frame[0]].as_int == INVALID_MV)
+            (seg_mvs[index][mbmi->ref_frame[0]].as_int == INVALID_MV)
 #else
             this_mode == NEWMV &&
             (seg_mvs[index][mbmi->ref_frame[0]].as_int == INVALID_MV ||
@@ -6202,7 +6176,7 @@
 
 // save motion search result for use in compound prediction
 #if CONFIG_EXT_INTER
-            seg_mvs[index][mv_idx][mbmi->ref_frame[0]].as_mv = x->best_mv.as_mv;
+            seg_mvs[index][mbmi->ref_frame[0]].as_mv = x->best_mv.as_mv;
 #else
             seg_mvs[index][mbmi->ref_frame[0]].as_mv = x->best_mv.as_mv;
 #endif  // CONFIG_EXT_INTER
@@ -6223,8 +6197,8 @@
 
         if (has_second_rf) {
 #if CONFIG_EXT_INTER
-          if (seg_mvs[index][mv_idx][mbmi->ref_frame[1]].as_int == INVALID_MV ||
-              seg_mvs[index][mv_idx][mbmi->ref_frame[0]].as_int == INVALID_MV)
+          if (seg_mvs[index][mbmi->ref_frame[1]].as_int == INVALID_MV ||
+              seg_mvs[index][mbmi->ref_frame[0]].as_int == INVALID_MV)
 #else
           if (seg_mvs[index][mbmi->ref_frame[1]].as_int == INVALID_MV ||
               seg_mvs[index][mbmi->ref_frame[0]].as_int == INVALID_MV)
@@ -6255,11 +6229,9 @@
             joint_motion_search(cpi, x, bsize, frame_mv[this_mode], mi_row,
                                 mi_col,
 #if CONFIG_EXT_INTER
-                                bsi->ref_mv, seg_mvs[index][mv_idx],
-#else
-                                seg_mvs[index],
+                                bsi->ref_mv,
 #endif  // CONFIG_EXT_INTER
-                                &rate_mv, index);
+                                seg_mvs[index], &rate_mv, index);
 #if CONFIG_EXT_INTER
             compound_seg_newmvs[index][0].as_int =
                 frame_mv[this_mode][mbmi->ref_frame[0]].as_int;
@@ -6278,10 +6250,9 @@
 
         bsi->rdstat[index][mode_idx].brate = set_and_cost_bmi_mvs(
             cpi, x, xd, index, this_mode, mode_mv[this_mode], frame_mv,
-#if CONFIG_EXT_INTER
-            seg_mvs[index][mv_idx], compound_seg_newmvs[index],
-#else
             seg_mvs[index],
+#if CONFIG_EXT_INTER
+            compound_seg_newmvs[index],
 #endif  // CONFIG_EXT_INTER
             bsi->ref_mv, x->nmvjointcost, x->mvcost, mi_row, mi_col);
 
@@ -6497,19 +6468,17 @@
 #endif  // CONFIG_PVQ
 
 #if CONFIG_EXT_INTER
-      mv_idx = (mode_selected == NEWFROMNEARMV) ? 1 : 0;
       bsi->ref_mv[0]->as_int = bsi->rdstat[index][mode_idx].ref_mv[0].as_int;
       if (has_second_rf)
         bsi->ref_mv[1]->as_int = bsi->rdstat[index][mode_idx].ref_mv[1].as_int;
 #endif  // CONFIG_EXT_INTER
-      set_and_cost_bmi_mvs(
-          cpi, x, xd, index, mode_selected, mode_mv[mode_selected], frame_mv,
+      set_and_cost_bmi_mvs(cpi, x, xd, index, mode_selected,
+                           mode_mv[mode_selected], frame_mv, seg_mvs[index],
 #if CONFIG_EXT_INTER
-          seg_mvs[index][mv_idx], compound_seg_newmvs[index],
-#else
-          seg_mvs[index],
+                           compound_seg_newmvs[index],
 #endif  // CONFIG_EXT_INTER
-          bsi->ref_mv, x->nmvjointcost, x->mvcost, mi_row, mi_col);
+                           bsi->ref_mv, x->nmvjointcost, x->mvcost, mi_row,
+                           mi_col);
 
       br += bsi->rdstat[index][mode_idx].brate;
       bd += bsi->rdstat[index][mode_idx].bdist;
@@ -6871,7 +6840,7 @@
 static void single_motion_search(const AV1_COMP *const cpi, MACROBLOCK *x,
                                  BLOCK_SIZE bsize, int mi_row, int mi_col,
 #if CONFIG_EXT_INTER
-                                 int ref_idx, int mv_idx,
+                                 int ref_idx,
 #endif  // CONFIG_EXT_INTER
                                  int *rate_mv) {
   MACROBLOCKD *xd = &x->e_mbd;
@@ -6884,12 +6853,11 @@
   MV mvp_full;
 #if CONFIG_EXT_INTER
   int ref = mbmi->ref_frame[ref_idx];
-  MV ref_mv = x->mbmi_ext->ref_mvs[ref][mv_idx].as_mv;
 #else
   int ref = mbmi->ref_frame[0];
-  MV ref_mv = x->mbmi_ext->ref_mvs[ref][0].as_mv;
   int ref_idx = 0;
 #endif  // CONFIG_EXT_INTER
+  MV ref_mv = x->mbmi_ext->ref_mvs[ref][0].as_mv;
 
   int tmp_col_min = x->mv_col_min;
   int tmp_col_max = x->mv_col_max;
@@ -7115,8 +7083,7 @@
 static void do_masked_motion_search(const AV1_COMP *const cpi, MACROBLOCK *x,
                                     const uint8_t *mask, int mask_stride,
                                     BLOCK_SIZE bsize, int mi_row, int mi_col,
-                                    int_mv *tmp_mv, int *rate_mv, int ref_idx,
-                                    int mv_idx) {
+                                    int_mv *tmp_mv, int *rate_mv, int ref_idx) {
   MACROBLOCKD *xd = &x->e_mbd;
   const AV1_COMMON *cm = &cpi->common;
   MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi;
@@ -7126,7 +7093,7 @@
   int sadpb = x->sadperbit16;
   MV mvp_full;
   int ref = mbmi->ref_frame[ref_idx];
-  MV ref_mv = x->mbmi_ext->ref_mvs[ref][mv_idx].as_mv;
+  MV ref_mv = x->mbmi_ext->ref_mvs[ref][0].as_mv;
 
   int tmp_col_min = x->mv_col_min;
   int tmp_col_max = x->mv_col_max;
@@ -7244,8 +7211,7 @@
 static void do_masked_motion_search_indexed(
     const AV1_COMP *const cpi, MACROBLOCK *x,
     const INTERINTER_COMPOUND_DATA *const comp_data, BLOCK_SIZE bsize,
-    int mi_row, int mi_col, int_mv *tmp_mv, int *rate_mv, int mv_idx[2],
-    int which) {
+    int mi_row, int mi_col, int_mv *tmp_mv, int *rate_mv, int which) {
   // NOTE: which values: 0 - 0 only, 1 - 1 only, 2 - both
   MACROBLOCKD *xd = &x->e_mbd;
   MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi;
@@ -7257,7 +7223,7 @@
 
   if (which == 0 || which == 2)
     do_masked_motion_search(cpi, x, mask, mask_stride, bsize, mi_row, mi_col,
-                            &tmp_mv[0], &rate_mv[0], 0, mv_idx[0]);
+                            &tmp_mv[0], &rate_mv[0], 0);
 
   if (which == 1 || which == 2) {
 // get the negative mask
@@ -7270,7 +7236,7 @@
     mask = av1_get_compound_type_mask_inverse(comp_data, sb_type);
 #endif  // CONFIG_COMPOUND_SEGMENT
     do_masked_motion_search(cpi, x, mask, mask_stride, bsize, mi_row, mi_col,
-                            &tmp_mv[1], &rate_mv[1], 1, mv_idx[1]);
+                            &tmp_mv[1], &rate_mv[1], 1);
   }
 }
 #endif  // CONFIG_EXT_INTER
@@ -7377,9 +7343,7 @@
     if (xd->left_available) lf = xd->mi[-1]->mbmi.interp_filter;
 
 #if CONFIG_EXT_INTER
-    if ((this_mode != NEWMV && this_mode != NEWFROMNEARMV &&
-         this_mode != NEW_NEWMV) ||
-        (af == lf))
+    if ((this_mode != NEWMV && this_mode != NEW_NEWMV) || (af == lf))
 #else
     if ((this_mode != NEWMV) || (af == lf))
 #endif  // CONFIG_EXT_INTER
@@ -7746,25 +7710,19 @@
   int_mv tmp_mv[2];
   int rate_mvs[2], tmp_rate_mv = 0;
   if (this_mode == NEW_NEWMV) {
-    int mv_idxs[2] = { 0, 0 };
     do_masked_motion_search_indexed(cpi, x, &mbmi->interinter_compound_data,
-                                    bsize, mi_row, mi_col, tmp_mv, rate_mvs,
-                                    mv_idxs, 2);
+                                    bsize, mi_row, mi_col, tmp_mv, rate_mvs, 2);
     tmp_rate_mv = rate_mvs[0] + rate_mvs[1];
     mbmi->mv[0].as_int = tmp_mv[0].as_int;
     mbmi->mv[1].as_int = tmp_mv[1].as_int;
   } else if (this_mode == NEW_NEARESTMV || this_mode == NEW_NEARMV) {
-    int mv_idxs[2] = { 0, 0 };
     do_masked_motion_search_indexed(cpi, x, &mbmi->interinter_compound_data,
-                                    bsize, mi_row, mi_col, tmp_mv, rate_mvs,
-                                    mv_idxs, 0);
+                                    bsize, mi_row, mi_col, tmp_mv, rate_mvs, 0);
     tmp_rate_mv = rate_mvs[0];
     mbmi->mv[0].as_int = tmp_mv[0].as_int;
   } else if (this_mode == NEAREST_NEWMV || this_mode == NEAR_NEWMV) {
-    int mv_idxs[2] = { 0, 0 };
     do_masked_motion_search_indexed(cpi, x, &mbmi->interinter_compound_data,
-                                    bsize, mi_row, mi_col, tmp_mv, rate_mvs,
-                                    mv_idxs, 1);
+                                    bsize, mi_row, mi_col, tmp_mv, rate_mvs, 1);
     tmp_rate_mv = rate_mvs[1];
     mbmi->mv[1].as_int = tmp_mv[1].as_int;
   }
@@ -7904,21 +7862,17 @@
   uint8_t *left_pred_buf[MAX_MB_PLANE];
   int left_pred_stride[MAX_MB_PLANE];
 #endif  // CONFIG_MOTION_VAR
+  int_mv *single_newmv;
 #if CONFIG_EXT_INTER
   // Pointer to array of motion vectors to use for each ref and their rates
   // Should point to first of 2 arrays in 2D array
-  int_mv (*single_newmvs)[TOTAL_REFS_PER_FRAME];
-  int (*single_newmvs_rate)[TOTAL_REFS_PER_FRAME];
+  int *single_newmv_rate;
   // Pointers costs of compound inter-intra and inter-inter predictions
   int *compmode_interintra_cost;
   int *compmode_interinter_cost;
   // Pointer to array of predicted rate-distortion
   // Should point to first of 2 arrays in 2D array
   int64_t (*modelled_rd)[TOTAL_REFS_PER_FRAME];
-#else   // CONFIG_EXT_INTER
-  // The result motion vector for each ref from the single prediction mode
-  // it is a local variable of handle_inter_mode if CONFIG_EXT_INTER
-  int_mv *single_newmv;
 #endif  // CONFIG_EXT_INTER
   InterpFilter single_filter[MB_MODE_COUNT][TOTAL_REFS_PER_FRAME];
 } HandleInterModeArgs;
@@ -7935,7 +7889,6 @@
   const int is_comp_pred = has_second_ref(mbmi);
   const PREDICTION_MODE this_mode = mbmi->mode;
 #if CONFIG_EXT_INTER
-  const int mv_idx = (this_mode == NEWFROMNEARMV) ? 1 : 0;
   const int is_comp_interintra_pred = (mbmi->ref_frame[1] == INTRA_FRAME);
 #endif  // CONFIG_EXT_INTER
   int_mv *const frame_mv = mode_mv[this_mode];
@@ -7948,8 +7901,7 @@
   if (is_comp_pred) {
 #if CONFIG_EXT_INTER
     for (i = 0; i < 2; ++i) {
-      single_newmv[refs[i]].as_int =
-          args->single_newmvs[mv_idx][refs[i]].as_int;
+      single_newmv[refs[i]].as_int = args->single_newmv[refs[i]].as_int;
     }
 
     if (this_mode == NEW_NEWMV) {
@@ -8004,12 +7956,12 @@
   } else {
 #if CONFIG_EXT_INTER
     if (is_comp_interintra_pred) {
-      x->best_mv = args->single_newmvs[mv_idx][refs[0]];
-      *rate_mv = args->single_newmvs_rate[mv_idx][refs[0]];
+      x->best_mv = args->single_newmv[refs[0]];
+      *rate_mv = args->single_newmv_rate[refs[0]];
     } else {
-      single_motion_search(cpi, x, bsize, mi_row, mi_col, 0, mv_idx, rate_mv);
-      args->single_newmvs[mv_idx][refs[0]] = x->best_mv;
-      args->single_newmvs_rate[mv_idx][refs[0]] = *rate_mv;
+      single_motion_search(cpi, x, bsize, mi_row, mi_col, 0, rate_mv);
+      args->single_newmv[refs[0]] = x->best_mv;
+      args->single_newmv_rate[refs[0]] = *rate_mv;
     }
 #else
     single_motion_search(cpi, x, bsize, mi_row, mi_col, rate_mv);
@@ -8190,7 +8142,7 @@
   (void)this_mode;
 
 #if CONFIG_EXT_INTER && CONFIG_MOTION_VAR
-  int mv_idx = (this_mode == NEWFROMNEARMV) ? 1 : 0;
+  int mv_idx = 0;
 #endif  // CONFIG_EXT_INTER && CONFIG_MOTION_VAR
 
 #if CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
@@ -8568,7 +8520,6 @@
 #if CONFIG_EXT_INTER
   int pred_exists = 1;
   const int bw = block_size_wide[bsize];
-  int mv_idx = (this_mode == NEWFROMNEARMV) ? 1 : 0;
   int_mv single_newmv[TOTAL_REFS_PER_FRAME];
   const unsigned int *const interintra_mode_cost =
       cpi->interintra_mode_cost[size_group_lookup[bsize]];
@@ -8661,7 +8612,7 @@
     cur_mv[i] = frame_mv[refs[i]];
 // Clip "next_nearest" so that it does not extend to far out of image
 #if CONFIG_EXT_INTER
-    if (this_mode != NEWMV && this_mode != NEWFROMNEARMV)
+    if (this_mode != NEWMV)
 #else
     if (this_mode != NEWMV)
 #endif  // CONFIG_EXT_INTER
@@ -9027,7 +8978,7 @@
           const uint8_t *mask = av1_get_contiguous_soft_mask(
               mbmi->interintra_wedge_index, 1, bsize);
           do_masked_motion_search(cpi, x, mask, bw, bsize, mi_row, mi_col,
-                                  &tmp_mv, &tmp_rate_mv, 0, mv_idx);
+                                  &tmp_mv, &tmp_rate_mv, 0);
           mbmi->mv[0].as_int = tmp_mv.as_int;
           av1_build_inter_predictors_sby(xd, mi_row, mi_col, &orig_dst, bsize);
           model_rd_for_sb(cpi, bsize, x, xd, 0, 0, &rate_sum, &dist_sum,
@@ -9532,12 +9483,10 @@
   int comp_pred, i, k;
   int_mv frame_mv[MB_MODE_COUNT][TOTAL_REFS_PER_FRAME];
   struct buf_2d yv12_mb[TOTAL_REFS_PER_FRAME][MAX_MB_PLANE];
-#if CONFIG_EXT_INTER
-  int_mv single_newmvs[2][TOTAL_REFS_PER_FRAME] = { { { 0 } }, { { 0 } } };
-  int single_newmvs_rate[2][TOTAL_REFS_PER_FRAME] = { { 0 }, { 0 } };
-  int64_t modelled_rd[MB_MODE_COUNT][TOTAL_REFS_PER_FRAME];
-#else
   int_mv single_newmv[TOTAL_REFS_PER_FRAME] = { { 0 } };
+#if CONFIG_EXT_INTER
+  int single_newmv_rate[TOTAL_REFS_PER_FRAME] = { 0 };
+  int64_t modelled_rd[MB_MODE_COUNT][TOTAL_REFS_PER_FRAME];
 #endif  // CONFIG_EXT_INTER
   static const int flag_list[TOTAL_REFS_PER_FRAME] = {
     0,
@@ -9730,7 +9679,6 @@
     frame_mv[ZEROMV][ref_frame].as_int = 0;
 #endif  // CONFIG_GLOBAL_MOTION
 #if CONFIG_EXT_INTER
-    frame_mv[NEWFROMNEARMV][ref_frame].as_int = INVALID_MV;
     frame_mv[NEW_NEWMV][ref_frame].as_int = INVALID_MV;
 #if CONFIG_GLOBAL_MOTION
     frame_mv[ZERO_ZEROMV][ref_frame].as_int =
@@ -10359,15 +10307,13 @@
         av1_init_rd_stats(&rd_stats);
         rd_stats.rate = rate2;
 
-// Point to variables that are maintained between loop iterations
+        // Point to variables that are maintained between loop iterations
+        args.single_newmv = single_newmv;
 #if CONFIG_EXT_INTER
-        args.single_newmvs = single_newmvs;
-        args.single_newmvs_rate = single_newmvs_rate;
+        args.single_newmv_rate = single_newmv_rate;
         args.compmode_interintra_cost = &compmode_interintra_cost;
         args.compmode_interinter_cost = &compmode_interinter_cost;
         args.modelled_rd = modelled_rd;
-#else
-        args.single_newmv = single_newmv;
 #endif  // CONFIG_EXT_INTER
         this_rd = handle_inter_mode(cpi, x, bsize, &rd_stats, &rd_stats_y,
                                     &rd_stats_uv, &disable_skip, frame_mv,
@@ -10477,39 +10423,31 @@
           clamp_mv2(&cur_mv.as_mv, xd);
 
           if (!mv_check_bounds(x, &cur_mv.as_mv)) {
-#if CONFIG_EXT_INTER
-            int_mv dummy_single_newmvs[2][TOTAL_REFS_PER_FRAME] = { { { 0 } },
-                                                                    { { 0 } } };
-            int dummy_single_newmvs_rate[2][TOTAL_REFS_PER_FRAME] = { { 0 },
-                                                                      { 0 } };
-#else
             int_mv dummy_single_newmv[TOTAL_REFS_PER_FRAME] = { { 0 } };
+#if CONFIG_EXT_INTER
+            int dummy_single_newmv_rate[TOTAL_REFS_PER_FRAME] = { 0 };
 #endif  // CONFIG_EXT_INTER
 
             frame_mv[NEARMV][ref_frame] = cur_mv;
             av1_init_rd_stats(&tmp_rd_stats);
 
-// Point to variables that are not maintained between iterations
+            // Point to variables that are not maintained between iterations
+            args.single_newmv = dummy_single_newmv;
 #if CONFIG_EXT_INTER
-            args.single_newmvs = dummy_single_newmvs;
-            args.single_newmvs_rate = dummy_single_newmvs_rate;
+            args.single_newmv_rate = dummy_single_newmv_rate;
             args.compmode_interintra_cost = &tmp_compmode_interintra_cost;
             args.compmode_interinter_cost = &tmp_compmode_interinter_cost;
             args.modelled_rd = NULL;
-#else
-            args.single_newmv = dummy_single_newmv;
 #endif  // CONFIG_EXT_INTER
             tmp_alt_rd = handle_inter_mode(
                 cpi, x, bsize, &tmp_rd_stats, &tmp_rd_stats_y, &tmp_rd_stats_uv,
                 &dummy_disable_skip, frame_mv, mi_row, mi_col, &args, best_rd);
-// Prevent pointers from escaping local scope
+            // Prevent pointers from escaping local scope
+            args.single_newmv = NULL;
 #if CONFIG_EXT_INTER
-            args.single_newmvs = NULL;
-            args.single_newmvs_rate = NULL;
+            args.single_newmv_rate = NULL;
             args.compmode_interintra_cost = NULL;
             args.compmode_interinter_cost = NULL;
-#else
-            args.single_newmv = NULL;
 #endif  // CONFIG_EXT_INTER
           }
 
@@ -11051,7 +10989,7 @@
   // are corrected.
   if (best_mbmode.mode == NEWMV
 #if CONFIG_EXT_INTER
-      || best_mbmode.mode == NEWFROMNEARMV || best_mbmode.mode == NEW_NEWMV
+      || best_mbmode.mode == NEW_NEWMV
 #endif  // CONFIG_EXT_INTER
       ) {
     const MV_REFERENCE_FRAME refs[2] = { best_mbmode.ref_frame[0],
@@ -11580,11 +11518,7 @@
   PREDICTION_MODE mode_uv = DC_PRED;
   const int intra_cost_penalty = av1_get_intra_cost_penalty(
       cm->base_qindex, cm->y_dc_delta_q, cm->bit_depth);
-#if CONFIG_EXT_INTER
-  int_mv seg_mvs[4][2][TOTAL_REFS_PER_FRAME];
-#else
   int_mv seg_mvs[4][TOTAL_REFS_PER_FRAME];
-#endif  // CONFIG_EXT_INTER
   b_mode_info best_bmodes[4];
   int best_skip2 = 0;
   int ref_frame_skip_mask[2] = { 0 };
@@ -11619,16 +11553,8 @@
 
   for (i = 0; i < 4; i++) {
     int j;
-#if CONFIG_EXT_INTER
-    int k;
-
-    for (k = 0; k < 2; k++)
-      for (j = 0; j < TOTAL_REFS_PER_FRAME; j++)
-        seg_mvs[i][k][j].as_int = INVALID_MV;
-#else
     for (j = 0; j < TOTAL_REFS_PER_FRAME; j++)
       seg_mvs[i][j].as_int = INVALID_MV;
-#endif  // CONFIG_EXT_INTER
   }
 
   estimate_ref_frame_costs(cm, xd, segment_id, ref_costs_single, ref_costs_comp,
@@ -11656,7 +11582,6 @@
     }
     frame_mv[NEWMV][ref_frame].as_int = INVALID_MV;
 #if CONFIG_EXT_INTER
-    frame_mv[NEWFROMNEARMV][ref_frame].as_int = INVALID_MV;
 #endif  // CONFIG_EXT_INTER
     frame_mv[ZEROMV][ref_frame].as_int = 0;
   }
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 8195fa4..5a1d83c 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -36,15 +36,14 @@
 #if CONFIG_EXT_INTER
 enum {
   INTER_ALL = (1 << NEARESTMV) | (1 << NEARMV) | (1 << ZEROMV) | (1 << NEWMV) |
-              (1 << NEWFROMNEARMV) | (1 << NEAREST_NEARESTMV) |
-              (1 << NEAR_NEARMV) | (1 << NEAREST_NEARMV) |
-              (1 << NEAR_NEARESTMV) | (1 << NEW_NEWMV) | (1 << NEAREST_NEWMV) |
-              (1 << NEAR_NEWMV) | (1 << NEW_NEARMV) | (1 << NEW_NEARESTMV) |
-              (1 << ZERO_ZEROMV),
+              (1 << NEAREST_NEARESTMV) | (1 << NEAR_NEARMV) |
+              (1 << NEAREST_NEARMV) | (1 << NEAR_NEARESTMV) | (1 << NEW_NEWMV) |
+              (1 << NEAREST_NEWMV) | (1 << NEAR_NEWMV) | (1 << NEW_NEARMV) |
+              (1 << NEW_NEARESTMV) | (1 << ZERO_ZEROMV),
   INTER_NEAREST = (1 << NEARESTMV) | (1 << NEAREST_NEARESTMV) |
                   (1 << NEAREST_NEARMV) | (1 << NEAR_NEARESTMV) |
                   (1 << NEW_NEARESTMV) | (1 << NEAREST_NEWMV),
-  INTER_NEAREST_NEW = (1 << NEARESTMV) | (1 << NEWMV) | (1 << NEWFROMNEARMV) |
+  INTER_NEAREST_NEW = (1 << NEARESTMV) | (1 << NEWMV) |
                       (1 << NEAREST_NEARESTMV) | (1 << NEW_NEWMV) |
                       (1 << NEAR_NEARESTMV) | (1 << NEAREST_NEARMV) |
                       (1 << NEW_NEARESTMV) | (1 << NEAREST_NEWMV) |
@@ -54,12 +53,12 @@
                        (1 << NEAREST_NEARMV) | (1 << NEAR_NEARESTMV) |
                        (1 << NEAREST_NEWMV) | (1 << NEW_NEARESTMV),
   INTER_NEAREST_NEW_ZERO =
-      (1 << NEARESTMV) | (1 << ZEROMV) | (1 << NEWMV) | (1 << NEWFROMNEARMV) |
+      (1 << NEARESTMV) | (1 << ZEROMV) | (1 << NEWMV) |
       (1 << NEAREST_NEARESTMV) | (1 << ZERO_ZEROMV) | (1 << NEW_NEWMV) |
       (1 << NEAREST_NEARMV) | (1 << NEAR_NEARESTMV) | (1 << NEW_NEARESTMV) |
       (1 << NEAREST_NEWMV) | (1 << NEW_NEARMV) | (1 << NEAR_NEWMV),
   INTER_NEAREST_NEAR_NEW =
-      (1 << NEARESTMV) | (1 << NEARMV) | (1 << NEWMV) | (1 << NEWFROMNEARMV) |
+      (1 << NEARESTMV) | (1 << NEARMV) | (1 << NEWMV) |
       (1 << NEAREST_NEARESTMV) | (1 << NEW_NEWMV) | (1 << NEAREST_NEARMV) |
       (1 << NEAR_NEARESTMV) | (1 << NEW_NEARESTMV) | (1 << NEAREST_NEWMV) |
       (1 << NEW_NEARMV) | (1 << NEAR_NEWMV) | (1 << NEAR_NEARMV),