FG8 combined tests rebased on AVM-v10

Rebased fg8/CT3 commit 9a04494b20 on AVM-v10 tag

STATS_CHANGED
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 2740604..a10802d 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -4212,8 +4212,10 @@
   ColorCost color_cost;
 #if CONFIG_PALETTE_IMPROVEMENTS
 #if CONFIG_PALETTE_LINE_COPY
+#if !CONFIG_PLT_DIR_CTX
   aom_cdf_prob *direction_cdf;
   PaletteDirectionCost direction_cost;
+#endif  // !CONFIG_PLT_DIR_CTX
 #endif  // CONFIG_PALETTE_LINE_COPY
   IdentityRowCdf identity_row_cdf;
   IdentityRowCost identity_row_cost;
diff --git a/av1/common/entropy.c b/av1/common/entropy.c
index d0ba1f8..54a13f2 100644
--- a/av1/common/entropy.c
+++ b/av1/common/entropy.c
@@ -70,8 +70,10 @@
            av1_default_coeff_base_lf_multi_uv_cdfs[index]);
   av1_copy(cm->fc->coeff_base_lf_eob_uv_cdf,
            av1_default_coeff_base_lf_eob_multi_uv_cdfs[index]);
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
   av1_copy(cm->fc->coeff_br_lf_uv_cdf,
            av1_default_coeff_lps_lf_multi_uv_cdfs[index]);
+#endif
   av1_copy(cm->fc->coeff_br_uv_cdf, av1_default_coeff_lps_multi_uv_cdfs[index]);
   av1_copy(cm->fc->coeff_base_uv_cdf,
            av1_default_coeff_base_multi_uv_cdfs[index]);
@@ -85,7 +87,9 @@
   av1_copy(cm->fc->eob_flag_cdf512, av1_default_eob_multi512_cdfs[index]);
   av1_copy(cm->fc->eob_flag_cdf1024, av1_default_eob_multi1024_cdfs[index]);
   av1_copy(cm->fc->coeff_base_ph_cdf, av1_default_coeff_base_ph_cdfs[index]);
+#if !CONFIG_COEFF_BR_PH_BYPASS
   av1_copy(cm->fc->coeff_br_ph_cdf, av1_default_coeff_br_ph_cdfs[index]);
+#endif
   av1_copy(cm->fc->coeff_base_bob_cdf,
            av1_default_coeff_base_bob_multi_cdfs[index]);
 #if CONFIG_DIP
@@ -201,7 +205,9 @@
   RESET_CDF_COUNTER(fc->coeff_br_lf_cdf, BR_CDF_SIZE);
   RESET_CDF_COUNTER(fc->coeff_base_lf_uv_cdf, LF_BASE_SYMBOLS);
   RESET_CDF_COUNTER(fc->coeff_base_lf_eob_uv_cdf, LF_BASE_SYMBOLS - 1);
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
   RESET_CDF_COUNTER(fc->coeff_br_lf_uv_cdf, BR_CDF_SIZE);
+#endif
   RESET_CDF_COUNTER(fc->coeff_base_uv_cdf, 4);
   RESET_CDF_COUNTER(fc->coeff_base_eob_uv_cdf, 3);
   RESET_CDF_COUNTER(fc->coeff_br_uv_cdf, BR_CDF_SIZE);
@@ -305,7 +311,9 @@
 #if CONFIG_PALETTE_LINE_COPY
   RESET_CDF_COUNTER(fc->identity_row_cdf_y, 3);
   RESET_CDF_COUNTER(fc->identity_row_cdf_uv, 3);
+#if !CONFIG_PLT_DIR_CTX
   RESET_CDF_COUNTER(fc->palette_direction_cdf, 2);
+#endif  // !CONFIG_PLT_DIR_CTX
 #else
   RESET_CDF_COUNTER(fc->identity_row_cdf_y, 2);
   RESET_CDF_COUNTER(fc->identity_row_cdf_uv, 2);
@@ -424,10 +432,14 @@
   RESET_CDF_COUNTER(fc->wienerns_uv_sym_cdf, 2);
   RESET_CDF_COUNTER(fc->wienerns_4part_cdf, 4);
   RESET_CDF_COUNTER(fc->pc_wiener_restore_cdf, 2);
+#if !CONFIG_MERGE_PARA_CTX
   RESET_CDF_COUNTER(fc->merged_param_cdf, 2);
+#endif  // !CONFIG_MERGE_PARA_CTX
   RESET_CDF_COUNTER(fc->y_mode_set_cdf, INTRA_MODE_SETS);
   RESET_CDF_COUNTER(fc->y_mode_idx_cdf_0, FIRST_MODE_COUNT);
+#if !CONFIG_CTX_Y_SECOND_MODE
   RESET_CDF_COUNTER(fc->y_mode_idx_cdf_1, SECOND_MODE_COUNT);
+#endif  // !CONFIG_CTX_Y_SECOND_MODE
   RESET_CDF_COUNTER(fc->uv_mode_cdf, UV_INTRA_MODES - 1);
   RESET_CDF_COUNTER(fc->cfl_cdf, 2);
 
@@ -528,6 +540,8 @@
   }
 
   RESET_CDF_COUNTER(fc->coeff_base_ph_cdf, NUM_BASE_LEVELS + 2);
+#if !CONFIG_COEFF_BR_PH_BYPASS
   RESET_CDF_COUNTER(fc->coeff_br_ph_cdf, BR_CDF_SIZE);
+#endif
   RESET_CDF_COUNTER(fc->cctx_type_cdf, CCTX_TYPES);
 }
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index ca57556..df411a8 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -162,7 +162,7 @@
                   29340, 31013, 31870),
         75 },
     };
-
+#if !CONFIG_CTX_Y_SECOND_MODE
 static const aom_cdf_prob
     default_y_second_mode_cdf[Y_MODE_CONTEXTS][CDF_SIZE(SECOND_MODE_COUNT)] = {
       { AOM_CDF16(2614, 4872, 7327, 9645, 11546, 13349, 15504, 17424, 19397,
@@ -175,7 +175,7 @@
                   19690, 21835, 25356, 27731, 29157, 30362),
         76 },
     };
-
+#endif  // !CONFIG_CTX_Y_SECOND_MODE
 static const aom_cdf_prob
     default_uv_mode_cdf[UV_MODE_CONTEXTS][CDF_SIZE(UV_INTRA_MODES - 1)] = {
       { AOM_CDF13(13848, 18930, 20641, 22133, 23986, 25450, 28075, 28950, 29740,
@@ -6205,9 +6205,11 @@
       { AOM_CDF3(10923, 21845), 30 },
       { AOM_CDF3(10923, 21845), 56 },
     };
+#if !CONFIG_PLT_DIR_CTX
 static const aom_cdf_prob default_palette_direction_cdf[CDF_SIZE(2)] = {
   AOM_CDF2(21697), 6
 };
+#endif  // !CONFIG_PLT_DIR_CTX
 #else
 static const aom_cdf_prob default_identity_row_cdf_y[3][CDF_SIZE(2)] = {
   { AOM_CDF2(16384), 28 },
@@ -6989,10 +6991,11 @@
 static const aom_cdf_prob default_pc_wiener_restore_cdf[CDF_SIZE(2)] = {
   AOM_CDF2(14330), 8
 };
-
+#if !CONFIG_MERGE_PARA_CTX
 static const aom_cdf_prob default_merged_param_cdf[CDF_SIZE(2)] = {
   AOM_CDF2(14319), 7
 };
+#endif  // !CONFIG_MERGE_PARA_CTX
 
 #if CONFIG_DELTAQ_OPT
 static const aom_cdf_prob default_delta_q_cdf[CDF_SIZE(DELTA_Q_PROBS + 1)] = {
@@ -7540,8 +7543,10 @@
 #if CONFIG_PALETTE_IMPROVEMENTS
   av1_copy(fc->identity_row_cdf_y, default_identity_row_cdf_y);
   av1_copy(fc->identity_row_cdf_uv, default_identity_row_cdf_uv);
+#if !CONFIG_PLT_DIR_CTX
 #if CONFIG_PALETTE_LINE_COPY
   av1_copy(fc->palette_direction_cdf, default_palette_direction_cdf);
+#endif  // !CONFIG_PLT_DIR_CTX
 #endif  // CONFIG_PALETTE_LINE_COPY
 #endif  // CONFIG_PALETTE_IMPROVEMENTS
   av1_copy(fc->palette_y_color_index_cdf, default_palette_y_color_index_cdf);
@@ -7691,10 +7696,14 @@
   av1_copy(fc->wienerns_uv_sym_cdf, default_wienerns_uv_sym_cdf);
   av1_copy(fc->wienerns_4part_cdf, default_wienerns_4part_cdf);
   av1_copy(fc->pc_wiener_restore_cdf, default_pc_wiener_restore_cdf);
+#if !CONFIG_MERGE_PARA_CTX
   av1_copy(fc->merged_param_cdf, default_merged_param_cdf);
+#endif  // CONFIG_MERGE_PARA_CTX
   av1_copy(fc->y_mode_set_cdf, default_y_mode_set_cdf);
   av1_copy(fc->y_mode_idx_cdf_0, default_y_first_mode_cdf);
+#if !CONFIG_CTX_Y_SECOND_MODE
   av1_copy(fc->y_mode_idx_cdf_1, default_y_second_mode_cdf);
+#endif  // !CONFIG_CTX_Y_SECOND_MODE
   av1_copy(fc->uv_mode_cdf, default_uv_mode_cdf);
   av1_copy(fc->cfl_cdf, default_cfl_cdf);
   av1_copy(fc->mrl_index_cdf, default_mrl_index_cdf);
@@ -7985,8 +7994,10 @@
                          ctx_tr->coeff_base_lf_uv_cdf, LF_BASE_SYMBOLS);
   CUMULATIVE_AVERAGE_CDF(ctx_left->coeff_base_lf_eob_uv_cdf,
                          ctx_tr->coeff_base_lf_eob_uv_cdf, LF_BASE_SYMBOLS - 1);
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
   CUMULATIVE_AVERAGE_CDF(ctx_left->coeff_br_lf_uv_cdf,
                          ctx_tr->coeff_br_lf_uv_cdf, BR_CDF_SIZE);
+#endif
 
   CUMULATIVE_AVERAGE_CDF(ctx_left->inter_warp_mode_cdf,
                          ctx_tr->inter_warp_mode_cdf, 2);
@@ -8116,8 +8127,10 @@
                          ctx_tr->identity_row_cdf_y, 3);
   CUMULATIVE_AVERAGE_CDF(ctx_left->identity_row_cdf_uv,
                          ctx_tr->identity_row_cdf_uv, 3);
+#if !CONFIG_PLT_DIR_CTX
   CUMULATIVE_AVERAGE_CDF(ctx_left->palette_direction_cdf,
                          ctx_tr->palette_direction_cdf, 2);
+#endif  // !CONFIG_PLT_DIR_CTX
 #else
   CUMULATIVE_AVERAGE_CDF(ctx_left->identity_row_cdf_y,
                          ctx_tr->identity_row_cdf_y, 2);
@@ -8242,8 +8255,10 @@
                          ctx_tr->wienerns_4part_cdf, 4);
   CUMULATIVE_AVERAGE_CDF(ctx_left->pc_wiener_restore_cdf,
                          ctx_tr->pc_wiener_restore_cdf, 2);
+#if !CONFIG_MERGE_PARA_CTX
   CUMULATIVE_AVERAGE_CDF(ctx_left->merged_param_cdf, ctx_tr->merged_param_cdf,
                          2);
+#endif  // !CONFIG_MERGE_PARA_CTX
   CUMULATIVE_AVERAGE_CDF(ctx_left->fsc_mode_cdf, ctx_tr->fsc_mode_cdf,
                          FSC_MODES);
   CUMULATIVE_AVERAGE_CDF(ctx_left->mrl_index_cdf, ctx_tr->mrl_index_cdf,
@@ -8275,8 +8290,10 @@
                          INTRA_MODE_SETS);
   CUMULATIVE_AVERAGE_CDF(ctx_left->y_mode_idx_cdf_0, ctx_tr->y_mode_idx_cdf_0,
                          FIRST_MODE_COUNT);
+#if !CONFIG_CTX_Y_SECOND_MODE
   CUMULATIVE_AVERAGE_CDF(ctx_left->y_mode_idx_cdf_1, ctx_tr->y_mode_idx_cdf_1,
                          SECOND_MODE_COUNT);
+#endif  // !CONFIG_CTX_Y_SECOND_MODE
   CUMULATIVE_AVERAGE_CDF(ctx_left->uv_mode_cdf, ctx_tr->uv_mode_cdf,
                          UV_INTRA_MODES - 1);
 
@@ -8376,7 +8393,9 @@
 
   CUMULATIVE_AVERAGE_CDF(ctx_left->coeff_base_ph_cdf, ctx_tr->coeff_base_ph_cdf,
                          4);
+#if !CONFIG_COEFF_BR_PH_BYPASS
   CUMULATIVE_AVERAGE_CDF(ctx_left->coeff_br_ph_cdf, ctx_tr->coeff_br_ph_cdf, 4);
+#endif
   CUMULATIVE_AVERAGE_CDF(ctx_left->cctx_type_cdf, ctx_tr->cctx_type_cdf,
                          CCTX_TYPES);
 }
@@ -8500,7 +8519,9 @@
   SHIFT_CDF(ctx_ptr->coeff_base_eob_uv_cdf, 3);
   SHIFT_CDF(ctx_ptr->coeff_base_lf_uv_cdf, LF_BASE_SYMBOLS);
   SHIFT_CDF(ctx_ptr->coeff_base_lf_eob_uv_cdf, LF_BASE_SYMBOLS - 1);
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
   SHIFT_CDF(ctx_ptr->coeff_br_lf_uv_cdf, BR_CDF_SIZE);
+#endif
 
   SHIFT_CDF(ctx_ptr->inter_warp_mode_cdf, 2);
 #if CONFIG_REDESIGN_WARP_MODES_SIGNALING_FLOW
@@ -8590,7 +8611,9 @@
 #if CONFIG_PALETTE_LINE_COPY
   SHIFT_CDF(ctx_ptr->identity_row_cdf_y, 3);
   SHIFT_CDF(ctx_ptr->identity_row_cdf_uv, 3);
+#if !CONFIG_PLT_DIR_CTX
   SHIFT_CDF(ctx_ptr->palette_direction_cdf, 2);
+#endif  // !CONFIG_PLT_DIR_CTX
 #else
   SHIFT_CDF(ctx_ptr->identity_row_cdf_y, 2);
   SHIFT_CDF(ctx_ptr->identity_row_cdf_uv, 2);
@@ -8678,7 +8701,9 @@
   SHIFT_CDF(ctx_ptr->wienerns_uv_sym_cdf, 2);
   SHIFT_CDF(ctx_ptr->wienerns_4part_cdf, 4);
   SHIFT_CDF(ctx_ptr->pc_wiener_restore_cdf, 2);
+#if !CONFIG_MERGE_PARA_CTX
   SHIFT_CDF(ctx_ptr->merged_param_cdf, 2);
+#endif  // !CONFIG_MERGE_PARA_CTX
   SHIFT_CDF(ctx_ptr->fsc_mode_cdf, FSC_MODES);
   SHIFT_CDF(ctx_ptr->mrl_index_cdf, MRL_LINE_NUMBER);
 #if CONFIG_MRLS_IMPROVE
@@ -8699,7 +8724,9 @@
 #endif  // CONFIG_ENABLE_MHCCP
   SHIFT_CDF(ctx_ptr->y_mode_set_cdf, INTRA_MODE_SETS);
   SHIFT_CDF(ctx_ptr->y_mode_idx_cdf_0, FIRST_MODE_COUNT);
+#if !CONFIG_CTX_Y_SECOND_MODE
   SHIFT_CDF(ctx_ptr->y_mode_idx_cdf_1, SECOND_MODE_COUNT);
+#endif  // !CONFIG_CTX_Y_SECOND_MODE
   SHIFT_CDF(ctx_ptr->uv_mode_cdf, UV_INTRA_MODES - 1);
 
   SHIFT_CDF(ctx_ptr->region_type_cdf, REGION_TYPES);
@@ -8769,7 +8796,9 @@
   }
 
   SHIFT_CDF(ctx_ptr->coeff_base_ph_cdf, 4);
+#if !CONFIG_COEFF_BR_PH_BYPASS
   SHIFT_CDF(ctx_ptr->coeff_br_ph_cdf, 4);
+#endif
   SHIFT_CDF(ctx_ptr->cctx_type_cdf, CCTX_TYPES);
 }
 #endif  // CONFIG_TILE_CDFS_AVG_TO_FRAME
@@ -8934,8 +8963,10 @@
               LF_BASE_SYMBOLS);
   AVERAGE_CDF(ctx_left->coeff_base_lf_eob_uv_cdf,
               ctx_tr->coeff_base_lf_eob_uv_cdf, LF_BASE_SYMBOLS - 1);
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
   AVERAGE_CDF(ctx_left->coeff_br_lf_uv_cdf, ctx_tr->coeff_br_lf_uv_cdf,
               BR_CDF_SIZE);
+#endif
 
   AVERAGE_CDF(ctx_left->inter_warp_mode_cdf, ctx_tr->inter_warp_mode_cdf, 2);
 #if CONFIG_REDESIGN_WARP_MODES_SIGNALING_FLOW
@@ -9054,8 +9085,10 @@
 #if CONFIG_PALETTE_LINE_COPY
   AVERAGE_CDF(ctx_left->identity_row_cdf_y, ctx_tr->identity_row_cdf_y, 3);
   AVERAGE_CDF(ctx_left->identity_row_cdf_uv, ctx_tr->identity_row_cdf_uv, 3);
+#if !CONFIG_PLT_DIR_CTX
   AVERAGE_CDF(ctx_left->palette_direction_cdf, ctx_tr->palette_direction_cdf,
               2);
+#endif  // !CONFIG_PLT_DIR_CTX
 #else
   CUMULATIVE_AVERAGE_CDF(ctx_left->identity_row_cdf_y,
                          ctx_tr->identity_row_cdf_y, 2);
@@ -9153,7 +9186,9 @@
   AVERAGE_CDF(ctx_left->wienerns_4part_cdf, ctx_tr->wienerns_4part_cdf, 4);
   AVERAGE_CDF(ctx_left->pc_wiener_restore_cdf, ctx_tr->pc_wiener_restore_cdf,
               2);
+#if !CONFIG_MERGE_PARA_CTX
   AVERAGE_CDF(ctx_left->merged_param_cdf, ctx_tr->merged_param_cdf, 2);
+#endif  // !CONFIG_MERGE_PARA_CTX
   AVERAGE_CDF(ctx_left->fsc_mode_cdf, ctx_tr->fsc_mode_cdf, FSC_MODES);
   AVERAGE_CDF(ctx_left->mrl_index_cdf, ctx_tr->mrl_index_cdf, MRL_LINE_NUMBER);
 #if CONFIG_MRLS_IMPROVE
@@ -9179,8 +9214,10 @@
               INTRA_MODE_SETS);
   AVERAGE_CDF(ctx_left->y_mode_idx_cdf_0, ctx_tr->y_mode_idx_cdf_0,
               FIRST_MODE_COUNT);
+#if !CONFIG_CTX_Y_SECOND_MODE
   AVERAGE_CDF(ctx_left->y_mode_idx_cdf_1, ctx_tr->y_mode_idx_cdf_1,
               SECOND_MODE_COUNT);
+#endif  // !CONFIG_CTX_Y_SECOND_MODE
   AVERAGE_CDF(ctx_left->uv_mode_cdf, ctx_tr->uv_mode_cdf, UV_INTRA_MODES - 1);
   AVERAGE_CDF(ctx_left->region_type_cdf, ctx_tr->region_type_cdf, REGION_TYPES);
 
@@ -9265,7 +9302,9 @@
   }
 
   AVERAGE_CDF(ctx_left->coeff_base_ph_cdf, ctx_tr->coeff_base_ph_cdf, 4);
+#if !CONFIG_COEFF_BR_PH_BYPASS
   AVERAGE_CDF(ctx_left->coeff_br_ph_cdf, ctx_tr->coeff_br_ph_cdf, 4);
+#endif
   AVERAGE_CDF(ctx_left->cctx_type_cdf, ctx_tr->cctx_type_cdf, CCTX_TYPES);
 }
 #endif  // CONFIG_ENHANCED_FRAME_CONTEXT_INIT
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index 5a04c23..154b58f 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -190,8 +190,12 @@
 #if CONFIG_CONTEXT_DERIVATION
   aom_cdf_prob v_txb_skip_cdf[V_TXB_SKIP_CONTEXTS][CDF_SIZE(2)];
 #endif  // CONFIG_CONTEXT_DERIVATION
+#if CONFIG_EOB_PT_CTX_REDUCTION
+  aom_cdf_prob eob_extra_cdf[CDF_SIZE(2)];
+#else
   aom_cdf_prob eob_extra_cdf[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS]
                             [CDF_SIZE(2)];
+#endif
   aom_cdf_prob dc_sign_cdf[PLANE_TYPES][DC_SIGN_GROUPS][DC_SIGN_CONTEXTS]
                           [CDF_SIZE(2)];
 #if CONFIG_CONTEXT_DERIVATION
@@ -249,7 +253,9 @@
 #endif  // CONFIG_TCQ
                                 [CDF_SIZE(4)];
   aom_cdf_prob coeff_base_eob_uv_cdf[SIG_COEF_CONTEXTS_EOB][CDF_SIZE(3)];
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
   aom_cdf_prob coeff_br_lf_uv_cdf[LF_LEVEL_CONTEXTS_UV][CDF_SIZE(BR_CDF_SIZE)];
+#endif
   aom_cdf_prob coeff_br_uv_cdf[LEVEL_CONTEXTS_UV][CDF_SIZE(BR_CDF_SIZE)];
   aom_cdf_prob idtx_sign_cdf[TX_SIZES][IDTX_SIGN_CONTEXTS][CDF_SIZE(2)];
   aom_cdf_prob coeff_base_cdf_idtx[TX_SIZES][IDTX_SIG_COEF_CONTEXTS]
@@ -259,8 +265,9 @@
   aom_cdf_prob coeff_base_bob_cdf[TX_SIZES][SIG_COEF_CONTEXTS_BOB][CDF_SIZE(3)];
   aom_cdf_prob coeff_base_ph_cdf[COEFF_BASE_PH_CONTEXTS]
                                 [CDF_SIZE(NUM_BASE_LEVELS + 2)];
+#if !CONFIG_COEFF_BR_PH_BYPASS
   aom_cdf_prob coeff_br_ph_cdf[COEFF_BR_PH_CONTEXTS][CDF_SIZE(BR_CDF_SIZE)];
-
+#endif
 #if CONFIG_OPT_INTER_MODE_CTX
   aom_cdf_prob inter_single_mode_cdf[INTER_MODE_CONTEXTS]
                                     [CDF_SIZE(INTER_SINGLE_MODES)];
@@ -422,7 +429,9 @@
 #if CONFIG_PALETTE_LINE_COPY
   aom_cdf_prob identity_row_cdf_y[PALETTE_ROW_FLAG_CONTEXTS][CDF_SIZE(3)];
   aom_cdf_prob identity_row_cdf_uv[PALETTE_ROW_FLAG_CONTEXTS][CDF_SIZE(3)];
+#if !CONFIG_PLT_DIR_CTX
   aom_cdf_prob palette_direction_cdf[CDF_SIZE(2)];
+#endif  // !CONFIG_PLT_DIR_CTX
 #else
   aom_cdf_prob identity_row_cdf_y[PALETTE_ROW_FLAG_CONTEXTS][CDF_SIZE(2)];
   aom_cdf_prob identity_row_cdf_uv[PALETTE_ROW_FLAG_CONTEXTS][CDF_SIZE(2)];
@@ -548,7 +557,9 @@
   aom_cdf_prob wienerns_uv_sym_cdf[CDF_SIZE(2)];
   aom_cdf_prob wienerns_4part_cdf[WIENERNS_4PART_CTX_MAX][CDF_SIZE(4)];
   aom_cdf_prob pc_wiener_restore_cdf[CDF_SIZE(2)];
+#if !CONFIG_MERGE_PARA_CTX
   aom_cdf_prob merged_param_cdf[CDF_SIZE(2)];
+#endif  // !CONFIG_MERGE_PARA_CTX
 #if CONFIG_IMPROVED_INTRA_DIR_PRED
   aom_cdf_prob mrl_index_cdf[MRL_INDEX_CONTEXTS][CDF_SIZE(MRL_LINE_NUMBER)];
 #else
@@ -582,7 +593,9 @@
   // y mode cdf
   aom_cdf_prob y_mode_set_cdf[CDF_SIZE(INTRA_MODE_SETS)];
   aom_cdf_prob y_mode_idx_cdf_0[Y_MODE_CONTEXTS][CDF_SIZE(FIRST_MODE_COUNT)];
+#if !CONFIG_CTX_Y_SECOND_MODE
   aom_cdf_prob y_mode_idx_cdf_1[Y_MODE_CONTEXTS][CDF_SIZE(SECOND_MODE_COUNT)];
+#endif  // !CONFIG_CTX_Y_SECOND_MODE
   aom_cdf_prob uv_mode_cdf[UV_MODE_CONTEXTS][CDF_SIZE(UV_INTRA_MODES - 1)];
   aom_cdf_prob cfl_cdf[CFL_CONTEXTS][CDF_SIZE(2)];
   aom_cdf_prob do_split_cdf[PARTITION_STRUCTURE_NUM][PARTITION_CONTEXTS]
diff --git a/av1/common/token_cdfs.h b/av1/common/token_cdfs.h
index 837e2c8..4d9fa22 100644
--- a/av1/common/token_cdfs.h
+++ b/av1/common/token_cdfs.h
@@ -1145,6 +1145,15 @@
       },
     };
 
+#if CONFIG_EOB_PT_CTX_REDUCTION
+static const aom_cdf_prob av1_default_eob_extra_cdfs[TOKEN_CDF_Q_CTXS]
+                                                    [CDF_SIZE(2)] = {
+                                                      { AOM_CDF2(16384), 0 },
+                                                      { AOM_CDF2(16384), 0 },
+                                                      { AOM_CDF2(16384), 0 },
+                                                      { AOM_CDF2(16384), 0 },
+                                                    };
+#else
 static const aom_cdf_prob
     av1_default_eob_extra_cdfs[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
                               [EOB_COEF_CONTEXTS][CDF_SIZE(2)] = {
@@ -1637,6 +1646,7 @@
                                     },
                                 },
                               };
+#endif
 
 #if CONFIG_EOB_POS_LUMA
 static const aom_cdf_prob
@@ -10326,7 +10336,7 @@
                                         { AOM_CDF4(7108, 15722, 21972), 90 },
                                     },
                                   };
-
+#if !CONFIG_COEFF_BR_PH_BYPASS
 static const aom_cdf_prob
     av1_default_coeff_br_ph_cdfs[TOKEN_CDF_Q_CTXS][COEFF_BR_PH_CONTEXTS]
                                 [CDF_SIZE(BR_CDF_SIZE)] = {
@@ -10367,6 +10377,7 @@
                                       { AOM_CDF4(6535, 12315, 17263), 101 },
                                   },
                                 };
+#endif
 
 #if CONFIG_DIP
 static const aom_cdf_prob default_intra_dip_mode_n6_cdf[CDF_SIZE(6)] = {
diff --git a/av1/common/txb_common.h b/av1/common/txb_common.h
index 07792b0..2ef6811 100644
--- a/av1/common/txb_common.h
+++ b/av1/common/txb_common.h
@@ -147,11 +147,13 @@
   return mag;
 }
 
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
 static AOM_FORCE_INLINE int get_br_ctx_lf_eob_chroma(const int c,
                                                      const TX_CLASS tx_class) {
   if (tx_class == TX_CLASS_2D && c == 0) return 0;
   return 4;
 }
+#endif
 
 static INLINE int get_br_ctx_2d_chroma(const uint8_t *const levels, const int c,
                                        const int bwl) {
@@ -193,6 +195,7 @@
   return mag + 4;
 }
 
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
 // This function returns the low range context index/increment for the
 // coefficients residing in the low-frequency region for 1D and 2D
 // transforms and covers the 1D and 2D TX DC terms. For chroma only.
@@ -225,6 +228,7 @@
   }
   return mag + 4;
 }
+#endif
 
 // This function returns the low range context index/increment for the
 // coefficients residing in the higher-frequency default region
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index d01e782..1c98604 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -3200,12 +3200,18 @@
   }
 }
 
-static AOM_INLINE void read_wiener_filter(MACROBLOCKD *xd, int wiener_win,
-                                          WienerInfo *wiener_info,
-                                          WienerInfoBank *bank,
-                                          aom_reader *rb) {
+static AOM_INLINE void read_wiener_filter(
+#if !CONFIG_MERGE_PARA_CTX
+    MACROBLOCKD *xd,
+#endif  // !CONFIG_MERGE_PARA_CTX
+    int wiener_win, WienerInfo *wiener_info, WienerInfoBank *bank,
+    aom_reader *rb) {
+#if CONFIG_MERGE_PARA_CTX
+  const int exact_match = aom_read_bit(rb, ACCT_INFO("exact_match"));
+#else
   const int exact_match = aom_read_symbol(rb, xd->tile_ctx->merged_param_cdf, 2,
                                           ACCT_INFO("exact_match"));
+#endif  // CONFIG_MERGE_PARA_CTX
   int k;
   for (k = 0; k < bank->bank_size - 1; ++k) {
     if (aom_read_literal(rb, 1, ACCT_INFO("bank_size"))) break;
@@ -3282,12 +3288,17 @@
   av1_add_to_wiener_bank(bank, wiener_info);
 }
 
-static AOM_INLINE void read_sgrproj_filter(MACROBLOCKD *xd,
-                                           SgrprojInfo *sgrproj_info,
-                                           SgrprojInfoBank *bank,
-                                           aom_reader *rb) {
+static AOM_INLINE void read_sgrproj_filter(
+#if !CONFIG_MERGE_PARA_CTX
+    MACROBLOCKD *xd,
+#endif  // !CONFIG_MERGE_PARA_CTX
+    SgrprojInfo *sgrproj_info, SgrprojInfoBank *bank, aom_reader *rb) {
+#if CONFIG_MERGE_PARA_CTX
+  const int exact_match = aom_read_bit(rb, ACCT_INFO("exact_match"));
+#else
   const int exact_match = aom_read_symbol(rb, xd->tile_ctx->merged_param_cdf, 2,
                                           ACCT_INFO("exact_match"));
+#endif  // CONFIG_MERGE_PARA_CTX
   int k;
   for (k = 0; k < bank->bank_size - 1; ++k) {
     if (aom_read_literal(rb, 1, ACCT_INFO("bank"))) break;
@@ -3445,8 +3456,12 @@
   read_match_indices(&rsi->frame_filters, rb, nopcw);
 #endif  // CONFIG_COMBINE_PC_NS_WIENER_ADD
   for (int c_id = 0; c_id < num_classes; ++c_id) {
+#if CONFIG_MERGE_PARA_CTX
+    const int exact_match = aom_read_bit(rb, ACCT_INFO("exact_match"));
+#else
     const int exact_match = aom_read_symbol(rb, xd->tile_ctx->merged_param_cdf,
                                             2, ACCT_INFO("exact_match"));
+#endif  // CONFIG_MERGE_PARA_CTX
     skip_filter_read_for_class[c_id] = exact_match;
   }
   const WienernsFilterParameters *nsfilter_params =
@@ -3543,8 +3558,12 @@
   if (rsi->frame_filters_on) return;
 #endif  // CONFIG_COMBINE_PC_NS_WIENER
   for (int c_id = 0; c_id < num_classes; ++c_id) {
+#if CONFIG_MERGE_PARA_CTX
+    const int exact_match = aom_read_bit(rb, ACCT_INFO("exact_match"));
+#else
     const int exact_match = aom_read_symbol(rb, xd->tile_ctx->merged_param_cdf,
                                             2, ACCT_INFO("exact_match"));
+#endif  // CONFIG_MERGE_PARA_CTX
     int ref;
     for (ref = 0; ref < bank->bank_size_for_class[c_id] - 1; ++ref) {
       if (aom_read_literal(rb, 1, ACCT_INFO("bank"))) break;
@@ -3656,12 +3675,18 @@
     }
     switch (rui->restoration_type) {
       case RESTORE_WIENER:
-        read_wiener_filter(xd, wiener_win, &rui->wiener_info,
-                           &xd->wiener_info[plane], r);
+        read_wiener_filter(
+#if !CONFIG_MERGE_PARA_CTX
+            xd,
+#endif  // !CONFIG_MERGE_PARA_CTX
+            wiener_win, &rui->wiener_info, &xd->wiener_info[plane], r);
         break;
       case RESTORE_SGRPROJ:
-        read_sgrproj_filter(xd, &rui->sgrproj_info, &xd->sgrproj_info[plane],
-                            r);
+        read_sgrproj_filter(
+#if !CONFIG_MERGE_PARA_CTX
+            xd,
+#endif  // !CONFIG_MERGE_PARA_CTX
+            &rui->sgrproj_info, &xd->sgrproj_info[plane], r);
         break;
       case RESTORE_WIENER_NONSEP:
         read_wienerns_filter(xd, plane != AOM_PLANE_Y, rsi, &rui->wienerns_info,
@@ -3676,8 +3701,11 @@
     if (aom_read_symbol(r, xd->tile_ctx->wiener_restore_cdf, 2,
                         ACCT_INFO("wiener_restore_cdf"))) {
       rui->restoration_type = RESTORE_WIENER;
-      read_wiener_filter(xd, wiener_win, &rui->wiener_info,
-                         &xd->wiener_info[plane], r);
+      read_wiener_filter(
+#if !CONFIG_MERGE_PARA_CTX
+          xd,
+#endif  // !CONFIG_MERGE_PARA_CTX
+          wiener_win, &rui->wiener_info, &xd->wiener_info[plane], r);
     } else {
       rui->restoration_type = RESTORE_NONE;
     }
@@ -3685,7 +3713,11 @@
     if (aom_read_symbol(r, xd->tile_ctx->sgrproj_restore_cdf, 2,
                         ACCT_INFO("sgrproj_restore_cdf"))) {
       rui->restoration_type = RESTORE_SGRPROJ;
-      read_sgrproj_filter(xd, &rui->sgrproj_info, &xd->sgrproj_info[plane], r);
+      read_sgrproj_filter(
+#if !CONFIG_MERGE_PARA_CTX
+          xd,
+#endif  // !CONFIG_MERGE_PARA_CTX
+          &rui->sgrproj_info, &xd->sgrproj_info[plane], r);
     } else {
       rui->restoration_type = RESTORE_NONE;
     }
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 33a6137..e32cc67 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -702,6 +702,12 @@
   }
   int max_idx_bits = mbmi->max_num_warp_candidates - 1;
   for (int bit_idx = 0; bit_idx < max_idx_bits; ++bit_idx) {
+    if ((CONFIG_CTX_WARP_REFIDX_REDUCTION >> bit_idx) & 1) {
+      int warp_idx = aom_read_literal(r, 1, ACCT_INFO("warp_idx"));
+      mbmi->warp_ref_idx = bit_idx + warp_idx;
+      if (!warp_idx) break;
+      continue;
+    }
     aom_cdf_prob *warp_ref_idx_cdf = av1_get_warp_ref_idx_cdf(ec_ctx, bit_idx);
     int warp_idx =
         aom_read_symbol(r, warp_ref_idx_cdf, 2, ACCT_INFO("warp_idx"));
@@ -748,10 +754,15 @@
 #if CONFIG_WARP_PRECISION
   if (max_coded_index >= WARP_DELTA_NUMSYMBOLS_LOW &&
       coded_value >= (WARP_DELTA_NUMSYMBOLS_LOW - 1)) {
+#if CONFIG_BYPASS_WARP_PARAM_HIGH
+    coded_value =
+        7 + aom_read_literal(r, WARP_DELTA_NUMSYMBOLS_HIGH, ACCT_INFO());
+#else
     coded_value =
         7 + aom_read_symbol(r,
                             xd->tile_ctx->warp_delta_param_high_cdf[index_type],
                             WARP_DELTA_NUMSYMBOLS_HIGH, ACCT_INFO());
+#endif  //
   }
 #endif  // CONFIG_WARP_PRECISION
 
@@ -815,8 +826,13 @@
       decoded_delta_param[index] = coded_value;
       // decode sign
       if (coded_value) {
+#if CONFIG_BYPASS_WARP_PARAM_SIGN
+        int sign = aom_read_bit(r, ACCT_INFO());
+#else
+
         int sign = aom_read_symbol(r, xd->tile_ctx->warp_param_sign_cdf, 2,
                                    ACCT_INFO());
+#endif
         decoded_delta_param[index] = sign ? -coded_value : coded_value;
       }
 #else
@@ -2077,16 +2093,27 @@
 }
 
 #if CONFIG_IBC_BV_IMPROVEMENT
-static void read_intrabc_drl_idx(int max_ref_bv_cnt, FRAME_CONTEXT *ec_ctx,
+static void read_intrabc_drl_idx(int max_ref_bv_cnt,
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
+                                 FRAME_CONTEXT *ec_ctx,
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
                                  MB_MODE_INFO *mbmi, aom_reader *r) {
   mbmi->intrabc_drl_idx = 0;
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
   int bit_cnt = 0;
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
   for (int idx = 0; idx < max_ref_bv_cnt - 1; ++idx) {
+#if CONFIG_BYPASS_INTRABC_DRL_IDX
+    const int intrabc_drl_idx = aom_read_bit(r, ACCT_INFO());
+#else
     const int intrabc_drl_idx = aom_read_symbol(
         r, ec_ctx->intrabc_drl_idx_cdf[bit_cnt], 2, ACCT_INFO());
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
     mbmi->intrabc_drl_idx = idx + intrabc_drl_idx;
     if (!intrabc_drl_idx) break;
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
     ++bit_cnt;
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
   }
   assert(mbmi->intrabc_drl_idx < max_ref_bv_cnt);
 }
@@ -2159,7 +2186,11 @@
     mbmi->intrabc_mode =
         aom_read_symbol(r, ec_ctx->intrabc_mode_cdf, 2, ACCT_INFO());
 #if CONFIG_IBC_MAX_DRL
-    read_intrabc_drl_idx(cm->features.max_bvp_drl_bits + 1, ec_ctx, mbmi, r);
+    read_intrabc_drl_idx(cm->features.max_bvp_drl_bits + 1,
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
+                         ec_ctx,
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
+                         mbmi, r);
 #else
     read_intrabc_drl_idx(MAX_REF_BV_STACK_SIZE, ec_ctx, mbmi, r);
 #endif  // CONFIG_IBC_MAX_DRL
@@ -2280,10 +2311,14 @@
         aom_read_symbol(r, ec_ctx->y_mode_idx_cdf_0[context], FIRST_MODE_COUNT,
                         ACCT_INFO("mode_idx", "y_mode_idx_cdf_0"));
   } else {
-    mode_idx =
-        FIRST_MODE_COUNT + (mode_set_index - 1) * SECOND_MODE_COUNT +
-        aom_read_symbol(r, ec_ctx->y_mode_idx_cdf_1[context], SECOND_MODE_COUNT,
-                        ACCT_INFO("mode_idx", "y_mode_idx_cdf_1"));
+    mode_idx = FIRST_MODE_COUNT + (mode_set_index - 1) * SECOND_MODE_COUNT +
+#if CONFIG_CTX_Y_SECOND_MODE
+               aom_read_literal(r, 4, ACCT_INFO("mode_idx"));
+#else
+               aom_read_symbol(r, ec_ctx->y_mode_idx_cdf_1[context],
+                               SECOND_MODE_COUNT,
+                               ACCT_INFO("mode_idx", "y_mode_idx_cdf_1"));
+#endif  // CONFIG_CTX_Y_SECOND_MODE
   }
   assert(mode_idx < LUMA_MODE_COUNT);
   get_y_intra_mode_set(mbmi, xd);
@@ -2948,6 +2983,9 @@
     const int num_of_bits_for_this_offset =
         (shell_class == 0) ? 1 : shell_class;
     for (int i = 0; i < num_of_bits_for_this_offset; ++i) {
+#if CONFIG_CTX_MV_SHELL_OFFSET_OTHER
+      shell_cls_offset |= aom_read_bit(r, ACCT_INFO("offset")) << i;
+#else
       shell_cls_offset |=
 #if CONFIG_CTX_MV_SHELL_OFFSET_OTHER
           aom_read_bit(r, ACCT_INFO("offset"))
@@ -2956,6 +2994,7 @@
                           ACCT_INFO("offset"))
 #endif  // CONFIG_CTX_MV_SHELL_OFFSET_OTHER
           << i;
+#endif
     }
   }
 
diff --git a/av1/decoder/decodetxb.c b/av1/decoder/decodetxb.c
index 1af82e3..6d7e39b 100644
--- a/av1/decoder/decodetxb.c
+++ b/av1/decoder/decodetxb.c
@@ -157,8 +157,18 @@
                                   ,
                                   int *hr_avg
 #endif
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+                                  ,
+                                  int plane
+#endif
 ) {
+#if CONFIG_COEFF_BR_LF_UV_BYPASS                        // code_hr_t
+  int max_br = lf ? (plane == 0 ? LF_MAX_BASE_BR_RANGE  // 8
+                                : LF_NUM_BASE_LEVELS + 1)
+                  : MAX_BASE_BR_RANGE;
+#else
   int max_br = lf ? LF_MAX_BASE_BR_RANGE : MAX_BASE_BR_RANGE;
+#endif
   int use_tcq_hr = tcq_mode && (level >= max_br - 1);
 #if CONFIG_COEFF_HR_ADAPTIVE
   int hr_level_avg = *hr_avg;
@@ -208,7 +218,10 @@
     aom_reader *r, int start_si, int end_si, const int16_t *scan, int bwl,
     uint8_t *levels, base_lf_cdf_arr base_lf_cdf, br_cdf_arr br_lf_cdf,
     int plane, base_cdf_arr base_cdf, br_cdf_arr br_cdf,
-    base_lf_cdf_arr base_lf_uv_cdf, br_cdf_arr br_lf_uv_cdf,
+    base_lf_cdf_arr base_lf_uv_cdf,
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
+    br_cdf_arr br_lf_uv_cdf,
+#endif
     base_cdf_arr base_uv_cdf, br_cdf_arr br_uv_cdf
 #if CONFIG_TCQ
     ,
@@ -236,11 +249,13 @@
         level += aom_read_symbol(r, base_lf_uv_cdf[coeff_ctx], LF_BASE_SYMBOLS,
                                  ACCT_INFO("level", "base_lf_uv_cdf"));
 #endif  // CONFIG_TCQ
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
         if (level > LF_NUM_BASE_LEVELS) {
           const int br_ctx = get_br_lf_ctx_2d_chroma(levels, pos, bwl);
           aom_cdf_prob *cdf = br_lf_uv_cdf[br_ctx];
           level += read_low_range(r, cdf);
         }
+#endif
       } else {
         const int coeff_ctx =
             get_lower_levels_ctx_2d_chroma(levels, pos, bwl, plane);
@@ -300,7 +315,10 @@
     aom_reader *r, TX_CLASS tx_class, int start_si, int end_si,
     const int16_t *scan, int bwl, uint8_t *levels, base_lf_cdf_arr base_lf_cdf,
     br_cdf_arr br_lf_cdf, int plane, base_cdf_arr base_cdf, br_cdf_arr br_cdf,
-    base_lf_cdf_arr base_lf_uv_cdf, br_cdf_arr br_lf_uv_cdf,
+    base_lf_cdf_arr base_lf_uv_cdf,
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
+    br_cdf_arr br_lf_uv_cdf,
+#endif
     base_cdf_arr base_uv_cdf, br_cdf_arr br_uv_cdf
 #if CONFIG_TCQ
     ,
@@ -329,11 +347,13 @@
         level += aom_read_symbol(r, base_lf_uv_cdf[coeff_ctx], LF_BASE_SYMBOLS,
                                  ACCT_INFO("level", "base_lf_uv_cdf"));
 #endif  // CONFIG_TCQ
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
         if (level > LF_NUM_BASE_LEVELS) {
           const int br_ctx = get_br_lf_ctx_chroma(levels, pos, bwl, tx_class);
           aom_cdf_prob *cdf = br_lf_uv_cdf[br_ctx];
           level += read_low_range(r, cdf);
         }
+#endif
       } else {
         const int coeff_ctx =
             get_lower_levels_ctx_chroma(levels, pos, bwl, tx_class, plane);
@@ -421,7 +441,9 @@
 #endif
 ) {
   MACROBLOCKD *const xd = &dcb->xd;
+#if !CONFIG_EOB_PT_CTX_REDUCTION
   const PLANE_TYPE plane_type = get_plane_type(plane);
+#endif
   FRAME_CONTEXT *const ec_ctx = xd->tile_ctx;
 #if CONFIG_EOB_POS_LUMA
   const int is_inter = is_inter_block(xd->mi[0], xd->tree_type);
@@ -429,8 +451,9 @@
 #else
   const int pl_ctx = plane_type;
 #endif  // CONFIG_EOB_POS_LUMA
-
+#if !CONFIG_EOB_PT_CTX_REDUCTION
   const TX_SIZE txs_ctx = get_txsize_entropy_ctx(tx_size);
+#endif
   eob_info *eob_data = dcb->eob_data[plane] + dcb->txb_offset[plane];
   uint16_t *const eob = &(eob_data->eob);
   eob_info *bob_data = dcb->bob_data[plane] + dcb->txb_offset[plane];
@@ -515,10 +538,17 @@
 
   const int eob_offset_bits = av1_eob_offset_bits[eob_pt];
   if (eob_offset_bits > 0) {
+#if !CONFIG_EOB_PT_CTX_REDUCTION
     const int eob_ctx = eob_pt - 3;
+#endif
     int bit =
+#if CONFIG_EOB_PT_CTX_REDUCTION
+        aom_read_symbol(r, ec_ctx->eob_extra_cdf, 2,
+                        ACCT_INFO("eob_extra_cdf"));
+#else
         aom_read_symbol(r, ec_ctx->eob_extra_cdf[txs_ctx][plane_type][eob_ctx],
                         2, ACCT_INFO("eob_extra_cdf"));
+#endif
     if (bit) {
       eob_extra += (1 << (eob_offset_bits - 1));
     }
@@ -781,6 +811,10 @@
                               ,
                               &hr_level_avg
 #endif
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+                              ,
+                              plane
+#endif
       );
 #endif
       if (c == 0) dc_val = sign ? -level : level;
@@ -816,18 +850,24 @@
 static INLINE tran_low_t read_coeff_hidden(aom_reader *r, TX_CLASS tx_class,
                                            const int16_t *scan, int bwl,
                                            uint8_t *levels, int parity,
-                                           base_ph_cdf_arr base_cdf_ph,
-                                           br_cdf_arr br_cdf_ph) {
+                                           base_ph_cdf_arr base_cdf_ph
+#if !CONFIG_COEFF_BR_PH_BYPASS
+                                           ,
+                                           br_cdf_arr br_cdf_ph
+#endif
+) {
   int q_index;
   const int pos = scan[0];
   int ctx_idx = get_base_ctx_ph(levels, pos, bwl, tx_class);
   q_index = aom_read_symbol(r, base_cdf_ph[ctx_idx], 4, ACCT_INFO("q_index"));
 
+#if !CONFIG_COEFF_BR_PH_BYPASS
   if (q_index > NUM_BASE_LEVELS) {
     ctx_idx = get_par_br_ctx(levels, pos, bwl, tx_class);
     aom_cdf_prob *cdf_br = br_cdf_ph[ctx_idx];
     q_index += read_low_range(r, cdf_br);
   }
+#endif
   assert(q_index <= MAX_BASE_BR_RANGE);
   uint8_t level = (q_index << 1) + parity;
   levels[get_padded_idx(pos, bwl)] = level;
@@ -936,12 +976,13 @@
             aom_read_symbol(r, cdf, LF_BASE_SYMBOLS - 1,
                             ACCT_INFO("level", "coeff_base_lf_eob_uv_cdf")) +
             1;
-
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
         if (level > LF_NUM_BASE_LEVELS) {
           const int br_ctx = get_br_ctx_lf_eob_chroma(pos, tx_class);
           cdf = ec_ctx->coeff_br_lf_uv_cdf[br_ctx];
           level += read_low_range(r, cdf);
         }
+#endif
       } else {
         aom_cdf_prob *cdf = ec_ctx->coeff_base_eob_uv_cdf[coeff_ctx];
         level += aom_read_symbol(r, cdf, 3,
@@ -997,14 +1038,19 @@
     base_cdf_arr base_cdf = ec_ctx->coeff_base_cdf[txs_ctx];
     br_cdf_arr br_cdf = ec_ctx->coeff_br_cdf;
     base_lf_cdf_arr base_lf_uv_cdf = ec_ctx->coeff_base_lf_uv_cdf;
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
     br_cdf_arr br_lf_uv_cdf = ec_ctx->coeff_br_lf_uv_cdf;
+#endif
     base_cdf_arr base_uv_cdf = ec_ctx->coeff_base_uv_cdf;
     br_cdf_arr br_uv_cdf = ec_ctx->coeff_br_uv_cdf;
 
     if (tx_class == TX_CLASS_2D) {
       read_coeffs_reverse_2d(r, 1, *eob - 2, scan, bwl, levels, base_lf_cdf,
                              br_lf_cdf, plane, base_cdf, br_cdf, base_lf_uv_cdf,
-                             br_lf_uv_cdf, base_uv_cdf, br_uv_cdf
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
+                             br_lf_uv_cdf,
+#endif
+                             base_uv_cdf, br_uv_cdf
 #if CONFIG_TCQ
                              ,
                              &state
@@ -1024,11 +1070,19 @@
       }
       if (is_hidden) {
         read_coeff_hidden(r, tx_class, scan, bwl, levels, (sum_abs1 & 1),
-                          ec_ctx->coeff_base_ph_cdf, ec_ctx->coeff_br_ph_cdf);
+                          ec_ctx->coeff_base_ph_cdf
+#if !CONFIG_COEFF_BR_PH_BYPASS
+                          ,
+                          ec_ctx->coeff_br_ph_cdf
+#endif
+        );
       } else {
         read_coeffs_reverse(r, tx_class, 0, 0, scan, bwl, levels, base_lf_cdf,
                             br_lf_cdf, plane, base_cdf, br_cdf, base_lf_uv_cdf,
-                            br_lf_uv_cdf, base_uv_cdf, br_uv_cdf
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
+                            br_lf_uv_cdf,
+#endif
+                            base_uv_cdf, br_uv_cdf
 #if CONFIG_TCQ
                             ,
                             &state
@@ -1038,7 +1092,11 @@
     } else {
       read_coeffs_reverse(r, tx_class, 1, *eob - 2, scan, bwl, levels,
                           base_lf_cdf, br_lf_cdf, plane, base_cdf, br_cdf,
-                          base_lf_uv_cdf, br_lf_uv_cdf, base_uv_cdf, br_uv_cdf
+                          base_lf_uv_cdf,
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
+                          br_lf_uv_cdf,
+#endif
+                          base_uv_cdf, br_uv_cdf
 #if CONFIG_TCQ
                           ,
                           &state
@@ -1058,11 +1116,19 @@
       }
       if (is_hidden) {
         read_coeff_hidden(r, tx_class, scan, bwl, levels, (sum_abs1 & 1),
-                          ec_ctx->coeff_base_ph_cdf, ec_ctx->coeff_br_ph_cdf);
+                          ec_ctx->coeff_base_ph_cdf
+#if !CONFIG_COEFF_BR_PH_BYPASS
+                          ,
+                          ec_ctx->coeff_br_ph_cdf
+#endif
+        );
       } else {
         read_coeffs_reverse(r, tx_class, 0, 0, scan, bwl, levels, base_lf_cdf,
                             br_lf_cdf, plane, base_cdf, br_cdf, base_lf_uv_cdf,
-                            br_lf_uv_cdf, base_uv_cdf, br_uv_cdf
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
+                            br_lf_uv_cdf,
+#endif
+                            base_uv_cdf, br_uv_cdf
 #if CONFIG_TCQ
                             ,
                             &state
@@ -1101,11 +1167,16 @@
               ec_ctx->dc_sign_cdf[plane_type][is_hidden ? 1 : 0][dc_sign_ctx],
               2, ACCT_INFO("sign", "dc_sign_cdf", "plane_y_or_u"));
         } else {
+#if CONFIG_BY_PASS_V_SIGN
+          sign = aom_read_literal(
+              r, 1, ACCT_INFO("sign", "v_dc_sign_cdf", "plane_v"));
+#else
           int32_t tmp_sign = 0;
           if (c < xd->eob_u) tmp_sign = xd->tmp_sign[tmp_sign_idx];
           sign =
               aom_read_symbol(r, ec_ctx->v_dc_sign_cdf[tmp_sign][dc_sign_ctx],
                               2, ACCT_INFO("sign", "v_dc_sign_cdf", "plane_v"));
+#endif
         }
         if (plane == AOM_PLANE_U) xd->tmp_sign[tmp_sign_idx] = (sign ? 2 : 1);
 #else
@@ -1129,6 +1200,13 @@
       }
 
       if (is_hidden && c == 0) {
+#if CONFIG_COEFF_BR_PH_BYPASS
+        if (level >= ((NUM_BASE_LEVELS + 1) << 1)) {
+          int hr_level = (read_adaptive_hr(xd, r, hr_level_avg >> 1) << 1);
+          level += hr_level;
+          hr_level_avg = (hr_level_avg + hr_level) >> 1;
+        }
+#else
         if (level >= (MAX_BASE_BR_RANGE << 1)) {
 #if CONFIG_COEFF_HR_ADAPTIVE
           int hr_level = (read_adaptive_hr(xd, r, hr_level_avg >> 1) << 1);
@@ -1138,6 +1216,7 @@
           level += (read_exp_golomb(xd, r, 0) << 1);
 #endif  // CONFIG_COEFF_HR_ADAPTIVE
         }
+#endif
       } else {
         int limits = get_lf_limits(row, col, tx_class, plane);
 #if !CONFIG_TCQ /* read_high_range / hr_adap */
@@ -1168,6 +1247,10 @@
                                 ,
                                 &hr_level_avg
 #endif
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+                                ,
+                                plane
+#endif
         );
 #endif
       }
diff --git a/av1/decoder/detokenize.c b/av1/decoder/detokenize.c
index 7ccdc4a..7af01c7 100644
--- a/av1/decoder/detokenize.c
+++ b/av1/decoder/detokenize.c
@@ -37,7 +37,11 @@
       plane_block_width < 64 && plane_block_height < 64;
   int direction;
   if (transverse_allowed) {
+#if CONFIG_PLT_DIR_CTX
+    direction = aom_read_bit(r, ACCT_INFO());
+#else
     direction = aom_read_symbol(r, param->direction_cdf, 2, ACCT_INFO());
+#endif  // CONFIG_PLT_DIR_CTX
   } else {
     direction = 0;
   }
@@ -204,8 +208,10 @@
 #if CONFIG_PALETTE_IMPROVEMENTS
   params.identity_row_cdf = plane ? xd->tile_ctx->identity_row_cdf_uv
                                   : xd->tile_ctx->identity_row_cdf_y;
+#if !CONFIG_PLT_DIR_CTX
 #if CONFIG_PALETTE_LINE_COPY
   params.direction_cdf = xd->tile_ctx->palette_direction_cdf;
+#endif  // !CONFIG_PLT_DIR_CTX
 #endif  // CONFIG_PALETTE_LINE_COPY
 #endif  // CONFIG_PALETTE_IMPROVEMENTS
   const MB_MODE_INFO *const mbmi = xd->mi[0];
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index faf246c..39eec6b 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -226,6 +226,11 @@
   }
   int max_idx_bits = mbmi->max_num_warp_candidates - 1;
   for (int bit_idx = 0; bit_idx < max_idx_bits; ++bit_idx) {
+    if ((CONFIG_CTX_WARP_REFIDX_REDUCTION >> bit_idx) & 1) {
+      aom_write_literal(w, mbmi->warp_ref_idx != bit_idx, 1);
+      if (mbmi->warp_ref_idx == bit_idx) break;
+      continue;
+    }
     aom_cdf_prob *warp_ref_idx_cdf = av1_get_warp_ref_idx_cdf(ec_ctx, bit_idx);
     aom_write_symbol(w, mbmi->warp_ref_idx != bit_idx, warp_ref_idx_cdf, 2);
 
@@ -727,9 +732,14 @@
 #if CONFIG_WARP_PRECISION
   if (max_coded_index >= WARP_DELTA_NUMSYMBOLS_LOW &&
       coded_value >= coded_value_low_max) {
+#if CONFIG_BYPASS_WARP_PARAM_HIGH
+    aom_write_literal(w, coded_value - 7, WARP_DELTA_NUMSYMBOLS_HIGH);
+
+#else
     aom_write_symbol(w, coded_value - 7,
                      xd->tile_ctx->warp_delta_param_high_cdf[index_type],
                      WARP_DELTA_NUMSYMBOLS_HIGH);
+#endif
   }
 #endif  // CONFIG_WARP_PRECISION
 }
@@ -783,8 +793,12 @@
                            max_coded_index);
     // Code sign
     if (coded_delta_param[index]) {
+#if CONFIG_BYPASS_WARP_PARAM_SIGN
+      aom_write_bit(w, coded_delta_param[index] < 0);
+#else
       aom_write_symbol(w, coded_delta_param[index] < 0,
                        xd->tile_ctx->warp_param_sign_cdf, 2);
+#endif
     }
 #else
     coded_delta_param[index] = (value / step_size) + max_coded_index;
@@ -1013,7 +1027,11 @@
 #if CONFIG_PALETTE_LINE_COPY
   const int direction = (direction_allowed) ? p->direction : 0;
   if (direction_allowed) {
+#if CONFIG_PLT_DIR_CTX
+    aom_write_bit(w, p->direction);
+#else
     aom_write_symbol(w, p->direction, xd->tile_ctx->palette_direction_cdf, 2);
+#endif  // CONFIG_PLT_DIR_CTX
   }
 #else
   const int direction = 0;
@@ -2233,10 +2251,17 @@
     aom_write_symbol(w, mode_idx, ec_ctx->y_mode_idx_cdf_0[context],
                      FIRST_MODE_COUNT);
   } else {
+#if CONFIG_CTX_Y_SECOND_MODE
+    aom_write_literal(
+        w,
+        mode_idx - FIRST_MODE_COUNT - (mode_set_index - 1) * SECOND_MODE_COUNT,
+        4);
+#else
     aom_write_symbol(
         w,
         mode_idx - FIRST_MODE_COUNT - (mode_set_index - 1) * SECOND_MODE_COUNT,
         ec_ctx->y_mode_idx_cdf_1[context], SECOND_MODE_COUNT);
+#endif  // !CONFIG_CTX_Y_SECOND_MODE
   }
   if (mbmi->joint_y_mode_delta_angle < NON_DIRECTIONAL_MODES_COUNT)
     assert(mbmi->joint_y_mode_delta_angle == mbmi->y_mode_idx);
@@ -3123,7 +3148,10 @@
 }
 
 #if CONFIG_IBC_BV_IMPROVEMENT
-static void write_intrabc_drl_idx(int max_ref_bv_num, FRAME_CONTEXT *ec_ctx,
+static void write_intrabc_drl_idx(int max_ref_bv_num,
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
+                                  FRAME_CONTEXT *ec_ctx,
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
                                   const MB_MODE_INFO *mbmi,
                                   const MB_MODE_INFO_EXT_FRAME *mbmi_ext_frame,
                                   aom_writer *w) {
@@ -3135,13 +3163,21 @@
 #endif
   assert(mbmi->intrabc_drl_idx < max_ref_bv_num);
   (void)mbmi_ext_frame;
-
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
   int bit_cnt = 0;
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
   for (int idx = 0; idx < max_ref_bv_num - 1; ++idx) {
+#if CONFIG_BYPASS_INTRABC_DRL_IDX
+    aom_write_bit(w, mbmi->intrabc_drl_idx != idx);
+#else
     aom_write_symbol(w, mbmi->intrabc_drl_idx != idx,
                      ec_ctx->intrabc_drl_idx_cdf[bit_cnt], 2);
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
+
     if (mbmi->intrabc_drl_idx == idx) break;
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
     ++bit_cnt;
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
   }
 }
 #endif  // CONFIG_IBC_BV_IMPROVEMENT
@@ -3194,7 +3230,10 @@
 #else
         MAX_REF_BV_STACK_SIZE,
 #endif  // CONFIG_IBC_MAX_DRL
-        ec_ctx, mbmi, mbmi_ext_frame, w);
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
+        ec_ctx,
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
+        mbmi, mbmi_ext_frame, w);
 
 #if CONFIG_IBC_SUBPEL_PRECISION
     if (is_intraBC_bv_precision_active(cm, mbmi->intrabc_mode)) {
@@ -4523,13 +4562,19 @@
   }
 }
 
-static AOM_INLINE void write_wiener_filter(MACROBLOCKD *xd, int wiener_win,
-                                           const WienerInfo *wiener_info,
-                                           WienerInfoBank *bank,
-                                           aom_writer *wb) {
+static AOM_INLINE void write_wiener_filter(
+#if !CONFIG_MERGE_PARA_CTX
+    MACROBLOCKD *xd,
+#endif  // !CONFIG_MERGE_PARA_CTX
+    int wiener_win, const WienerInfo *wiener_info, WienerInfoBank *bank,
+    aom_writer *wb) {
   const int equal_ref = check_wiener_bank_eq(bank, wiener_info);
   const int exact_match = (equal_ref >= 0);
+#if CONFIG_MERGE_PARA_CTX
+  aom_write_bit(wb, exact_match);
+#else
   aom_write_symbol(wb, exact_match, xd->tile_ctx->merged_param_cdf, 2);
+#endif  // CONFIG_MERGE_PARA_CTX
   const int ref = wiener_info->bank_ref;
   assert(IMPLIES(exact_match, ref == equal_ref));
   assert(ref < AOMMAX(1, bank->bank_size));
@@ -4587,13 +4632,18 @@
   return;
 }
 
-static AOM_INLINE void write_sgrproj_filter(MACROBLOCKD *xd,
-                                            const SgrprojInfo *sgrproj_info,
-                                            SgrprojInfoBank *bank,
-                                            aom_writer *wb) {
+static AOM_INLINE void write_sgrproj_filter(
+#if !CONFIG_MERGE_PARA_CTX
+    MACROBLOCKD *xd,
+#endif  // !CONFIG_MERGE_PARA_CTX
+    const SgrprojInfo *sgrproj_info, SgrprojInfoBank *bank, aom_writer *wb) {
   const int equal_ref = check_sgrproj_bank_eq(bank, sgrproj_info);
   const int exact_match = (equal_ref >= 0);
+#if CONFIG_MERGE_PARA_CTX
+  aom_write_bit(wb, exact_match);
+#else
   aom_write_symbol(wb, exact_match, xd->tile_ctx->merged_param_cdf, 2);
+#endif  // CONFIG_MERGE_PARA_CTX
   const int ref = sgrproj_info->bank_ref;
   assert(IMPLIES(exact_match, ref == equal_ref));
   assert(ref < AOMMAX(1, bank->bank_size));
@@ -4646,8 +4696,12 @@
       check_wienerns_bank_eq(bank, wienerns_info, nsfilter_params->ncoeffs,
                              wiener_class_id, ref_for_class);
   const int exact_match = (is_equal >= 0);
+#if CONFIG_MERGE_PARA_CTX
+  (void)xd;
+  aom_write_bit(wb, exact_match);
+#else
   aom_write_symbol(wb, exact_match, xd->tile_ctx->merged_param_cdf, 2);
-
+#endif  // CONFIG_MERGE_PARA_CTX
   if (!exact_match) {
     ref_for_class[wiener_class_id] =
         wienerns_info->bank_ref_for_class[wiener_class_id];
@@ -4675,7 +4729,12 @@
   const int exact_match =
       check_wienerns_eq(wienerns_info, ref_wienerns_info,
                         nsfilter_params->ncoeffs, wiener_class_id);
+#if CONFIG_MERGE_PARA_CTX
+  (void)xd;
+  aom_write_bit(wb, exact_match);
+#else
   aom_write_symbol(wb, exact_match, xd->tile_ctx->merged_param_cdf, 2);
+#endif  // CONFIG_MERGE_PARA_CTX
   return exact_match;
 }
 
@@ -5017,12 +5076,18 @@
         (int)unit_rtype == cm->features.lr_last_switchable_ndx_0_type[plane]));
     switch (unit_rtype) {
       case RESTORE_WIENER:
-        write_wiener_filter(xd, wiener_win, &rui->wiener_info,
-                            &xd->wiener_info[plane], w);
+        write_wiener_filter(
+#if !CONFIG_MERGE_PARA_CTX
+            xd,
+#endif  // !CONFIG_MERGE_PARA_CTX
+            wiener_win, &rui->wiener_info, &xd->wiener_info[plane], w);
         break;
       case RESTORE_SGRPROJ:
-        write_sgrproj_filter(xd, &rui->sgrproj_info, &xd->sgrproj_info[plane],
-                             w);
+        write_sgrproj_filter(
+#if !CONFIG_MERGE_PARA_CTX
+            xd,
+#endif  // !CONFIG_MERGE_PARA_CTX
+            &rui->sgrproj_info, &xd->sgrproj_info[plane], w);
         break;
       case RESTORE_WIENER_NONSEP:
         write_wienerns_filter(xd, plane, rsi, &rui->wienerns_info,
@@ -5040,8 +5105,11 @@
     ++counts->wiener_restore[unit_rtype != RESTORE_NONE];
 #endif
     if (unit_rtype != RESTORE_NONE) {
-      write_wiener_filter(xd, wiener_win, &rui->wiener_info,
-                          &xd->wiener_info[plane], w);
+      write_wiener_filter(
+#if !CONFIG_MERGE_PARA_CTX
+          xd,
+#endif  // !CONFIG_MERGE_PARA_CTX
+          wiener_win, &rui->wiener_info, &xd->wiener_info[plane], w);
     }
   } else if (frame_rtype == RESTORE_SGRPROJ) {
     aom_write_symbol(w, unit_rtype != RESTORE_NONE,
@@ -5050,7 +5118,11 @@
     ++counts->sgrproj_restore[unit_rtype != RESTORE_NONE];
 #endif
     if (unit_rtype != RESTORE_NONE) {
-      write_sgrproj_filter(xd, &rui->sgrproj_info, &xd->sgrproj_info[plane], w);
+      write_sgrproj_filter(
+#if !CONFIG_MERGE_PARA_CTX
+          xd,
+#endif  // !CONFIG_MERGE_PARA_CTX
+          &rui->sgrproj_info, &xd->sgrproj_info[plane], w);
     }
   } else if (frame_rtype == RESTORE_WIENER_NONSEP) {
     aom_write_symbol(w, unit_rtype != RESTORE_NONE,
diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index 83b35e8..88eea09 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -192,8 +192,10 @@
 #endif  // CONFIG_TCQ
                      [LF_BASE_SYMBOLS * 2];
   //! Cost for encoding an increment to the low-frequency chroma coefficient
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
   int lps_lf_cost_uv[LF_LEVEL_CONTEXTS_UV]
                     [COEFF_BASE_RANGE + 1 + COEFF_BASE_RANGE + 1];
+#endif
   /*! \brief Cost for encoding the base_eob of a chroma level.
    *
    * Decoder uses base_eob to derive the base_level as base_eob := base_eob+1.
@@ -229,8 +231,10 @@
   //! Cost for encoding the base level of a parity-hidden coefficient
   int base_ph_cost[COEFF_BASE_PH_CONTEXTS][4];
   //! Cost for encoding an increment to the parity-hidden coefficient
+#if !CONFIG_COEFF_BR_PH_BYPASS
   int lps_ph_cost[COEFF_BR_PH_CONTEXTS]
                  [COEFF_BASE_RANGE + 1 + COEFF_BASE_RANGE + 1];
+#endif
   /*! \brief Cost for encoding the base_eob of a level.
    *
    * Decoder uses base_eob to derive the base_level as base_eob := base_eob+1.
@@ -1002,7 +1006,9 @@
   //! y first mode cost
   int y_first_mode_costs[Y_MODE_CONTEXTS][FIRST_MODE_COUNT];
   //! y second mode cost
+#if !CONFIG_CTX_Y_SECOND_MODE
   int y_second_mode_costs[Y_MODE_CONTEXTS][SECOND_MODE_COUNT];
+#endif  // !CONFIG_CTX_Y_SECOND_MODE
   //! uv mode cost
   int intra_uv_mode_cost[UV_MODE_CONTEXTS][UV_INTRA_MODES - 1];
   //! CFL mode cost
@@ -1068,8 +1074,10 @@
   int palette_uv_mode_cost[PALETTE_UV_MODE_CONTEXTS][2];
 #if CONFIG_PALETTE_IMPROVEMENTS
 #if CONFIG_PALETTE_LINE_COPY
+#if !CONFIG_PLT_DIR_CTX
   //! palette_direction_cost
   int palette_direction_cost[2];
+#endif  // !CONFIG_PLT_DIR_CTX
   //! palette_y_row_flag_cost
   int palette_y_row_flag_cost[PALETTE_ROW_FLAG_CONTEXTS][3];
   //! palette_uv_row_flag_cost
diff --git a/av1/encoder/encodeframe_utils.c b/av1/encoder/encodeframe_utils.c
index d4e9e09..52264a8 100644
--- a/av1/encoder/encodeframe_utils.c
+++ b/av1/encoder/encodeframe_utils.c
@@ -598,7 +598,9 @@
           ++counts->y_mode_idx_0[context][mode_idx];
 #endif
           update_cdf(fc->y_mode_idx_cdf_0[context], mode_idx, FIRST_MODE_COUNT);
-        } else {
+        }
+#if !CONFIG_CTX_Y_SECOND_MODE
+        else {
           const int mode_idx_in_set = mode_idx - FIRST_MODE_COUNT -
                                       SECOND_MODE_COUNT * (mode_set_index - 1);
 #if CONFIG_ENTROPY_STATS
@@ -607,6 +609,7 @@
           update_cdf(fc->y_mode_idx_cdf_1[context], mode_idx_in_set,
                      SECOND_MODE_COUNT);
         }
+#endif  // !CONFIG_CTX_Y_SECOND_MODE
       } else {
         update_cdf(fc->dpcm_vert_horz_cdf, mbmi->dpcm_mode_y, 2);
       }
@@ -624,7 +627,9 @@
         ++counts->y_mode_idx_0[context][mode_idx];
 #endif
         update_cdf(fc->y_mode_idx_cdf_0[context], mode_idx, FIRST_MODE_COUNT);
-      } else {
+      }
+#if !CONFIG_CTX_Y_SECOND_MODE
+      else {
         const int mode_idx_in_set = mode_idx - FIRST_MODE_COUNT -
                                     SECOND_MODE_COUNT * (mode_set_index - 1);
 #if CONFIG_ENTROPY_STATS
@@ -633,6 +638,7 @@
         update_cdf(fc->y_mode_idx_cdf_1[context], mode_idx_in_set,
                    SECOND_MODE_COUNT);
       }
+#endif  // !CONFIG_CTX_Y_SECOND_MODE
     }
 #else  // CONFIG_LOSSLESS_DPCM
     const int context = get_y_mode_idx_ctx(xd);
@@ -648,7 +654,9 @@
       ++counts->y_mode_idx_0[context][mode_idx];
 #endif
       update_cdf(fc->y_mode_idx_cdf_0[context], mode_idx, FIRST_MODE_COUNT);
-    } else {
+    }
+#if !CONFIG_CTX_Y_SECOND_MODE
+    else {
       const int mode_idx_in_set = mode_idx - FIRST_MODE_COUNT -
                                   SECOND_MODE_COUNT * (mode_set_index - 1);
 #if CONFIG_ENTROPY_STATS
@@ -657,6 +665,7 @@
       update_cdf(fc->y_mode_idx_cdf_1[context], mode_idx_in_set,
                  SECOND_MODE_COUNT);
     }
+#endif  // !CONFIG_CTX_Y_SECOND_MODE
 #endif  // CONFIG_LOSSLESS_DPCM
     update_fsc_cdf(cm, xd,
 #if CONFIG_ENTROPY_STATS
@@ -1493,9 +1502,10 @@
               LF_BASE_SYMBOLS);
   AVERAGE_CDF(ctx_left->coeff_base_lf_eob_uv_cdf,
               ctx_tr->coeff_base_lf_eob_uv_cdf, LF_BASE_SYMBOLS - 1);
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
   AVERAGE_CDF(ctx_left->coeff_br_lf_uv_cdf, ctx_tr->coeff_br_lf_uv_cdf,
               BR_CDF_SIZE);
-
+#endif
   AVERAGE_CDF(ctx_left->inter_warp_mode_cdf, ctx_tr->inter_warp_mode_cdf, 2);
 #if CONFIG_REDESIGN_WARP_MODES_SIGNALING_FLOW
   AVERAGE_CDF(ctx_left->is_warpmv_or_warp_newmv_cdf,
@@ -1709,7 +1719,9 @@
   AVERAGE_CDF(ctx_left->wienerns_4part_cdf, ctx_tr->wienerns_4part_cdf, 4);
   AVERAGE_CDF(ctx_left->pc_wiener_restore_cdf, ctx_tr->pc_wiener_restore_cdf,
               2);
+#if !CONFIG_MERGE_PARA_CTX
   AVERAGE_CDF(ctx_left->merged_param_cdf, ctx_tr->merged_param_cdf, 2);
+#endif  // !CONFIG_MERGE_PARA_CTX
   AVERAGE_CDF(ctx_left->fsc_mode_cdf, ctx_tr->fsc_mode_cdf, FSC_MODES);
   AVERAGE_CDF(ctx_left->mrl_index_cdf, ctx_tr->mrl_index_cdf, MRL_LINE_NUMBER);
 #if CONFIG_MRLS_IMPROVE
@@ -1734,8 +1746,10 @@
               INTRA_MODE_SETS);
   AVERAGE_CDF(ctx_left->y_mode_idx_cdf_0, ctx_tr->y_mode_idx_cdf_0,
               FIRST_MODE_COUNT);
+#if !CONFIG_CTX_Y_SECOND_MODE
   AVERAGE_CDF(ctx_left->y_mode_idx_cdf_1, ctx_tr->y_mode_idx_cdf_1,
               SECOND_MODE_COUNT);
+#endif  // !CONFIG_CTX_Y_SECOND_MODE
   AVERAGE_CDF(ctx_left->uv_mode_cdf, ctx_tr->uv_mode_cdf, UV_INTRA_MODES);
 
   for (int i = 0; i < INTER_SDP_BSIZE_GROUP; i++) {
@@ -1861,7 +1875,9 @@
   }
 
   AVERAGE_CDF(ctx_left->coeff_base_ph_cdf, ctx_tr->coeff_base_ph_cdf, 4);
+#if !CONFIG_COEFF_BR_PH_BYPASS
   AVERAGE_CDF(ctx_left->coeff_br_ph_cdf, ctx_tr->coeff_br_ph_cdf, 4);
+#endif
   AVERAGE_CDF(ctx_left->cctx_type_cdf, ctx_tr->cctx_type_cdf, CCTX_TYPES);
 }
 #endif  // !CONFIG_ENHANCED_FRAME_CONTEXT_INIT
diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c
index 231c950..3cdc948 100644
--- a/av1/encoder/encodetxb.c
+++ b/av1/encoder/encodetxb.c
@@ -253,7 +253,9 @@
 #endif
   int eob_extra;
   const int eob_pt = get_eob_pos_token(eob, &eob_extra);
+#if !CONFIG_EOB_PT_CTX_REDUCTION
   TX_SIZE txs_ctx = get_txsize_entropy_ctx(tx_size);
+#endif
 
   const int eob_multi_size = txsize_log2_minus4[tx_size];
 #if CONFIG_EOB_POS_LUMA
@@ -327,14 +329,24 @@
 
   const int eob_offset_bits = av1_eob_offset_bits[eob_pt];
   if (eob_offset_bits > 0) {
+#if !CONFIG_EOB_PT_CTX_REDUCTION
     int eob_ctx = eob_pt - 3;
+#endif
     int eob_shift = eob_offset_bits - 1;
     int bit = (eob_extra & (1 << eob_shift)) ? 1 : 0;
 #if CONFIG_ENTROPY_STATS
+#if CONFIG_EOB_PT_CTX_REDUCTION
+    counts->eob_extra[cdf_idx][0][0][0][bit]++;
+#else
     counts->eob_extra[cdf_idx][txs_ctx][plane][eob_ctx][bit]++;
+#endif
 #endif  // CONFIG_ENTROPY_STATS
     if (allow_update_cdf)
+#if CONFIG_EOB_PT_CTX_REDUCTION
+      update_cdf(ec_ctx->eob_extra_cdf, bit, 2);
+#else
       update_cdf(ec_ctx->eob_extra_cdf[txs_ctx][plane][eob_ctx], bit, 2);
+#endif
   }
 }
 
@@ -364,6 +376,20 @@
   return eob_cost;
 }
 
+#if CONFIG_COEFF_BR_PH_BYPASS
+static AOM_FORCE_INLINE int get_br_ph_cost(tran_low_t level, int hr_ctx,
+                                           int *hr_level) {
+  int cost = 0;
+  *hr_level = 0;
+  if (level >= 1 + NUM_BASE_LEVELS) {
+    const int r = level - NUM_BASE_LEVELS - 1;
+    *hr_level = r;
+    cost += av1_cost_literal(get_adaptive_hr_length(r, hr_ctx));
+  }
+  return cost;
+}
+#endif
+
 #if CONFIG_COEFF_HR_ADAPTIVE
 static AOM_FORCE_INLINE int get_br_cost(tran_low_t level, const int *coeff_lps,
                                         int hr_ctx, int *hr_level) {
@@ -379,6 +405,20 @@
   return cost;
 }
 
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+static AOM_FORCE_INLINE int get_br_lf_cost_uv(tran_low_t level, int hr_ctx,
+                                              int *hr_level) {
+  int cost = 0;
+  *hr_level = 0;
+  if (level >= 1 + LF_NUM_BASE_LEVELS) {
+    const int r = level - LF_NUM_BASE_LEVELS - 1;
+    *hr_level = r;
+    cost += av1_cost_literal(get_adaptive_hr_length(r, hr_ctx));
+  }
+  return cost;
+}
+#endif
+
 static AOM_FORCE_INLINE int get_br_lf_cost(tran_low_t level,
                                            const int *coeff_lps, int hr_ctx,
                                            int *hr_level) {
@@ -419,6 +459,24 @@
   return cost;
 }
 
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+static AOM_FORCE_INLINE int get_br_lf_cost_with_diff_uv(tran_low_t level,
+                                                        int *diff, int hr_ctx,
+                                                        int *hr_level) {
+  int cost = 0;
+  *hr_level = 0;
+  if (level >= 1 + LF_NUM_BASE_LEVELS) {
+    const int r = level - LF_NUM_BASE_LEVELS - 1;
+    *hr_level = r;
+    int bits, diff_bits;
+    bits = get_adaptive_hr_length_diff(r, hr_ctx, &diff_bits);
+    *diff += av1_cost_literal(diff_bits);
+    cost += av1_cost_literal(bits);
+  }
+  return cost;
+}
+#endif
+
 static AOM_FORCE_INLINE int get_br_lf_cost_with_diff(tran_low_t level,
                                                      const int *coeff_lps,
                                                      int *diff, int hr_ctx,
@@ -459,6 +517,16 @@
   return low;
 }
 
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+static INLINE int get_high_range_uv(int abs_qc, int lf) {
+  int base_levels = lf ? 6 : 4;
+  int parity = abs_qc & 1;
+  // int br_max = base_levels - 1 - parity;
+  int high_range = (abs_qc - parity - (base_levels - 1)) >> 1;
+  return high_range;
+}
+#endif
+
 static INLINE int get_high_range(int abs_qc, int lf) {
   int base_levels = lf ? 6 : 4;
   int low_range = get_low_range(abs_qc, lf);
@@ -706,8 +774,10 @@
                             TX_SIZE tx_size, int eob) {
   MACROBLOCKD *xd = &x->e_mbd;
   FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
+#if !CONFIG_EOB_PT_CTX_REDUCTION
   const PLANE_TYPE plane_type = get_plane_type(plane);
   const TX_SIZE txs_ctx = get_txsize_entropy_ctx(tx_size);
+#endif
 #if CONFIG_EOB_POS_LUMA
   const int is_inter = is_inter_block(xd->mi[0], xd->tree_type);
   const int pl_ctx = get_eob_plane_ctx(plane, is_inter);
@@ -751,11 +821,17 @@
   }
   const int eob_offset_bits = av1_eob_offset_bits[eob_pt];
   if (eob_offset_bits > 0) {
+#if !CONFIG_EOB_PT_CTX_REDUCTION
     const int eob_ctx = eob_pt - 3;
+#endif
     int eob_shift = eob_offset_bits - 1;
     int bit = (eob_extra & (1 << eob_shift)) ? 1 : 0;
+#if CONFIG_EOB_PT_CTX_REDUCTION
+    aom_write_symbol(w, bit, ec_ctx->eob_extra_cdf, 2);
+#else
     aom_write_symbol(w, bit,
                      ec_ctx->eob_extra_cdf[txs_ctx][plane_type][eob_ctx], 2);
+#endif
 #if CONFIG_BYPASS_IMPROVEMENT
     // Zero out top bit; write (eob_offset_bits - 1) lsb bits.
     eob_extra &= (1 << (eob_offset_bits - 1)) - 1;
@@ -974,14 +1050,19 @@
 static INLINE void write_coeff_hidden(aom_writer *w, TX_CLASS tx_class,
                                       const int16_t *scan, int bwl,
                                       uint8_t *levels, const int level,
-                                      base_ph_cdf_arr base_cdf_ph,
-                                      br_cdf_arr br_cdf_ph) {
+                                      base_ph_cdf_arr base_cdf_ph
+#if !CONFIG_COEFF_BR_PH_BYPASS
+                                      ,
+                                      br_cdf_arr br_cdf_ph
+#endif
+) {
   const int q_index = (level >> 1);
   const int pos = scan[0];
 
   int ctx_id = get_base_ctx_ph(levels, pos, bwl, tx_class);
   aom_write_symbol(w, AOMMIN(q_index, 3), base_cdf_ph[ctx_id], 4);
 
+#if !CONFIG_COEFF_BR_PH_BYPASS
   if (q_index > NUM_BASE_LEVELS) {
     ctx_id = get_par_br_ctx(levels, pos, bwl, tx_class);
     aom_cdf_prob *cdf_br = br_cdf_ph[ctx_id];
@@ -992,6 +1073,7 @@
       if (k < BR_CDF_SIZE - 1) break;
     }
   }
+#endif
 }
 
 static void write_high_range(aom_writer *w, int enable_tcq, int level, int lf
@@ -999,14 +1081,32 @@
                              ,
                              int *hr_avg
 #endif
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+                             ,
+                             int plane
+#endif
 ) {
+#if CONFIG_COEFF_BR_LF_UV_BYPASS  // code_hr_t
+  int max = lf ? (plane == 0 ? (COEFF_BASE_RANGE + LF_NUM_BASE_LEVELS)
+                             : LF_NUM_BASE_LEVELS)
+               : COEFF_BASE_RANGE + NUM_BASE_LEVELS;
+#else
   int max = lf ? COEFF_BASE_RANGE + LF_NUM_BASE_LEVELS
                : COEFF_BASE_RANGE + NUM_BASE_LEVELS;
+#endif
   max -= enable_tcq ? 1 : 0;
   if (level > max) {
     int hr = 0;
     if (enable_tcq) {
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+      if (lf && (plane != 0)) {
+        hr = get_high_range_uv(level, lf);
+      } else {
+        hr = get_high_range(level, lf);
+      }
+#else
       hr = get_high_range(level, lf);
+#endif
     } else {
       hr = level - max - 1;
     }
@@ -1186,11 +1286,13 @@
     int limits = get_lf_limits(row, col, tx_class, plane);
     if (plane > 0) {
       if (limits) {
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
         if (level > LF_NUM_BASE_LEVELS) {
           const int br_ctx = get_br_lf_ctx_chroma(levels, pos, bwl, tx_class);
           aom_cdf_prob *cdf = ec_ctx->coeff_br_lf_uv_cdf[br_ctx];
           write_low_range(w, cdf, level, 1, tcq_mode);
         }
+#endif
       } else {
         if (level > NUM_BASE_LEVELS) {
           const int br_ctx = get_br_ctx_chroma(levels, pos, bwl, tx_class);
@@ -1232,8 +1334,13 @@
     const int pos = scan[0];
     const tran_low_t v = tcoeff[pos];
     const tran_low_t level = abs(v);
+#if CONFIG_COEFF_BR_PH_BYPASS
+    write_coeff_hidden(w, tx_class, scan, bwl, levels, level,
+                       ec_ctx->coeff_base_ph_cdf);
+#else
     write_coeff_hidden(w, tx_class, scan, bwl, levels, level,
                        ec_ctx->coeff_base_ph_cdf, ec_ctx->coeff_br_ph_cdf);
+#endif
   } else {
     const int c = 0;
     const int pos = scan[c];
@@ -1323,11 +1430,13 @@
     int limits = get_lf_limits(row, col, tx_class, plane);
     if (plane > 0) {
       if (limits) {
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
         if (level > LF_NUM_BASE_LEVELS) {
           const int br_ctx = get_br_lf_ctx_chroma(levels, pos, bwl, tx_class);
           aom_cdf_prob *cdf = ec_ctx->coeff_br_lf_uv_cdf[br_ctx];
           write_low_range(w, cdf, level, 1, tcq_mode);
         }
+#endif
       } else {
         if (level > NUM_BASE_LEVELS) {
           const int br_ctx = get_br_ctx_chroma(levels, pos, bwl, tx_class);
@@ -1386,10 +1495,14 @@
 #if CONFIG_CONTEXT_DERIVATION
         if (plane == AOM_PLANE_U) xd->tmp_sign[tmp_sign_idx] = (sign ? 2 : 1);
         if (plane == AOM_PLANE_V) {
+#if CONFIG_BY_PASS_V_SIGN
+          aom_write_literal(w, sign, 1);
+#else
           aom_write_symbol(
               w, sign,
               ec_ctx->v_dc_sign_cdf[xd->tmp_sign[tmp_sign_idx]][dc_sign_ctx],
               2);
+#endif
         } else {
           aom_write_symbol(
               w, sign,
@@ -1414,6 +1527,13 @@
       }
       if (is_hidden && c == 0) {
         int q_index = level >> 1;
+#if CONFIG_COEFF_BR_PH_BYPASS
+        if (q_index > NUM_BASE_LEVELS) {
+          int hr_level = q_index - 1 - NUM_BASE_LEVELS;
+          write_adaptive_hr(w, hr_level, hr_level_avg >> 1);
+          hr_level_avg = (hr_level_avg + hr_level) >> 1;
+        }
+#else
         if (q_index > COEFF_BASE_RANGE + NUM_BASE_LEVELS) {
 #if CONFIG_COEFF_HR_ADAPTIVE
           int hr_level = q_index - COEFF_BASE_RANGE - 1 - NUM_BASE_LEVELS;
@@ -1424,6 +1544,7 @@
                            0);
 #endif  // CONFIG_COEFF_HR_ADAPTIVE
         }
+#endif
       } else {
         int limits = get_lf_limits(row, col, tx_class, plane);
 #if 0 /* fix write_high_range() */
@@ -1456,6 +1577,10 @@
                          ,
                          &hr_level_avg
 #endif
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+                         ,
+                         plane
+#endif
         );
 #endif
       }
@@ -2093,8 +2218,10 @@
       coeff_costs->lps_lf_cost;
   const int(*lps_cost_uv)[COEFF_BASE_RANGE + 1 + COEFF_BASE_RANGE + 1] =
       coeff_costs->lps_cost_uv;
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
   const int(*lps_lf_cost_uv)[COEFF_BASE_RANGE + 1 + COEFF_BASE_RANGE + 1] =
       coeff_costs->lps_lf_cost_uv;
+#endif
 #if CONFIG_COEFF_HR_ADAPTIVE
   int hr_level = 0;
 #endif  // CONFIG_COEFF_HR_ADAPTIVE
@@ -2132,11 +2259,21 @@
       if (plane > 0) {
         if (limits) {
           if (level > LF_NUM_BASE_LEVELS) {
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
             const int ctx = get_br_ctx_lf_eob_chroma(pos, tx_class);
+#endif
 #if CONFIG_COEFF_HR_ADAPTIVE
-            int hr_ctx = 0; /* eob */
-            cost +=
-                get_br_lf_cost(level, lps_lf_cost_uv[ctx], hr_ctx, &hr_level);
+            int hr_ctx = 0;       /* eob */
+#if CONFIG_COEFF_BR_LF_UV_BYPASS  // cost
+            cost += get_br_lf_cost_uv(level, hr_ctx, &hr_level);
+#else
+            cost += get_br_lf_cost(level, lps_lf_cost_uv[ctx], hr_ctx, &hr_level
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+                                   ,
+                                   plane, 1
+#endif
+            );
+#endif
 #else
             cost += get_br_lf_cost(level, lps_lf_cost_uv[ctx]);
 #endif  // CONFIG_COEFF_HR_ADAPTIVE
@@ -2289,13 +2426,23 @@
       if (plane > 0) {
         if (limits) {
           if (level > LF_NUM_BASE_LEVELS) {
+#if CONFIG_COEFF_BR_LF_UV_BYPASS  // cost
+            cost += get_br_lf_cost_uv(level, hr_level_avg, &hr_level);
+            hr_level_avg = (hr_level_avg + hr_level) >> 1;
+#else
             const int ctx = get_br_lf_ctx_chroma(levels, pos, bwl, tx_class);
 #if CONFIG_COEFF_HR_ADAPTIVE
             cost += get_br_lf_cost(level, lps_lf_cost_uv[ctx], hr_level_avg,
-                                   &hr_level);
+                                   &hr_level
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+                                   ,
+                                   plane, 0
+#endif
+            );
             hr_level_avg = (hr_level_avg + hr_level) >> 1;
 #else
             cost += get_br_lf_cost(level, lps_lf_cost_uv[ctx]);
+#endif
 #endif  // CONFIG_COEFF_HR_ADAPTIVE
           }
         } else {
@@ -2360,6 +2507,9 @@
       cost += coeff_costs->dc_sign_cost[dc_ph_group][dc_sign_ctx][v < 0];
 
       if (q_index > NUM_BASE_LEVELS) {
+#if CONFIG_COEFF_BR_PH_BYPASS  // cost
+        cost += get_br_ph_cost(q_index, hr_level_avg >> 1, &hr_level);
+#else
         const int ctx = get_par_br_ctx(levels, pos, bwl, tx_class);
 #if CONFIG_COEFF_HR_ADAPTIVE
         // Use context divided by 2 since the coefficient is also divided by
@@ -2368,6 +2518,7 @@
                             hr_level_avg >> 1, &hr_level);
 #else
         cost += get_br_cost(q_index, coeff_costs_ph->lps_ph_cost[ctx]);
+#endif
 #endif  // CONFIG_COEFF_HR_ADAPTIVE
       }
     }
@@ -2427,12 +2578,21 @@
       if (plane > 0) {
         if (limits) {
           if (level > LF_NUM_BASE_LEVELS) {
+#if CONFIG_COEFF_BR_LF_UV_BYPASS  // cost
+            cost += get_br_lf_cost_uv(level, hr_level_avg, &hr_level);
+#else
             const int ctx = get_br_lf_ctx_chroma(levels, pos, bwl, tx_class);
 #if CONFIG_COEFF_HR_ADAPTIVE
             cost += get_br_lf_cost(level, lps_lf_cost_uv[ctx], hr_level_avg,
-                                   &hr_level);
+                                   &hr_level
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+                                   ,
+                                   plane, 0
+#endif
+            );
 #else
             cost += get_br_lf_cost(level, lps_lf_cost_uv[ctx]);
+#endif
 #endif  // CONFIG_COEFF_HR_ADAPTIVE
           }
         } else {
@@ -2791,6 +2951,12 @@
     if (plane > 0) {
       if (limits) {
         if (abs_qc > LF_NUM_BASE_LEVELS) {
+#if CONFIG_COEFF_BR_LF_UV_BYPASS  // cost
+          int brcost_diff = 0;
+          cost += get_br_lf_cost_with_diff_uv(abs_qc, &brcost_diff,
+                                              hr_level_avg, hr_level);
+          diff += brcost_diff;
+#else
           const int br_ctx = get_br_lf_ctx_chroma(levels, ci, bwl, tx_class);
           int brcost_diff = 0;
 #if CONFIG_COEFF_HR_ADAPTIVE
@@ -2802,6 +2968,7 @@
               abs_qc, txb_costs->lps_lf_cost_uv[br_ctx], &brcost_diff);
 #endif  // CONFIG_COEFF_HR_ADAPTIVE
           diff += brcost_diff;
+#endif
         }
       } else {
         if (abs_qc > NUM_BASE_LEVELS) {
@@ -2957,15 +3124,26 @@
     if (plane > 0) {
       if (limits) {
         if (abs_qc > LF_NUM_BASE_LEVELS) {
+#if CONFIG_COEFF_BR_LF_UV_BYPASS  // cost
+          int hr_level_avg = 0;
+          int dummy_hr_level;
+          cost += get_br_lf_cost_uv(abs_qc, hr_level_avg, &dummy_hr_level);
+#else
           int br_ctx = get_br_ctx_lf_eob_chroma(ci, tx_class);
 #if CONFIG_COEFF_HR_ADAPTIVE
           int hr_level_avg = 0;
           int dummy_hr_level;
           cost += get_br_lf_cost(abs_qc, txb_costs->lps_lf_cost_uv[br_ctx],
-                                 hr_level_avg, &dummy_hr_level);
+                                 hr_level_avg, &dummy_hr_level
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+                                 ,
+                                 plane, 1
+#endif
+          );
 #else
           cost += get_br_lf_cost(abs_qc, txb_costs->lps_lf_cost_uv[br_ctx]);
 #endif  // CONFIG_COEFF_HR_ADAPTIVE
+#endif
         }
       } else {
         if (abs_qc > NUM_BASE_LEVELS) {
@@ -3082,6 +3260,9 @@
     if (plane > 0) {
       if (limits) {
         if (abs_qc > LF_NUM_BASE_LEVELS) {
+#if CONFIG_COEFF_BR_LF_UV_BYPASS  // cost
+          cost += get_br_lf_cost_uv(abs_qc, hr_level_avg, hr_level);
+#else
           int br_ctx;
           if (is_last)
             br_ctx = get_br_ctx_lf_eob_chroma(ci, tx_class);
@@ -3089,9 +3270,15 @@
             br_ctx = get_br_lf_ctx_chroma(levels, ci, bwl, tx_class);
 #if CONFIG_COEFF_HR_ADAPTIVE
           cost += get_br_lf_cost(abs_qc, txb_costs->lps_lf_cost_uv[br_ctx],
-                                 hr_level_avg, hr_level);
+                                 hr_level_avg, hr_level
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+                                 ,
+                                 plane, is_last
+#endif
+          );
 #else
           cost += get_br_lf_cost(abs_qc, txb_costs->lps_lf_cost_uv[br_ctx]);
+#endif
 #endif  // CONFIG_COEFF_HR_ADAPTIVE
         }
       } else {
@@ -4048,12 +4235,16 @@
   const int base_ctx_ph = get_base_ctx_ph(levels, pos, bwl, tx_class);
   int rate_ph = txb_costs_ph->base_ph_cost[base_ctx_ph][AOMMIN(q_index, 3)];
   if (q_index > NUM_BASE_LEVELS) {
+#if CONFIG_COEFF_BR_PH_BYPASS  // cost
+    rate_ph += get_br_ph_cost(q_index, hr_level_avg, &dummy_hr_level);
+#else
     int br_ctx = get_par_br_ctx(levels, pos, bwl, tx_class);
 #if CONFIG_COEFF_HR_ADAPTIVE
     rate_ph += get_br_cost(q_index, txb_costs_ph->lps_ph_cost[br_ctx],
                            hr_level_avg, &dummy_hr_level);
 #else
     rate_ph += get_br_cost(q_index, txb_costs_ph->lps_ph_cost[br_ctx]);
+#endif
 #endif  // CONFIG_COEFF_HR_ADAPTIVE
   }
   const int dc_ph_group = 1;  // PH enabled
@@ -4103,6 +4294,10 @@
     const int dc_ph_group = 1;  // PH enabled
     rate_cand += txb_costs->dc_sign_cost[dc_ph_group][dc_sign_ctx][tcoeff < 0];
     if (q_index > NUM_BASE_LEVELS) {
+#if CONFIG_COEFF_BR_PH_BYPASS  // cost
+      int dummy_hr_level;
+      rate_cand += get_br_ph_cost(q_index, hr_level_avg, &dummy_hr_level);
+#else
       int br_ctx = get_par_br_ctx(levels, pos, bwl, tx_class);
 #if CONFIG_COEFF_HR_ADAPTIVE
       int dummy_hr_level;
@@ -4110,6 +4305,7 @@
                                hr_level_avg, &dummy_hr_level);
 #else
       rate_cand += get_br_cost(q_index, txb_costs_ph->lps_ph_cost[br_ctx]);
+#endif
 #endif  // CONFIG_COEFF_HR_ADAPTIVE
     }
   }
@@ -5200,7 +5396,11 @@
 
 void update_coeff_ctx_hiden(TX_CLASS tx_class, const int16_t *scan, int bwl,
                             uint8_t *levels, int level,
-                            base_ph_cdf_arr base_cdf_ph, br_cdf_arr br_cdf_ph
+                            base_ph_cdf_arr base_cdf_ph
+#if !CONFIG_COEFF_BR_PH_BYPASS
+                            ,
+                            br_cdf_arr br_cdf_ph
+#endif
 #if CONFIG_ENTROPY_STATS
                             ,
                             ThreadData *const td, int cdf_idx
@@ -5214,6 +5414,7 @@
   ++td->counts->coeff_base_ph_multi[cdf_idx][coeff_ctx][AOMMIN(level, 3)];
 #endif  // CONFIG_ENTROPY_STATS
 
+#if !CONFIG_COEFF_BR_PH_BYPASS
   if (q_index > NUM_BASE_LEVELS) {
     int br_ctx = get_par_br_ctx(levels, pos, bwl, tx_class);
     aom_cdf_prob *cdf_br = br_cdf_ph[br_ctx];
@@ -5233,6 +5434,7 @@
       if (k < BR_CDF_SIZE - 1) break;
     }
   }
+#endif
 }
 void av1_update_and_record_txb_context(int plane, int block, int blk_row,
                                        int blk_col, BLOCK_SIZE plane_bsize,
@@ -5547,6 +5749,7 @@
       int limits = get_lf_limits(row, col, tx_class, plane);
       if (plane > 0) {
         if (limits) {
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
           if (level > LF_NUM_BASE_LEVELS) {
             const int base_range = level - 1 - LF_NUM_BASE_LEVELS;
             const int br_ctx = get_br_lf_ctx_chroma(levels, pos, bwl, tx_class);
@@ -5567,6 +5770,7 @@
               if (k < BR_CDF_SIZE - 1) break;
             }
           }
+#endif
         } else {
           if (level > NUM_BASE_LEVELS) {
             const int base_range = level - 1 - NUM_BASE_LEVELS;
@@ -5652,8 +5856,11 @@
       if (allow_update_cdf) {
         const int level = abs(qcoeff[scan[0]]);
         update_coeff_ctx_hiden(tx_class, scan, bwl, levels, level,
-                               ec_ctx->coeff_base_ph_cdf,
+                               ec_ctx->coeff_base_ph_cdf
+#if !CONFIG_COEFF_BR_PH_BYPASS
+                               ,
                                ec_ctx->coeff_br_ph_cdf
+#endif
 #if CONFIG_ENTROPY_STATS
                                ,
                                td, cdf_idx
@@ -5802,6 +6009,7 @@
       int limits = get_lf_limits(row, col, tx_class, plane);
       if (plane > 0) {
         if (limits) {
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
           if (level > LF_NUM_BASE_LEVELS) {
             const int base_range = level - 1 - LF_NUM_BASE_LEVELS;
             const int br_ctx = get_br_lf_ctx_chroma(levels, pos, bwl, tx_class);
@@ -5822,6 +6030,7 @@
               if (k < BR_CDF_SIZE - 1) break;
             }
           }
+#endif
         } else {
           if (level > NUM_BASE_LEVELS) {
             const int base_range = level - 1 - NUM_BASE_LEVELS;
diff --git a/av1/encoder/intra_mode_search.c b/av1/encoder/intra_mode_search.c
index c31b7b5..a50b2b0 100644
--- a/av1/encoder/intra_mode_search.c
+++ b/av1/encoder/intra_mode_search.c
@@ -1516,11 +1516,15 @@
         mode_cost +=
             x->mode_costs.y_first_mode_costs[context][mbmi->y_mode_idx];
       } else {
+#if CONFIG_CTX_Y_SECOND_MODE
+        mode_cost += av1_cost_literal(4);
+#else
         mode_cost +=
             x->mode_costs
                 .y_second_mode_costs[context]
                                     [mbmi->y_mode_idx - FIRST_MODE_COUNT -
                                      SECOND_MODE_COUNT * (mode_set_index - 1)];
+#endif  // CONFIG_CTX_Y_SECOND_MODE
       }
       mode_cost += ref_frame_cost;
       mode_cost += mrl_idx_cost;
@@ -1536,16 +1540,20 @@
     if (mbmi->y_mode_idx < FIRST_MODE_COUNT) {
       mode_cost += x->mode_costs.y_first_mode_costs[context][mbmi->y_mode_idx];
     } else {
+#if CONFIG_CTX_Y_SECOND_MODE
+      mode_cost += av1_cost_literal(4);
+#else
       mode_cost +=
           x->mode_costs
               .y_second_mode_costs[context]
                                   [mbmi->y_mode_idx - FIRST_MODE_COUNT -
                                    SECOND_MODE_COUNT * (mode_set_index - 1)];
+#endif  // CONFIG_CTX_Y_SECOND_MODE
     }
     mode_cost += ref_frame_cost;
     mode_cost += mrl_idx_cost;
   }
-#else   // CONFIG_LOSSLESS_DPCM
+#else  // CONFIG_LOSSLESS_DPCM
   const int context = get_y_mode_idx_ctx(xd);
   int mode_set_index = mbmi->y_mode_idx < FIRST_MODE_COUNT ? 0 : 1;
   mode_set_index += ((mbmi->y_mode_idx - FIRST_MODE_COUNT) / SECOND_MODE_COUNT);
@@ -1553,11 +1561,15 @@
   if (mbmi->y_mode_idx < FIRST_MODE_COUNT) {
     mode_cost += x->mode_costs.y_first_mode_costs[context][mbmi->y_mode_idx];
   } else {
+#if CONFIG_CTX_Y_SECOND_MODE
+    mode_cost += av1_cost_literal(4);
+#else
     mode_cost +=
         x->mode_costs
             .y_second_mode_costs[context]
                                 [mbmi->y_mode_idx - FIRST_MODE_COUNT -
                                  SECOND_MODE_COUNT * (mode_set_index - 1)];
+#endif  // CONFIG_CTX_Y_SECOND_MODE
   }
   if (mbmi->region_type != INTRA_REGION) mode_cost += ref_frame_cost;
   mode_cost += mrl_idx_cost;
@@ -1889,10 +1901,16 @@
             if (mode_idx < FIRST_MODE_COUNT) {
               mode_costs += x->mode_costs.y_first_mode_costs[context][mode_idx];
             } else {
-              mode_costs +=
-                  x->mode_costs.y_second_mode_costs
-                      [context][mbmi->y_mode_idx - FIRST_MODE_COUNT -
-                                SECOND_MODE_COUNT * (mode_set_index - 1)];
+#if CONFIG_CTX_Y_SECOND_MODE
+              mode_costs += av1_cost_literal(4);
+#else
+        mode_costs +=
+            x->mode_costs
+                .y_second_mode_costs[context]
+                                    [mbmi->y_mode_idx - FIRST_MODE_COUNT -
+                                     SECOND_MODE_COUNT * (mode_set_index - 1)];
+
+#endif  // CONFIG_CTX_Y_SECOND_MODE
             }
 #if CONFIG_LOSSLESS_DPCM
           } else {
@@ -2192,10 +2210,15 @@
             if (mode_idx < FIRST_MODE_COUNT) {
               mode_costs += x->mode_costs.y_first_mode_costs[context][mode_idx];
             } else {
-              mode_costs +=
-                  x->mode_costs.y_second_mode_costs
-                      [context][mbmi->y_mode_idx - FIRST_MODE_COUNT -
-                                SECOND_MODE_COUNT * (mode_set_index - 1)];
+#if CONFIG_CTX_Y_SECOND_MODE
+              mode_costs += av1_cost_literal(4);
+#else
+        mode_costs +=
+            x->mode_costs
+                .y_second_mode_costs[context]
+                                    [mbmi->y_mode_idx - FIRST_MODE_COUNT -
+                                     SECOND_MODE_COUNT * (mode_set_index - 1)];
+#endif  // CONFIG_CTX_Y_SECOND_MODE
             }
 #if CONFIG_LOSSLESS_DPCM
           } else {
diff --git a/av1/encoder/mcomp.c b/av1/encoder/mcomp.c
index 71663b5..4dd3def 100644
--- a/av1/encoder/mcomp.c
+++ b/av1/encoder/mcomp.c
@@ -2914,15 +2914,27 @@
 #endif  // CONFIG_IBC_SUBPEL_PRECISION
 }
 
-int av1_get_intrabc_drl_idx_cost(int max_ref_bv_num, int intrabc_drl_idx,
-                                 const MACROBLOCK *x) {
+int av1_get_intrabc_drl_idx_cost(int max_ref_bv_num, int intrabc_drl_idx
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
+                                 ,
+                                 const MACROBLOCK *x
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
+) {
   assert(intrabc_drl_idx < max_ref_bv_num);
   int cost = 0;
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
   int bit_cnt = 0;
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
   for (int idx = 0; idx < max_ref_bv_num - 1; ++idx) {
+#if CONFIG_BYPASS_INTRABC_DRL_IDX
+    cost += av1_cost_literal(1);
+#else
     cost += x->mode_costs.intrabc_drl_idx_cost[bit_cnt][intrabc_drl_idx != idx];
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
     if (intrabc_drl_idx == idx) return cost;
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
     ++bit_cnt;
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
   }
   return cost;
 }
@@ -2937,7 +2949,12 @@
   ref_bv_cost += x->mode_costs.intrabc_mode_cost[intrabc_mode];
   ref_bv_cost +=
 #if CONFIG_IBC_BV_IMPROVEMENT && CONFIG_IBC_MAX_DRL
-      av1_get_intrabc_drl_idx_cost(max_bvp_drl_bits + 1, intrabc_drl_idx, x);
+      av1_get_intrabc_drl_idx_cost(max_bvp_drl_bits + 1, intrabc_drl_idx
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
+                                   ,
+                                   x
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
+      );
 #else
       av1_get_intrabc_drl_idx_cost(MAX_REF_BV_STACK_SIZE, intrabc_drl_idx, x);
 #endif  // CONFIG_IBC_BV_IMPROVEMENT && CONFIG_IBC_MAX_DRL
diff --git a/av1/encoder/mcomp.h b/av1/encoder/mcomp.h
index cfe4f45..4f57036 100644
--- a/av1/encoder/mcomp.h
+++ b/av1/encoder/mcomp.h
@@ -802,8 +802,12 @@
 void av1_init_ref_mv(MV_COST_PARAMS *mv_cost_params, const MV *ref_mv);
 
 // Compute the cost for signalling the intrabc DRL index
-int av1_get_intrabc_drl_idx_cost(int max_ref_bv_num, int intrabc_drl_idx,
-                                 const MACROBLOCK *x);
+int av1_get_intrabc_drl_idx_cost(int max_ref_bv_num, int intrabc_drl_idx
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
+                                 ,
+                                 const MACROBLOCK *x
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
+);
 
 // Compute the cost for signalling the intrabc mode and intrabc DRL index. This
 // is only used during the motion search
diff --git a/av1/encoder/partition_search.c b/av1/encoder/partition_search.c
index 367aab3..10699fa 100644
--- a/av1/encoder/partition_search.c
+++ b/av1/encoder/partition_search.c
@@ -1180,22 +1180,31 @@
 }
 
 #if CONFIG_IBC_BV_IMPROVEMENT
-static void update_intrabc_drl_idx_stats(int max_ref_bv_num, FRAME_CONTEXT *fc,
+static void update_intrabc_drl_idx_stats(int max_ref_bv_num,
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
+                                         FRAME_CONTEXT *fc,
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
                                          FRAME_COUNTS *counts,
                                          const MB_MODE_INFO *mbmi) {
 #if !CONFIG_ENTROPY_STATS
   (void)counts;
 #endif  // !CONFIG_ENTROPY_STATS
   assert(mbmi->intrabc_drl_idx < max_ref_bv_num);
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
   int bit_cnt = 0;
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
   for (int idx = 0; idx < max_ref_bv_num - 1; ++idx) {
-#if CONFIG_ENTROPY_STATS
+#if CONFIG_ENTROPY_STATS && !CONFIG_BYPASS_INTRABC_DRL_IDX
     counts->intrabc_drl_idx[bit_cnt][mbmi->intrabc_drl_idx != idx]++;
 #endif  // CONFIG_ENTROPY_STATS
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
     update_cdf(fc->intrabc_drl_idx_cdf[bit_cnt], mbmi->intrabc_drl_idx != idx,
                2);
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
     if (mbmi->intrabc_drl_idx == idx) break;
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
     ++bit_cnt;
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
   }
 }
 #endif  // CONFIG_IBC_BV_IMPROVEMENT
@@ -1234,6 +1243,10 @@
 #endif  // CONFIG_WARP_PRECISION
 
 ) {
+#if CONFIG_BYPASS_WARP_PARAM_HIGH
+  (void)max_coded_index;
+#endif
+
   assert(2 <= index && index <= 5);
   int index_type = (index == 2 || index == 5) ? 0 : 1;
   int coded_value_low_max = (WARP_DELTA_NUMSYMBOLS_LOW - 1);
@@ -1246,11 +1259,13 @@
              WARP_DELTA_NUMSYMBOLS_LOW);
 
 #if CONFIG_WARP_PRECISION
+#if !CONFIG_BYPASS_WARP_PARAM_HIGH
   if (max_coded_index >= WARP_DELTA_NUMSYMBOLS_LOW &&
       coded_value >= coded_value_low_max) {
     update_cdf(fc->warp_delta_param_high_cdf[index_type], coded_value - 7,
                WARP_DELTA_NUMSYMBOLS_HIGH);
   }
+#endif
 #endif  // CONFIG_WARP_PRECISION
 
 #if CONFIG_ENTROPY_STATS
@@ -1325,10 +1340,12 @@
                                     counts,
 #endif  // CONFIG_ENTROPY_STATS
                                     fc, max_coded_index);
+#if !CONFIG_BYPASS_WARP_PARAM_SIGN
       // update sign context
       if (coded_value) {
         update_cdf(fc->warp_param_sign_cdf, coded_value < 0, 2);
       }
+#endif
 #else
       int coded_value = (value / step_size) + max_coded_index;
       update_warp_delta_param_stats(index, coded_value,
@@ -1561,7 +1578,10 @@
       ++td->counts->intrabc_mode[mbmi->intrabc_mode];
 #endif  // CONFIG_ENTROPY_STATS
 #if CONFIG_IBC_MAX_DRL
-      update_intrabc_drl_idx_stats(cm->features.max_bvp_drl_bits + 1, fc,
+      update_intrabc_drl_idx_stats(cm->features.max_bvp_drl_bits + 1,
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
+                                   fc,
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
                                    td->counts, mbmi);
 #else
       update_intrabc_drl_idx_stats(MAX_REF_BV_STACK_SIZE, fc, td->counts, mbmi);
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c
index ff59d5c..e2643a6 100644
--- a/av1/encoder/rd.c
+++ b/av1/encoder/rd.c
@@ -199,8 +199,10 @@
     // y mode costs
     av1_cost_tokens_from_cdf(mode_costs->y_first_mode_costs[i],
                              fc->y_mode_idx_cdf_0[i], NULL);
+#if !CONFIG_CTX_Y_SECOND_MODE
     av1_cost_tokens_from_cdf(mode_costs->y_second_mode_costs[i],
                              fc->y_mode_idx_cdf_1[i], NULL);
+#endif  // !CONFIG_CTX_Y_SECOND_MODE
   }
 
   for (j = 0; j < UV_MODE_CONTEXTS; ++j)
@@ -263,8 +265,10 @@
 
 #if CONFIG_PALETTE_IMPROVEMENTS
 #if CONFIG_PALETTE_LINE_COPY
+#if !CONFIG_PLT_DIR_CTX
   av1_cost_tokens_from_cdf(mode_costs->palette_direction_cost,
                            fc->palette_direction_cdf, NULL);
+#endif  // !CONFIG_PLT_DIR_CTX
 #endif  // CONFIG_PALETTE_LINE_COPY
   for (i = 0; i < PALETTE_ROW_FLAG_CONTEXTS; ++i) {
     av1_cost_tokens_from_cdf(mode_costs->palette_y_row_flag_cost[i],
@@ -777,9 +781,16 @@
 #endif  // CONFIG_WARP_PRECISION
 
     for (i = 0; i < 3; i++) {
-      for (j = 0; j < WARP_REF_CONTEXTS; j++) {
-        av1_cost_tokens_from_cdf(mode_costs->warp_ref_idx_cost[i][j],
-                                 fc->warp_ref_idx_cdf[i][j], NULL);
+      if ((CONFIG_CTX_WARP_REFIDX_REDUCTION >> i) & 1) {
+        for (j = 0; j < WARP_REF_CONTEXTS; j++) {
+          mode_costs->warp_ref_idx_cost[i][j][0] = av1_cost_literal(1);
+          mode_costs->warp_ref_idx_cost[i][j][1] = av1_cost_literal(1);
+        }
+      } else {
+        for (j = 0; j < WARP_REF_CONTEXTS; j++) {
+          av1_cost_tokens_from_cdf(mode_costs->warp_ref_idx_cost[i][j],
+                                   fc->warp_ref_idx_cdf[i][j], NULL);
+        }
       }
     }
 
@@ -859,8 +870,13 @@
   av1_cost_tokens_from_cdf(mode_costs->pc_wiener_restore_cost,
                            fc->pc_wiener_restore_cdf, NULL);
   // Bit cost for parameter to designate whether unit coeffs are merged.
+#if CONFIG_MERGE_PARA_CTX
+  mode_costs->merged_param_cost[0] = av1_cost_literal(1);
+  mode_costs->merged_param_cost[1] = av1_cost_literal(1);
+#else
   av1_cost_tokens_from_cdf(mode_costs->merged_param_cost, fc->merged_param_cdf,
                            NULL);
+#endif  // !CONFIG_MERGE_PARA_CTX
 }
 
 // Values are now correlated to quantizer.
@@ -1319,8 +1335,13 @@
             pcost->base_bob_cost[ctx],
             fc->coeff_base_bob_cdf[AOMMIN(tx_size, TX_16X16)][ctx], NULL);
       for (int ctx = 0; ctx < EOB_COEF_CONTEXTS; ++ctx)
+#if CONFIG_EOB_PT_CTX_REDUCTION
+        av1_cost_tokens_from_cdf(pcost->eob_extra_cost[ctx], fc->eob_extra_cdf,
+                                 NULL);
+#else
         av1_cost_tokens_from_cdf(pcost->eob_extra_cost[ctx],
                                  fc->eob_extra_cdf[tx_size][plane][ctx], NULL);
+#endif
       for (int gr = 0; gr < DC_SIGN_GROUPS; ++gr) {
         for (int ctx = 0; ctx < DC_SIGN_CONTEXTS; ++ctx) {
           av1_cost_tokens_from_cdf(pcost->dc_sign_cost[gr][ctx],
@@ -1331,8 +1352,15 @@
       if (plane == PLANE_TYPE_UV) {
         for (int i = 0; i < CROSS_COMPONENT_CONTEXTS; ++i)
           for (int ctx = 0; ctx < DC_SIGN_CONTEXTS; ++ctx)
+#if CONFIG_BY_PASS_V_SIGN
+          {
+            pcost->v_dc_sign_cost[i][ctx][0] = av1_cost_literal(1);
+            pcost->v_dc_sign_cost[i][ctx][1] = av1_cost_literal(1);
+          }
+#else
             av1_cost_tokens_from_cdf(pcost->v_dc_sign_cost[i][ctx],
                                      fc->v_dc_sign_cdf[i][ctx], NULL);
+#endif
 #if !CONFIG_CTX_V_AC_SIGN
         for (int i = 0; i < CROSS_COMPONENT_CONTEXTS; ++i)
           av1_cost_tokens_from_cdf(pcost->v_ac_sign_cost[i],
@@ -1341,12 +1369,15 @@
       }
 #endif  // CONFIG_CONTEXT_DERIVATION
 
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS
       for (int ctx = 0; ctx < LF_LEVEL_CONTEXTS_UV; ++ctx) {
         int br_lf_cctx_rate[BR_CDF_SIZE];
         int prev_cost_lf_cctx = 0;
         int i, j;
+#if !CONFIG_COEFF_BR_LF_UV_BYPASS  // cost
         av1_cost_tokens_from_cdf(br_lf_cctx_rate, fc->coeff_br_lf_uv_cdf[ctx],
                                  NULL);
+#endif
         for (i = 0; i < COEFF_BASE_RANGE; i += BR_CDF_SIZE - 1) {
           for (j = 0; j < BR_CDF_SIZE - 1; j++) {
             pcost->lps_lf_cost_uv[ctx][i + j] =
@@ -1364,6 +1395,7 @@
               pcost->lps_lf_cost_uv[ctx][i] - pcost->lps_lf_cost_uv[ctx][i - 1];
         }
       }
+#endif
 
       for (int ctx = 0; ctx < LEVEL_CONTEXTS_UV; ++ctx) {
         int br_rate_cctx[BR_CDF_SIZE];
@@ -1532,6 +1564,7 @@
                              fc->coeff_base_ph_cdf[ctx], NULL);
   }
 
+#if !CONFIG_COEFF_BR_PH_BYPASS  // cost
   for (int ctx = 0; ctx < COEFF_BR_PH_CONTEXTS; ++ctx) {
     int br_ph_rate[BR_CDF_SIZE];
     int prev_cost = 0;
@@ -1553,6 +1586,7 @@
           pcost->lps_ph_cost[ctx][i] - pcost->lps_ph_cost[ctx][i - 1];
     }
   }
+#endif
 }
 
 #if CONFIG_IBC_SUBPEL_PRECISION
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 30986b7..05aa679 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -7986,7 +7986,12 @@
 #else
           MAX_REF_BV_STACK_SIZE,
 #endif  // CONFIG_IBC_BV_IMPROVEMENT && CONFIG_IBC_MAX_DRL
-          mbmi->intrabc_drl_idx, x);
+          mbmi->intrabc_drl_idx
+#if !CONFIG_BYPASS_INTRABC_DRL_IDX
+          ,
+          x
+#endif  // CONFIG_BYPASS_INTRABC_DRL_IDX
+      );
 #else
     // TODO(aconverse@google.com): The full motion field defining discount
     // in MV_COST_WEIGHT is too large. Explore other values.
diff --git a/av1/encoder/tokenize.c b/av1/encoder/tokenize.c
index 59cdae3..2b0b99b 100644
--- a/av1/encoder/tokenize.c
+++ b/av1/encoder/tokenize.c
@@ -55,9 +55,15 @@
   int identity_row_flag = 0;
   const int axis1_limit = direction ? rows : cols;
   const int axis2_limit = direction ? cols : rows;
+#if !CONFIG_PLT_DIR_CTX
   PaletteDirectionCost direction_cost = param->direction_cost;
+#endif  // !CONFIG_PLT_DIR_CTX
   if (calc_rate && plane_block_width < 64 && plane_block_height < 64) {
+#if CONFIG_PLT_DIR_CTX
+    this_rate += av1_cost_literal(1);  // direction_cost
+#else
     this_rate += (*direction_cost)[direction];
+#endif  // CONFIG_PLT_DIR_CTX
   }
   for (int ax2 = 0; ax2 < axis2_limit; ax2++) {
     int line_copy_flag = 0;
@@ -114,9 +120,11 @@
           (*t)->direction = direction;
           (*t)++;
           if (allow_update_cdf) {
+#if !CONFIG_PLT_DIR_CTX
             if (plane_block_width < 64 && plane_block_height < 64) {
               update_cdf(param->direction_cdf, direction, 2);
             }
+#endif  // !CONFIG_PLT_DIR_CTX
             update_cdf(identity_row_cdf[ctx], identity_row_flag, 3);
           }
         } else {
@@ -370,8 +378,10 @@
 
 #if CONFIG_PALETTE_IMPROVEMENTS
 #if CONFIG_PALETTE_LINE_COPY
+#if !CONFIG_PLT_DIR_CTX
   params->direction_cdf = xd->tile_ctx->palette_direction_cdf;
   params->direction_cost = &x->mode_costs.palette_direction_cost;
+#endif  // !CONFIG_PLT_DIR_CTX
 #endif  // CONFIG_PALETTE_LINE_COPY
   params->identity_row_cdf = plane ? xd->tile_ctx->identity_row_cdf_uv
                                    : xd->tile_ctx->identity_row_cdf_y;
diff --git a/av1/encoder/trellis_quant.c b/av1/encoder/trellis_quant.c
index 8ca3f76..ae8818a 100644
--- a/av1/encoder/trellis_quant.c
+++ b/av1/encoder/trellis_quant.c
@@ -156,8 +156,12 @@
     if (plane > 0) {
       if (limits) {
         if (abs_qc > LF_NUM_BASE_LEVELS) {
+#if CONFIG_COEFF_BR_LF_UV_BYPASS  // cost
+          cost += get_br_lf_cost_tcq_uv(abs_qc);
+#else
           int br_ctx = get_br_ctx_lf_eob_chroma(ci, tx_class);
           cost += get_br_lf_cost_tcq(abs_qc, txb_costs->lps_lf_cost_uv[br_ctx]);
+#endif
         }
       } else {
         if (abs_qc > NUM_BASE_LEVELS) {
@@ -255,8 +259,12 @@
     if (plane > 0) {
       if (limits) {
         if (abs_qc > LF_NUM_BASE_LEVELS) {
+#if CONFIG_COEFF_BR_LF_UV_BYPASS  // cost
+          cost += get_br_lf_cost_tcq_uv(abs_qc);
+#else
           cost +=
               get_br_lf_cost_tcq(abs_qc, txb_costs->lps_lf_cost_uv[mid_ctx]);
+#endif
         }
       } else {
         if (abs_qc > NUM_BASE_LEVELS) {
@@ -1061,9 +1069,13 @@
         for (int i = 0; i < TCQ_N_STATES; i++) {
           int base_ctx = get_lower_levels_lf_ctx_chroma(prev_levels[i], blk_pos,
                                                         bwl, tx_class, plane);
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+          coeff_ctx.coef[i] = base_ctx - diag_ctx;
+#else
           int br_ctx =
               get_br_lf_ctx_chroma(prev_levels[i], blk_pos, bwl, tx_class);
           coeff_ctx.coef[i] = base_ctx - diag_ctx + (br_ctx << 4);
+#endif
         }
         av1_get_rate_dist_lf_chroma(txb_costs, &pqData, &coeff_ctx, blk_pos,
                                     diag_ctx, eob_rate, dc_sign_ctx, tmp_sign,
diff --git a/av1/encoder/trellis_quant.h b/av1/encoder/trellis_quant.h
index 9f18193..f6fb4a6 100644
--- a/av1/encoder/trellis_quant.h
+++ b/av1/encoder/trellis_quant.h
@@ -152,6 +152,15 @@
   return low;
 }
 
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+// Get the high range part of a coeff
+static AOM_FORCE_INLINE int get_high_range_uv(int abs_qc, int lf) {
+  int base_levels = lf ? 6 : 4;
+  int high_range = (abs_qc - (base_levels - 1)) >> 1;
+  return high_range;
+}
+#endif
+
 // Get the high range part of a coeff
 static AOM_FORCE_INLINE int get_high_range(int abs_qc, int lf) {
   int base_levels = lf ? 6 : 4;
@@ -173,6 +182,15 @@
 #endif
 }
 
+#if CONFIG_COEFF_BR_LF_UV_BYPASS
+// Calculate the cost of low range of a coeff in low-freq region
+static AOM_FORCE_INLINE int get_br_lf_cost_tcq_uv(tran_low_t level) {
+  const int r = 1 + get_high_range_uv(level, 1);
+  const int length = get_msb(r) + 1;
+  return av1_cost_literal(2 * length - 1);
+}
+#endif
+
 // Calculate the cost of low range of a coeff in low-freq region
 static AOM_FORCE_INLINE int get_br_lf_cost_tcq(tran_low_t level,
                                                const int *coeff_lps) {
diff --git a/av1/encoder/x86/trellis_quant_avx2.c b/av1/encoder/x86/trellis_quant_avx2.c
index 5364027..492ae45 100644
--- a/av1/encoder/x86/trellis_quant_avx2.c
+++ b/av1/encoder/x86/trellis_quant_avx2.c
@@ -348,8 +348,12 @@
     }
     if (plane > 0) {
       if (abs_qc > LF_NUM_BASE_LEVELS) {
+#if CONFIG_COEFF_BR_LF_UV_BYPASS  // cost
+        cost += get_br_lf_cost_tcq_uv(abs_qc);
+#else
         int br_ctx = get_br_ctx_lf_eob_chroma(ci, tx_class);
         cost += get_br_lf_cost_tcq(abs_qc, txb_costs->lps_lf_cost_uv[br_ctx]);
+#endif
       }
     } else {
       if (abs_qc > LF_NUM_BASE_LEVELS) {
@@ -393,9 +397,13 @@
   else
     cost += txb_costs->dc_sign_cost[dc_ph_group][dc_sign_ctx][sign];
   if (plane > 0) {
+#if CONFIG_COEFF_BR_LF_UV_BYPASS  // cost
+    cost += get_br_lf_cost_tcq_uv(abs_qc);
+#else
     if (abs_qc > LF_NUM_BASE_LEVELS) {
       cost += get_br_lf_cost_tcq(abs_qc, txb_costs->lps_lf_cost_uv[mid_ctx]);
     }
+#endif
   } else {
     if (abs_qc > LF_NUM_BASE_LEVELS) {
       cost += get_br_lf_cost_tcq(abs_qc, txb_costs->lps_lf_cost[mid_ctx]);
diff --git a/build/cmake/aom_config_defaults.cmake b/build/cmake/aom_config_defaults.cmake
index 49ca8a0..020294f 100644
--- a/build/cmake/aom_config_defaults.cmake
+++ b/build/cmake/aom_config_defaults.cmake
@@ -147,8 +147,24 @@
 set_aom_config_var(CONFIG_PARAKIT_COLLECT_DATA 0
                    "enables data collection for ParaKit training.")
 
+# FG8 context simplification tests
 set_aom_config_var(CONFIG_CTX_V_AC_SIGN 1 "FG8-Test1.")
 set_aom_config_var(CONFIG_CTX_MV_SHELL_OFFSET_OTHER 1 "FG8-Test3.")
+set_aom_config_var(CONFIG_EOB_PT_CTX_REDUCTION 1 "FG8-Test4.")
+set_aom_config_var(CONFIG_COEFF_BR_LF_UV_BYPASS 1
+                   "AV2 experiment flag to bypass UV LF syntax. FG8-Test9.")
+set_aom_config_var(CONFIG_COEFF_BR_PH_BYPASS 1
+                   "AV2 experiment flag to bypass BR PH syntax. FG8-Test10.")
+set_aom_config_var(CONFIG_BY_PASS_V_SIGN 1 "FG8-Test11.")
+set_aom_config_var(CONFIG_CTX_WARP_REFIDX_REDUCTION 7
+                   "FG8-Test19, Test20, Test21")
+set_aom_config_var(CONFIG_BYPASS_WARP_PARAM_HIGH 1 "bypass coding FG8-Test22")
+set_aom_config_var(CONFIG_BYPASS_WARP_PARAM_SIGN 1 "bypass coding FG8-Test23")
+set_aom_config_var(CONFIG_PLT_DIR_CTX 1 "by-pass PLT dir coding. FG8-Test24")
+set_aom_config_var(CONFIG_BYPASS_INTRABC_DRL_IDX 1 "bypass coding FG8-Test25")
+set_aom_config_var(CONFIG_MERGE_PARA_CTX 1
+                   "by-pass merge para coding. FG8-Test26")
+set_aom_config_var(CONFIG_CTX_Y_SECOND_MODE 1 "bypass coding FG8-Test27")
 
 # AV2 experiment flags.
 set_aom_config_var(