diff --git a/aom_dsp/txfm_common.h b/aom_dsp/txfm_common.h
index 5f6254e..0fae962 100644
--- a/aom_dsp/txfm_common.h
+++ b/aom_dsp/txfm_common.h
@@ -28,9 +28,7 @@
   TX_SIZE tx_size;
   int lossless;
   int bd;
-#if CONFIG_EXT_TX
   TxSetType tx_set_type;
-#endif  // CONFIG_EXT_TX
 #if CONFIG_MRC_TX || CONFIG_LGT
   int is_inter;
 #endif  // CONFIG_MRC_TX || CONFIG_LGT
diff --git a/aom_dsp/x86/txfm_common_sse2.h b/aom_dsp/x86/txfm_common_sse2.h
index 4257d8b..cd856ff 100644
--- a/aom_dsp/x86/txfm_common_sse2.h
+++ b/aom_dsp/x86/txfm_common_sse2.h
@@ -35,7 +35,6 @@
   return _mm_shuffle_epi32(b, 0x4e);
 }
 
-#if CONFIG_EXT_TX
 // Identity transform (both forward and inverse).
 static INLINE void idtx16_8col(__m128i *in) {
   const __m128i k__zero_epi16 = _mm_set1_epi16((int16_t)0);
@@ -226,7 +225,6 @@
   in[14] = _mm_packs_epi32(u6, y6);
   in[15] = _mm_packs_epi32(u7, y7);
 }
-#endif  // CONFIG_EXT_TX
 
 static INLINE void scale_sqrt2_8x4(__m128i *in) {
   // Implements ROUND_POWER_OF_TWO(input * Sqrt2, DCT_CONST_BITS), for 32
diff --git a/av1/av1_cx.mk b/av1/av1_cx.mk
index 6a9be69..792db29 100644
--- a/av1/av1_cx.mk
+++ b/av1/av1_cx.mk
@@ -160,8 +160,6 @@
 
 AV1_CX_SRCS-$(HAVE_SSE4_1) += encoder/x86/corner_match_sse4.c
 
-ifeq ($(CONFIG_EXT_TX),yes)
 AV1_CX_SRCS-yes += encoder/tx_prune_model_weights.h
-endif
 
 AV1_CX_SRCS-yes := $(filter-out $(AV1_CX_SRCS_REMOVE-yes),$(AV1_CX_SRCS-yes))
diff --git a/av1/common/av1_fwd_txfm1d.c b/av1/common/av1_fwd_txfm1d.c
index c9c7f43..24bf2af 100644
--- a/av1/common/av1_fwd_txfm1d.c
+++ b/av1/common/av1_fwd_txfm1d.c
@@ -1517,7 +1517,6 @@
   range_check(stage, input, bf1, size, stage_range[stage]);
 }
 
-#if CONFIG_EXT_TX
 void av1_fidentity4_c(const int32_t *input, int32_t *output,
                       const int8_t *cos_bit, const int8_t *stage_range) {
   (void)cos_bit;
@@ -1557,7 +1556,6 @@
   range_check(0, input, output, 64, stage_range[0]);
 }
 #endif  // CONFIG_TX64X64
-#endif  // CONFIG_EXT_TX
 
 #if CONFIG_TX64X64
 void av1_fdct64_new(const int32_t *input, int32_t *output,
diff --git a/av1/common/av1_fwd_txfm1d.h b/av1/common/av1_fwd_txfm1d.h
index f880239..95080fa 100644
--- a/av1/common/av1_fwd_txfm1d.h
+++ b/av1/common/av1_fwd_txfm1d.h
@@ -39,7 +39,6 @@
                      const int8_t *cos_bit, const int8_t *stage_range);
 void av1_fadst32_new(const int32_t *input, int32_t *output,
                      const int8_t *cos_bit, const int8_t *stage_range);
-#if CONFIG_EXT_TX
 void av1_fidentity4_c(const int32_t *input, int32_t *output,
                       const int8_t *cos_bit, const int8_t *stage_range);
 void av1_fidentity8_c(const int32_t *input, int32_t *output,
@@ -52,7 +51,6 @@
 void av1_fidentity64_c(const int32_t *input, int32_t *output,
                        const int8_t *cos_bit, const int8_t *stage_range);
 #endif  // CONFIG_TX64X64
-#endif  // CONFIG_EXT_TX
 
 #ifdef __cplusplus
 }
diff --git a/av1/common/av1_fwd_txfm1d_cfg.h b/av1/common/av1_fwd_txfm1d_cfg.h
index f2ed931..788ebc5 100644
--- a/av1/common/av1_fwd_txfm1d_cfg.h
+++ b/av1/common/av1_fwd_txfm1d_cfg.h
@@ -314,7 +314,6 @@
   TXFM_TYPE_ADST32,             // .txfm_type
 };
 
-#if CONFIG_EXT_TX
 // identity does not need to differentiate between row and col
 //  ---------------- row/col config fwd_identity_4 ----------
 static const TXFM_1D_CFG fwd_txfm_1d_cfg_identity_4 = {
@@ -359,5 +358,4 @@
   NULL,                    // .cos_bit
   TXFM_TYPE_IDENTITY32,    // .txfm_type
 };
-#endif  // CONFIG_EXT_TX
 #endif  // AV1_FWD_TXFM2D_CFG_H_
diff --git a/av1/common/av1_fwd_txfm2d.c b/av1/common/av1_fwd_txfm2d.c
index 7b52e35..3126d73 100644
--- a/av1/common/av1_fwd_txfm2d.c
+++ b/av1/common/av1_fwd_txfm2d.c
@@ -31,7 +31,6 @@
     case TXFM_TYPE_ADST8: return av1_fadst8_new;
     case TXFM_TYPE_ADST16: return av1_fadst16_new;
     case TXFM_TYPE_ADST32: return av1_fadst32_new;
-#if CONFIG_EXT_TX
     case TXFM_TYPE_IDENTITY4: return av1_fidentity4_c;
     case TXFM_TYPE_IDENTITY8: return av1_fidentity8_c;
     case TXFM_TYPE_IDENTITY16: return av1_fidentity16_c;
@@ -39,7 +38,6 @@
 #if CONFIG_TX64X64
     case TXFM_TYPE_IDENTITY64: return av1_fidentity64_c;
 #endif  // CONFIG_TX64X64
-#endif  // CONFIG_EXT_TX
     default: assert(0); return NULL;
   }
 }
@@ -305,14 +303,12 @@
   // ADST
   { &fwd_txfm_1d_col_cfg_adst_4, &fwd_txfm_1d_col_cfg_adst_8,
     &fwd_txfm_1d_col_cfg_adst_16, &fwd_txfm_1d_col_cfg_adst_32 },
-#if CONFIG_EXT_TX
   // FLIPADST
   { &fwd_txfm_1d_col_cfg_adst_4, &fwd_txfm_1d_col_cfg_adst_8,
     &fwd_txfm_1d_col_cfg_adst_16, &fwd_txfm_1d_col_cfg_adst_32 },
   // IDENTITY
   { &fwd_txfm_1d_cfg_identity_4, &fwd_txfm_1d_cfg_identity_8,
     &fwd_txfm_1d_cfg_identity_16, &fwd_txfm_1d_cfg_identity_32 },
-#endif  // CONFIG_EXT_TX
 };
 
 static const TXFM_1D_CFG *fwd_txfm_row_cfg_ls[TX_TYPES_1D][TX_SIZES] = {
@@ -322,14 +318,12 @@
   // ADST
   { &fwd_txfm_1d_row_cfg_adst_4, &fwd_txfm_1d_row_cfg_adst_8,
     &fwd_txfm_1d_row_cfg_adst_16, &fwd_txfm_1d_row_cfg_adst_32 },
-#if CONFIG_EXT_TX
   // FLIPADST
   { &fwd_txfm_1d_row_cfg_adst_4, &fwd_txfm_1d_row_cfg_adst_8,
     &fwd_txfm_1d_row_cfg_adst_16, &fwd_txfm_1d_row_cfg_adst_32 },
   // IDENTITY
   { &fwd_txfm_1d_cfg_identity_4, &fwd_txfm_1d_cfg_identity_8,
     &fwd_txfm_1d_cfg_identity_16, &fwd_txfm_1d_cfg_identity_32 },
-#endif  // CONFIG_EXT_TX
 };
 
 TXFM_2D_FLIP_CFG av1_get_fwd_txfm_cfg(TX_TYPE tx_type, TX_SIZE tx_size) {
diff --git a/av1/common/av1_inv_txfm1d.c b/av1/common/av1_inv_txfm1d.c
index 51f4b63..687ef97 100644
--- a/av1/common/av1_inv_txfm1d.c
+++ b/av1/common/av1_inv_txfm1d.c
@@ -1563,7 +1563,6 @@
   range_check(stage, input, bf1, size, stage_range[stage]);
 }
 
-#if CONFIG_EXT_TX
 void av1_iidentity4_c(const int32_t *input, int32_t *output,
                       const int8_t *cos_bit, const int8_t *stage_range) {
   (void)cos_bit;
@@ -1603,7 +1602,6 @@
   range_check(0, input, output, 64, stage_range[0]);
 }
 #endif  // CONFIG_TX64X64
-#endif  // CONFIG_EXT_TX
 
 #if CONFIG_TX64X64
 void av1_idct64_new(const int32_t *input, int32_t *output,
diff --git a/av1/common/av1_inv_txfm1d.h b/av1/common/av1_inv_txfm1d.h
index 8996f7c..c6655fb 100644
--- a/av1/common/av1_inv_txfm1d.h
+++ b/av1/common/av1_inv_txfm1d.h
@@ -39,7 +39,6 @@
                      const int8_t *cos_bit, const int8_t *stage_range);
 void av1_iadst32_new(const int32_t *input, int32_t *output,
                      const int8_t *cos_bit, const int8_t *stage_range);
-#if CONFIG_EXT_TX
 void av1_iidentity4_c(const int32_t *input, int32_t *output,
                       const int8_t *cos_bit, const int8_t *stage_range);
 void av1_iidentity8_c(const int32_t *input, int32_t *output,
@@ -52,7 +51,6 @@
 void av1_iidentity64_c(const int32_t *input, int32_t *output,
                        const int8_t *cos_bit, const int8_t *stage_range);
 #endif  // CONFIG_TX64X64
-#endif  // CONFIG_EXT_TX
 
 #ifdef __cplusplus
 }
diff --git a/av1/common/av1_inv_txfm1d_cfg.h b/av1/common/av1_inv_txfm1d_cfg.h
index 0724294..45526ec 100644
--- a/av1/common/av1_inv_txfm1d_cfg.h
+++ b/av1/common/av1_inv_txfm1d_cfg.h
@@ -306,7 +306,6 @@
   TXFM_TYPE_ADST32,             // .txfm_type
 };
 
-#if CONFIG_EXT_TX
 // identity does not need to differentiate between row and col
 //  ---------------- row/col config inv_identity_4 ----------
 static const TXFM_1D_CFG inv_txfm_1d_cfg_identity_4 = {
@@ -359,5 +358,4 @@
   TXFM_TYPE_IDENTITY64,    // .txfm_type
 };
 #endif  // CONFIG_TX64X64
-#endif  // CONFIG_EXT_TX
 #endif  // AV1_INV_TXFM2D_CFG_H_
diff --git a/av1/common/av1_inv_txfm2d.c b/av1/common/av1_inv_txfm2d.c
index 202d637..646f283 100644
--- a/av1/common/av1_inv_txfm2d.c
+++ b/av1/common/av1_inv_txfm2d.c
@@ -29,7 +29,6 @@
     case TXFM_TYPE_ADST8: return av1_iadst8_new;
     case TXFM_TYPE_ADST16: return av1_iadst16_new;
     case TXFM_TYPE_ADST32: return av1_iadst32_new;
-#if CONFIG_EXT_TX
     case TXFM_TYPE_IDENTITY4: return av1_iidentity4_c;
     case TXFM_TYPE_IDENTITY8: return av1_iidentity8_c;
     case TXFM_TYPE_IDENTITY16: return av1_iidentity16_c;
@@ -37,7 +36,6 @@
 #if CONFIG_TX64X64
     case TXFM_TYPE_IDENTITY64: return av1_iidentity64_c;
 #endif  // CONFIG_TX64X64
-#endif  // CONFIG_EXT_TX
     default: assert(0); return NULL;
   }
 }
@@ -57,7 +55,6 @@
     NULL
 #endif  // CONFIG_TX64X64
   },
-#if CONFIG_EXT_TX
   // FLIPADST
   { &inv_txfm_1d_col_cfg_adst_4, &inv_txfm_1d_col_cfg_adst_8,
     &inv_txfm_1d_col_cfg_adst_16, &inv_txfm_1d_col_cfg_adst_32,
@@ -72,7 +69,6 @@
     &inv_txfm_1d_cfg_identity_64
 #endif  // CONFIG_TX64X64
   },
-#endif  // CONFIG_EXT_TX
 };
 
 static const TXFM_1D_CFG *inv_txfm_row_cfg_ls[TX_TYPES_1D][TX_SIZES] = {
@@ -91,7 +87,6 @@
     NULL
 #endif  // CONFIG_TX64X64
   },
-#if CONFIG_EXT_TX
   // FLIPADST
   { &inv_txfm_1d_row_cfg_adst_4, &inv_txfm_1d_row_cfg_adst_8,
     &inv_txfm_1d_row_cfg_adst_16, &inv_txfm_1d_row_cfg_adst_32,
@@ -106,7 +101,6 @@
     &inv_txfm_1d_cfg_identity_64
 #endif  // CONFIG_TX64X64
   },
-#endif  // CONFIG_EXT_TX
 };
 
 TXFM_2D_FLIP_CFG av1_get_inv_txfm_cfg(TX_TYPE tx_type, TX_SIZE tx_size) {
diff --git a/av1/common/av1_rtcd_defs.pl b/av1/common/av1_rtcd_defs.pl
index f3f16a7..e34b405 100755
--- a/av1/common/av1_rtcd_defs.pl
+++ b/av1/common/av1_rtcd_defs.pl
@@ -125,17 +125,6 @@
 add_proto qw/void av1_iht32x32_1024_add/, "const tran_low_t *input, uint8_t *output, int pitch, const struct txfm_param *param";
 
 if (aom_config("CONFIG_HIGHBITDEPTH") ne "yes") {
-  if (aom_config("CONFIG_EXT_TX") ne "yes") {
-    if (aom_config("CONFIG_DAALA_TX4") ne "yes") {
-      specialize qw/av1_iht4x4_16_add msa/;
-    }
-    if (aom_config("CONFIG_DAALA_TX8") ne "yes") {
-      specialize qw/av1_iht8x8_64_add msa/;
-    }
-    if (aom_config("CONFIG_DAALA_TX16") ne "yes") {
-      specialize qw/av1_iht16x16_256_add msa/;
-    }
-  }
 }
 
 add_proto qw/void av1_iht32x32_1024_add/, "const tran_low_t *input, uint8_t *output, int pitch, const struct txfm_param *param";
@@ -364,19 +353,6 @@
 
   add_proto qw/void av1_fht32x8/, "const int16_t *input, tran_low_t *output, int stride, struct txfm_param *param";
 
-  if (aom_config("CONFIG_HIGHBITDEPTH") ne "yes") {
-    if (aom_config("CONFIG_EXT_TX") ne "yes") {
-      if (aom_config("CONFIG_DAALA_TX4") ne "yes") {
-        specialize qw/av1_fht4x4 msa/;
-      }
-      if (aom_config("CONFIG_DAALA_TX8") ne "yes") {
-        specialize qw/av1_fht8x8 msa/;
-      }
-      if (aom_config("CONFIG_DAALA_TX16") ne "yes") {
-        specialize qw/av1_fht16x16 msa/;
-      }
-    }
-  }
 
   add_proto qw/void av1_fwd_idtx/, "const int16_t *src_diff, tran_low_t *coeff, int stride, int bsx, int bsy, TX_TYPE tx_type";
 
diff --git a/av1/common/av1_txfm.h b/av1/common/av1_txfm.h
index 82c2181..84ff127 100644
--- a/av1/common/av1_txfm.h
+++ b/av1/common/av1_txfm.h
@@ -153,7 +153,6 @@
       cfg->ud_flip = 0;
       cfg->lr_flip = 0;
       break;
-#if CONFIG_EXT_TX
     case IDTX:
     case V_DCT:
     case H_DCT:
@@ -178,7 +177,6 @@
       cfg->ud_flip = 1;
       cfg->lr_flip = 1;
       break;
-#endif  // CONFIG_EXT_TX
     default:
       cfg->ud_flip = 0;
       cfg->lr_flip = 0;
@@ -218,7 +216,6 @@
     case ADST_DCT: return DCT_ADST;
     case DCT_ADST: return ADST_DCT;
     case ADST_ADST: return ADST_ADST;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT: return DCT_FLIPADST;
     case DCT_FLIPADST: return FLIPADST_DCT;
     case FLIPADST_FLIPADST: return FLIPADST_FLIPADST;
@@ -231,7 +228,6 @@
     case H_ADST: return V_ADST;
     case V_FLIPADST: return H_FLIPADST;
     case H_FLIPADST: return V_FLIPADST;
-#endif  // CONFIG_EXT_TX
 #if CONFIG_MRC_TX
     case MRC_DCT: return MRC_DCT;
 #endif  // CONFIG_MRC_TX
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 6818882..9860107 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -803,7 +803,6 @@
 #define SIGNAL_ANY_MRC_MASK (SIGNAL_MRC_MASK_INTRA || SIGNAL_MRC_MASK_INTER)
 #endif  // CONFIG_MRC_TX
 
-#if CONFIG_EXT_TX
 #define ALLOW_INTRA_EXT_TX 1
 
 // Number of transform types in each set type
@@ -1031,7 +1030,6 @@
   return is_rect_tx_allowed_bsize(mbmi->sb_type) &&
          !xd->lossless[mbmi->segment_id];
 }
-#endif  // CONFIG_EXT_TX
 
 #if CONFIG_RECT_TX_EXT
 static INLINE int is_quarter_tx_allowed_bsize(BLOCK_SIZE bsize) {
@@ -1156,12 +1154,11 @@
   const MB_MODE_INFO *const mbmi = &mi->mbmi;
   (void)blk_row;
   (void)blk_col;
-#if CONFIG_INTRABC && (!CONFIG_EXT_TX || CONFIG_TXK_SEL)
+#if CONFIG_INTRABC && (CONFIG_TXK_SEL)
   // TODO(aconverse@google.com): Handle INTRABC + EXT_TX + TXK_SEL
   if (is_intrabc_block(mbmi)) return DCT_DCT;
-#endif  // CONFIG_INTRABC && (!CONFIG_EXT_TX || CONFIG_TXK_SEL)
+#endif  // CONFIG_INTRABC && (CONFIG_TXK_SEL)
 
-#if CONFIG_EXT_TX
   const struct macroblockd_plane *const pd = &xd->plane[plane_type];
   const BLOCK_SIZE plane_bsize = get_plane_block_size(mbmi->sb_type, pd);
   // TODO(sarahparker) This assumes reduced_tx_set_used == 0. I will do a
@@ -1171,7 +1168,6 @@
       get_ext_tx_set_type(tx_size, plane_bsize, is_inter_block(mbmi), 0);
   if (is_inter_block(mbmi) && !av1_ext_tx_used[tx_set_type][mbmi->tx_type])
     return DCT_DCT;
-#endif  // CONFIG_EXT_TX
 
 #if CONFIG_TXK_SEL
   TX_TYPE tx_type;
@@ -1186,10 +1182,8 @@
       tx_type = intra_mode_to_tx_type_context[mbmi->uv_mode];
   }
   assert(tx_type >= DCT_DCT && tx_type < TX_TYPES);
-#if CONFIG_EXT_TX
   if (is_inter_block(mbmi) && !av1_ext_tx_used[tx_set_type][tx_type])
     return DCT_DCT;
-#endif  // CONFIG_EXT_TX
   return tx_type;
 #endif  // CONFIG_TXK_SEL
 
@@ -1198,7 +1192,6 @@
   return get_default_tx_type(plane_type, xd, block_raster_idx, tx_size);
 #endif  // FIXED_TX_TYPE
 
-#if CONFIG_EXT_TX
 #if CONFIG_MRC_TX
   if (mbmi->tx_type == MRC_DCT) {
     assert(((is_inter_block(mbmi) && USE_MRC_INTER) ||
@@ -1238,22 +1231,6 @@
       intra_mode_to_tx_type_context[get_uv_mode(mbmi->uv_mode)];
   if (!av1_ext_tx_used[tx_set_type][intra_type]) return DCT_DCT;
   return intra_type;
-#else  // CONFIG_EXT_TX
-  (void)block;
-#if CONFIG_MRC_TX
-  if (mbmi->tx_type == MRC_DCT) {
-    if (plane_type == PLANE_TYPE_Y && !xd->lossless[mbmi->segment_id]) {
-      assert(tx_size == TX_32X32);
-      return mbmi->tx_type;
-    }
-    return DCT_DCT;
-  }
-#endif  // CONFIG_MRC_TX
-  if (plane_type != PLANE_TYPE_Y || xd->lossless[mbmi->segment_id] ||
-      txsize_sqr_map[tx_size] >= TX_32X32)
-    return DCT_DCT;
-  return mbmi->tx_type;
-#endif  // CONFIG_EXT_TX
 }
 
 void av1_setup_block_planes(MACROBLOCKD *xd, int ss_x, int ss_y);
diff --git a/av1/common/common_data.h b/av1/common/common_data.h
index 64a8e64..54738f9 100644
--- a/av1/common/common_data.h
+++ b/av1/common/common_data.h
@@ -777,18 +777,14 @@
 
 static const TX_TYPE_1D vtx_tab[TX_TYPES] = {
   DCT_1D,      ADST_1D, DCT_1D,      ADST_1D,
-#if CONFIG_EXT_TX
   FLIPADST_1D, DCT_1D,  FLIPADST_1D, ADST_1D, FLIPADST_1D, IDTX_1D,
   DCT_1D,      IDTX_1D, ADST_1D,     IDTX_1D, FLIPADST_1D, IDTX_1D,
-#endif  // CONFIG_EXT_TX
 };
 
 static const TX_TYPE_1D htx_tab[TX_TYPES] = {
   DCT_1D,  DCT_1D,      ADST_1D,     ADST_1D,
-#if CONFIG_EXT_TX
   DCT_1D,  FLIPADST_1D, FLIPADST_1D, FLIPADST_1D, ADST_1D, IDTX_1D,
   IDTX_1D, DCT_1D,      IDTX_1D,     ADST_1D,     IDTX_1D, FLIPADST_1D,
-#endif  // CONFIG_EXT_TX
 };
 
 // Same as "max_txsize_lookup[bsize] - TX_8X8", except for rectangular
diff --git a/av1/common/entropy.h b/av1/common/entropy.h
index 1b12895..a4bd09e 100644
--- a/av1/common/entropy.h
+++ b/av1/common/entropy.h
@@ -72,7 +72,6 @@
 
 #define USE_CAUSAL_BASE_CTX 0
 
-#if CONFIG_EXT_TX
 #define SIG_COEF_CONTEXTS_2D 26
 #define SIG_COEF_CONTEXTS_1D 16
 #if USE_CAUSAL_BASE_CTX
@@ -81,10 +80,6 @@
 #define SIG_COEF_CONTEXTS \
   (SIG_COEF_CONTEXTS_2D + SIG_COEF_CONTEXTS_1D + SIG_COEF_CONTEXTS_1D)
 #endif  // USE_CAUSAL_BASE_CTX
-#else   // CONFIG_EXT_TX
-#define SIG_COEF_CONTEXTS_2D 16
-#define SIG_COEF_CONTEXTS 16
-#endif  // CONFIG_EXT_TX
 
 #if USE_CAUSAL_BASE_CTX
 #define COEFF_BASE_CONTEXTS (SIG_COEF_CONTEXTS)
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index 3fa063e..ced99ae 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -2662,7 +2662,6 @@
     };
 #endif
 
-#if CONFIG_EXT_TX
 static const aom_cdf_prob default_intra_ext_tx_cdf
     [EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES][CDF_SIZE(TX_TYPES)] = {
       {
@@ -3112,85 +3111,6 @@
         { AOM_ICDF(19072), AOM_ICDF(26776), AOM_ICDF(32768), 0 } },
 #endif  // CONFIG_MRC_TX
     };
-#else
-#if CONFIG_MRC_TX
-static const aom_cdf_prob
-    default_intra_ext_tx_cdf[EXT_TX_SIZES][TX_TYPES][CDF_SIZE(TX_TYPES)] = {
-      { { AOM_ICDF(30720), AOM_ICDF(31104), AOM_ICDF(31400), AOM_ICDF(32084),
-          AOM_ICDF(32768), 0 },
-        { AOM_ICDF(512), AOM_ICDF(582), AOM_ICDF(638), AOM_ICDF(31764),
-          AOM_ICDF(32768), 0 },
-        { AOM_ICDF(512), AOM_ICDF(582), AOM_ICDF(638), AOM_ICDF(1642),
-          AOM_ICDF(32768), 0 },
-        { AOM_ICDF(512), AOM_ICDF(582), AOM_ICDF(638), AOM_ICDF(1642),
-          AOM_ICDF(32768), 0 },
-        { AOM_ICDF(512), AOM_ICDF(1280), AOM_ICDF(31760), AOM_ICDF(32264),
-          AOM_ICDF(32768), 0 } },
-
-      { { AOM_ICDF(31232), AOM_ICDF(31488), AOM_ICDF(31742), AOM_ICDF(32255),
-          AOM_ICDF(32768), 0 },
-        { AOM_ICDF(1024), AOM_ICDF(1152), AOM_ICDF(1272), AOM_ICDF(31784),
-          AOM_ICDF(32768), 0 },
-        { AOM_ICDF(1024), AOM_ICDF(1152), AOM_ICDF(1272), AOM_ICDF(2256),
-          AOM_ICDF(32768), 0 },
-        { AOM_ICDF(1024), AOM_ICDF(1052), AOM_ICDF(1272), AOM_ICDF(2256),
-          AOM_ICDF(32768), 0 },
-        { AOM_ICDF(1024), AOM_ICDF(1792), AOM_ICDF(31776), AOM_ICDF(32272),
-          AOM_ICDF(32768), 0 } },
-
-      { { AOM_ICDF(31744), AOM_ICDF(31940), AOM_ICDF(32084), AOM_ICDF(32426),
-          AOM_ICDF(32768), 0 },
-        { AOM_ICDF(2048), AOM_ICDF(2176), AOM_ICDF(2528), AOM_ICDF(31823),
-          AOM_ICDF(32768), 0 },
-        { AOM_ICDF(2048), AOM_ICDF(2176), AOM_ICDF(2528), AOM_ICDF(3473),
-          AOM_ICDF(32768), 0 },
-        { AOM_ICDF(2048), AOM_ICDF(2176), AOM_ICDF(2528), AOM_ICDF(3473),
-          AOM_ICDF(32768), 0 },
-        { AOM_ICDF(2048), AOM_ICDF(28160), AOM_ICDF(31808), AOM_ICDF(32288),
-          AOM_ICDF(32768), 0 } },
-    };
-
-static const aom_cdf_prob
-    default_inter_ext_tx_cdf[EXT_TX_SIZES][CDF_SIZE(TX_TYPES)] = {
-      { AOM_ICDF(20480), AOM_ICDF(23040), AOM_ICDF(24560), AOM_ICDF(28664),
-        AOM_ICDF(32768), 0 },
-      { AOM_ICDF(22528), AOM_ICDF(24320), AOM_ICDF(25928), AOM_ICDF(29348),
-        AOM_ICDF(32768), 0 },
-      { AOM_ICDF(24576), AOM_ICDF(25600), AOM_ICDF(27296), AOM_ICDF(30032),
-        AOM_ICDF(32768), 0 },
-    };
-#else   // CONFIG_MRC_TX
-static const aom_cdf_prob
-    default_intra_ext_tx_cdf[EXT_TX_SIZES][TX_TYPES][CDF_SIZE(TX_TYPES)] = {
-      { { AOM_ICDF(30720), AOM_ICDF(31400), AOM_ICDF(32084), AOM_ICDF(32768),
-          0 },
-        { AOM_ICDF(512), AOM_ICDF(638), AOM_ICDF(31764), AOM_ICDF(32768), 0 },
-        { AOM_ICDF(512), AOM_ICDF(638), AOM_ICDF(1642), AOM_ICDF(32768), 0 },
-        { AOM_ICDF(512), AOM_ICDF(31760), AOM_ICDF(32264), AOM_ICDF(32768),
-          0 } },
-
-      { { AOM_ICDF(31232), AOM_ICDF(31742), AOM_ICDF(32255), AOM_ICDF(32768),
-          0 },
-        { AOM_ICDF(1024), AOM_ICDF(1272), AOM_ICDF(31784), AOM_ICDF(32768), 0 },
-        { AOM_ICDF(1024), AOM_ICDF(1272), AOM_ICDF(2256), AOM_ICDF(32768), 0 },
-        { AOM_ICDF(1024), AOM_ICDF(31776), AOM_ICDF(32272), AOM_ICDF(32768),
-          0 } },
-      { { AOM_ICDF(31744), AOM_ICDF(32084), AOM_ICDF(32426), AOM_ICDF(32768),
-          0 },
-        { AOM_ICDF(2048), AOM_ICDF(2528), AOM_ICDF(31823), AOM_ICDF(32768), 0 },
-        { AOM_ICDF(2048), AOM_ICDF(2528), AOM_ICDF(3473), AOM_ICDF(32768), 0 },
-        { AOM_ICDF(2048), AOM_ICDF(31808), AOM_ICDF(32288), AOM_ICDF(32768),
-          0 } },
-    };
-
-static const aom_cdf_prob
-    default_inter_ext_tx_cdf[EXT_TX_SIZES][CDF_SIZE(TX_TYPES)] = {
-      { AOM_ICDF(20480), AOM_ICDF(24560), AOM_ICDF(28664), AOM_ICDF(32768), 0 },
-      { AOM_ICDF(22528), AOM_ICDF(25928), AOM_ICDF(29348), AOM_ICDF(32768), 0 },
-      { AOM_ICDF(24576), AOM_ICDF(27296), AOM_ICDF(30032), AOM_ICDF(32768), 0 },
-    };
-#endif  // CONFIG_MRC_TX
-#endif  // !CONFIG_EXT_TX
 
 #if CONFIG_CFL
 static const aom_cdf_prob default_cfl_sign_cdf[CDF_SIZE(CFL_JOINT_SIGNS)] = {
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index 9d5c068..f24e787 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -351,15 +351,10 @@
 #endif  // CONFIG_LOOPFILTER_LEVEL
   aom_cdf_prob delta_lf_cdf[CDF_SIZE(DELTA_LF_PROBS + 1)];
 #endif
-#if CONFIG_EXT_TX
   aom_cdf_prob intra_ext_tx_cdf[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES]
                                [CDF_SIZE(TX_TYPES)];
   aom_cdf_prob inter_ext_tx_cdf[EXT_TX_SETS_INTER][EXT_TX_SIZES]
                                [CDF_SIZE(TX_TYPES)];
-#else
-  aom_cdf_prob intra_ext_tx_cdf[EXT_TX_SIZES][TX_TYPES][CDF_SIZE(TX_TYPES)];
-  aom_cdf_prob inter_ext_tx_cdf[EXT_TX_SIZES][CDF_SIZE(TX_TYPES)];
-#endif  // CONFIG_EXT_TX
 #if CONFIG_LGT_FROM_PRED
   aom_prob intra_lgt_prob[LGT_SIZES][INTRA_MODES];
   aom_prob inter_lgt_prob[LGT_SIZES];
@@ -500,18 +495,11 @@
 #endif  // CONFIG_LOOPFILTER_LEVEL
   unsigned int delta_lf[DELTA_LF_PROBS][2];
 #endif
-#if CONFIG_EXT_TX
   unsigned int tx_size_implied[TX_SIZES][TX_SIZES];
-#endif  // CONFIG_EXT_TX
 #if CONFIG_ENTROPY_STATS
-#if CONFIG_EXT_TX
   unsigned int inter_ext_tx[EXT_TX_SETS_INTER][EXT_TX_SIZES][TX_TYPES];
   unsigned int intra_ext_tx[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES]
                            [TX_TYPES];
-#else
-  unsigned int intra_ext_tx[EXT_TX_SIZES][TX_TYPES][TX_TYPES];
-  unsigned int inter_ext_tx[EXT_TX_SIZES][TX_TYPES];
-#endif  // CONFIG_EXT_TX
 #endif  // CONFIG_ENTROPY_STATS
   struct seg_counts seg;
 #if CONFIG_FILTER_INTRA
@@ -539,7 +527,6 @@
 extern const aom_prob
     av1_default_palette_uv_mode_prob[PALETTE_UV_MODE_CONTEXTS];
 
-#if CONFIG_EXT_TX
 static const int av1_ext_tx_ind[EXT_TX_SET_TYPES][TX_TYPES] = {
   {
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -597,23 +584,6 @@
       9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 4, 5, 3, 6, 7, 8,
   },
 };
-#else
-#if CONFIG_MRC_TX
-static const int av1_ext_tx_ind[TX_TYPES] = {
-  0, 3, 4, 2, 1,
-};
-static const int av1_ext_tx_inv[TX_TYPES] = {
-  0, 4, 3, 1, 2,
-};
-#else
-static const int av1_ext_tx_ind[TX_TYPES] = {
-  0, 2, 3, 1,
-};
-static const int av1_ext_tx_inv[TX_TYPES] = {
-  0, 3, 1, 2,
-};
-#endif  // CONFIG_MRC_TX
-#endif  // CONFIG_EXT_TX
 
 extern const aom_tree_index
     av1_interintra_mode_tree[TREE_SIZE(INTERINTRA_MODES)];
@@ -631,12 +601,8 @@
 #endif
 extern const aom_tree_index
     av1_palette_color_index_tree[PALETTE_SIZES][TREE_SIZE(PALETTE_COLORS)];
-#if CONFIG_EXT_TX
 extern const aom_tree_index av1_ext_tx_tree[EXT_TX_SET_TYPES]
                                            [TREE_SIZE(TX_TYPES)];
-#else
-extern const aom_tree_index av1_ext_tx_tree[TREE_SIZE(TX_TYPES)];
-#endif  // CONFIG_EXT_TX
 extern const aom_tree_index av1_motion_mode_tree[TREE_SIZE(MOTION_MODES)];
 #if CONFIG_NCOBMC_ADAPT_WEIGHT
 extern const aom_tree_index av1_ncobmc_mode_tree[TREE_SIZE(MAX_NCOBMC_MODES)];
diff --git a/av1/common/enums.h b/av1/common/enums.h
index 0fbd4e4..468f786 100644
--- a/av1/common/enums.h
+++ b/av1/common/enums.h
@@ -309,7 +309,6 @@
   ADST_DCT,   // ADST in vertical, DCT in horizontal
   DCT_ADST,   // DCT  in vertical, ADST in horizontal
   ADST_ADST,  // ADST in both directions
-#if CONFIG_EXT_TX
   FLIPADST_DCT,
   DCT_FLIPADST,
   FLIPADST_FLIPADST,
@@ -322,7 +321,6 @@
   H_ADST,
   V_FLIPADST,
   H_FLIPADST,
-#endif  // CONFIG_EXT_TX
 #if CONFIG_MRC_TX
   MRC_DCT,  // DCT in both directions with mrc based bitmask
 #endif      // CONFIG_MRC_TX
@@ -343,7 +341,6 @@
 } DUAL_FILTER_TYPE;
 #endif
 
-#if CONFIG_EXT_TX
 typedef enum ATTRIBUTE_PACKED {
   // DCT only
   EXT_TX_SET_DCTONLY,
@@ -367,9 +364,6 @@
 } TxSetType;
 
 #define IS_2D_TRANSFORM(tx_type) (tx_type < IDTX)
-#else
-#define IS_2D_TRANSFORM(tx_type) 1
-#endif
 
 typedef enum ATTRIBUTE_PACKED {
   TILE_LEFT_BOUNDARY = 1,
@@ -382,7 +376,6 @@
   FRAME_BOTTOM_BOUNDARY = 128,
 } BOUNDARY_TYPE;
 
-#if CONFIG_EXT_TX
 #define EXT_TX_SIZES 4  // number of sizes that use extended transforms
 #if CONFIG_MRC_TX
 #define EXT_TX_SETS_INTER 5  // Sets of transform selections for INTER
@@ -391,9 +384,6 @@
 #define EXT_TX_SETS_INTER 4  // Sets of transform selections for INTER
 #define EXT_TX_SETS_INTRA 3  // Sets of transform selections for INTRA
 #endif                       // CONFIG_MRC_TX
-#else
-#define EXT_TX_SIZES 3  // number of sizes that use extended transforms
-#endif                  // CONFIG_EXT_TX
 
 typedef enum ATTRIBUTE_PACKED {
   AOM_LAST_FLAG = 1 << 0,
diff --git a/av1/common/idct.c b/av1/common/idct.c
index de6e05b..38cdd22 100644
--- a/av1/common/idct.c
+++ b/av1/common/idct.c
@@ -32,7 +32,6 @@
 // NOTE: The implementation of all inverses need to be aware of the fact
 // that input and output could be the same buffer.
 
-#if CONFIG_EXT_TX
 static void iidtx4_c(const tran_low_t *input, tran_low_t *output) {
   int i;
   for (i = 0; i < 4; ++i) {
@@ -69,7 +68,6 @@
   }
 }
 #endif  // CONFIG_TX64X64
-#endif  // CONFIG_EXT_TX
 
 // For use in lieu of ADST
 static void ihalfright32_c(const tran_low_t *input, tran_low_t *output) {
@@ -120,7 +118,6 @@
 #endif  // CONFIG_TX64X64
 
 // Inverse identity transform and add.
-#if CONFIG_EXT_TX
 static void inv_idtx_add_c(const tran_low_t *input, uint8_t *dest, int stride,
                            int bsx, int bsy, TX_TYPE tx_type) {
   int r, c;
@@ -135,7 +132,6 @@
     }
   }
 }
-#endif  // CONFIG_EXT_TX
 
 #define FLIPUD_PTR(dest, stride, size)       \
   do {                                       \
@@ -143,7 +139,6 @@
     (stride) = -(stride);                    \
   } while (0)
 
-#if CONFIG_EXT_TX
 static void maybe_flip_strides(uint8_t **dst, int *dstride, tran_low_t **src,
                                int *sstride, TX_TYPE tx_type, int sizey,
                                int sizex) {
@@ -181,10 +176,9 @@
     default: assert(0); break;
   }
 }
-#endif  // CONFIG_EXT_TX
 
 #if CONFIG_HIGHBITDEPTH
-#if CONFIG_EXT_TX && CONFIG_TX64X64
+#if CONFIG_TX64X64
 static void highbd_inv_idtx_add_c(const tran_low_t *input, uint8_t *dest8,
                                   int stride, int bsx, int bsy, TX_TYPE tx_type,
                                   int bd) {
@@ -202,7 +196,7 @@
     }
   }
 }
-#endif  // CONFIG_EXT_TX && CONFIG_TX64X64
+#endif  // CONFIG_TX64X64
 #endif  // CONFIG_HIGHBITDEPTH
 
 #if CONFIG_LGT || CONFIG_LGT_FROM_PRED
@@ -256,9 +250,7 @@
 // apply. Otherwise they return 0
 int get_lgt4(const TxfmParam *txfm_param, int is_col,
              const tran_high_t **lgtmtx) {
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
-#endif  // CONFIG_EXT_TX
   if (is_col && (vtx_tab[txfm_param->tx_type] == ADST_1D ||
                  vtx_tab[txfm_param->tx_type] == FLIPADST_1D)) {
     lgtmtx[0] = txfm_param->is_inter ? &lgt4_170[0][0] : &lgt4_140[0][0];
@@ -274,9 +266,7 @@
 
 int get_lgt8(const TxfmParam *txfm_param, int is_col,
              const tran_high_t **lgtmtx) {
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
-#endif  // CONFIG_EXT_TX
   if (is_col && (vtx_tab[txfm_param->tx_type] == ADST_1D ||
                  vtx_tab[txfm_param->tx_type] == FLIPADST_1D)) {
     lgtmtx[0] = txfm_param->is_inter ? &lgt8_170[0][0] : &lgt8_150[0][0];
@@ -394,9 +384,7 @@
 
 void get_lgt4_from_pred(const TxfmParam *txfm_param, int is_col,
                         const tran_high_t **lgtmtx, int ntx) {
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
-#endif  // CONFIG_EXT_TX
   PREDICTION_MODE mode = txfm_param->mode;
   int stride = txfm_param->stride;
   uint8_t *dst = txfm_param->dst;
@@ -478,9 +466,7 @@
 
 void get_lgt8_from_pred(const TxfmParam *txfm_param, int is_col,
                         const tran_high_t **lgtmtx, int ntx) {
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
-#endif  // CONFIG_EXT_TX
   PREDICTION_MODE mode = txfm_param->mode;
   int stride = txfm_param->stride;
   uint8_t *dst = txfm_param->dst;
@@ -550,9 +536,7 @@
 // will just call DCT or ADST
 void get_lgt16up_from_pred(const TxfmParam *txfm_param, int is_col,
                            const tran_high_t **lgtmtx, int ntx) {
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
-#endif  // CONFIG_EXT_TX
   int tx_length = is_col ? tx_size_high[txfm_param->tx_size]
                          : tx_size_wide[txfm_param->tx_size];
   assert(tx_length == 16 || tx_length == 32);
@@ -739,7 +723,6 @@
     { daala_idst4, daala_idct4 },  // ADST_DCT = 1
     { daala_idct4, daala_idst4 },  // DCT_ADST = 2
     { daala_idst4, daala_idst4 },  // ADST_ADST = 3
-#if CONFIG_EXT_TX
     { daala_idst4, daala_idct4 },  // FLIPADST_DCT
     { daala_idct4, daala_idst4 },  // DCT_FLIPADST
     { daala_idst4, daala_idst4 },  // FLIPADST_FLIPADST
@@ -752,13 +735,11 @@
     { daala_idtx4, daala_idst4 },  // H_ADST
     { daala_idst4, daala_idtx4 },  // V_FLIPADST
     { daala_idtx4, daala_idst4 },  // H_FLIPADST
-#endif
 #else
     { aom_idct4_c, aom_idct4_c },    // DCT_DCT  = 0
     { aom_iadst4_c, aom_idct4_c },   // ADST_DCT = 1
     { aom_idct4_c, aom_iadst4_c },   // DCT_ADST = 2
     { aom_iadst4_c, aom_iadst4_c },  // ADST_ADST = 3
-#if CONFIG_EXT_TX
     { aom_iadst4_c, aom_idct4_c },   // FLIPADST_DCT
     { aom_idct4_c, aom_iadst4_c },   // DCT_FLIPADST
     { aom_iadst4_c, aom_iadst4_c },  // FLIPADST_FLIPADST
@@ -772,7 +753,6 @@
     { aom_iadst4_c, iidtx4_c },      // V_FLIPADST
     { iidtx4_c, aom_iadst4_c },      // H_FLIPADST
 #endif
-#endif
   };
 
   int i, j;
@@ -826,9 +806,7 @@
       IHT_4[tx_type].cols(tmp[i], out[i]);
   }
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, 4, 4);
-#endif
 
   // Sum with the destination
   for (i = 0; i < 4; ++i) {
@@ -859,7 +837,6 @@
     { daala_idst8, daala_idct4 },  // ADST_DCT = 1
     { daala_idct8, daala_idst4 },  // DCT_ADST = 2
     { daala_idst8, daala_idst4 },  // ADST_ADST = 3
-#if CONFIG_EXT_TX
     { daala_idst8, daala_idct4 },  // FLIPADST_DCT
     { daala_idct8, daala_idst4 },  // DCT_FLIPADST
     { daala_idst8, daala_idst4 },  // FLIPADST_FLIPADST
@@ -872,13 +849,11 @@
     { daala_idtx8, daala_idst4 },  // H_ADST
     { daala_idst8, daala_idtx4 },  // V_FLIPADST
     { daala_idtx8, daala_idst4 },  // H_FLIPADST
-#endif
 #else
     { aom_idct8_c, aom_idct4_c },    // DCT_DCT
     { aom_iadst8_c, aom_idct4_c },   // ADST_DCT
     { aom_idct8_c, aom_iadst4_c },   // DCT_ADST
     { aom_iadst8_c, aom_iadst4_c },  // ADST_ADST
-#if CONFIG_EXT_TX
     { aom_iadst8_c, aom_idct4_c },   // FLIPADST_DCT
     { aom_idct8_c, aom_iadst4_c },   // DCT_FLIPADST
     { aom_iadst8_c, aom_iadst4_c },  // FLIPADST_FLIPADST
@@ -892,7 +867,6 @@
     { aom_iadst8_c, iidtx4_c },      // V_FLIPADST
     { iidtx8_c, aom_iadst4_c },      // H_FLIPADST
 #endif
-#endif
   };
 
   const int n = 4;
@@ -962,9 +936,7 @@
       IHT_4x8[tx_type].cols(tmp[i], out[i]);
   }
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n2, n);
-#endif
 
   // Sum with the destination
   for (i = 0; i < n2; ++i) {
@@ -1003,7 +975,6 @@
     { daala_idst4, daala_idct8 },  // ADST_DCT = 1
     { daala_idct4, daala_idst8 },  // DCT_ADST = 2
     { daala_idst4, daala_idst8 },  // ADST_ADST = 3
-#if CONFIG_EXT_TX
     { daala_idst4, daala_idct8 },  // FLIPADST_DCT
     { daala_idct4, daala_idst8 },  // DCT_FLIPADST
     { daala_idst4, daala_idst8 },  // FLIPADST_FLIPADST
@@ -1016,13 +987,11 @@
     { daala_idtx4, daala_idst8 },  // H_ADST
     { daala_idst4, daala_idtx8 },  // V_FLIPADST
     { daala_idtx4, daala_idst8 },  // H_FLIPADST
-#endif
 #else
     { aom_idct4_c, aom_idct8_c },    // DCT_DCT
     { aom_iadst4_c, aom_idct8_c },   // ADST_DCT
     { aom_idct4_c, aom_iadst8_c },   // DCT_ADST
     { aom_iadst4_c, aom_iadst8_c },  // ADST_ADST
-#if CONFIG_EXT_TX
     { aom_iadst4_c, aom_idct8_c },   // FLIPADST_DCT
     { aom_idct4_c, aom_iadst8_c },   // DCT_FLIPADST
     { aom_iadst4_c, aom_iadst8_c },  // FLIPADST_FLIPADST
@@ -1036,7 +1005,6 @@
     { aom_iadst4_c, iidtx8_c },      // V_FLIPADST
     { iidtx4_c, aom_iadst8_c },      // H_FLIPADST
 #endif
-#endif
   };
 
   const int n = 4;
@@ -1107,9 +1075,7 @@
       IHT_8x4[tx_type].cols(tmp[i], out[i]);
   }
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n, n2);
-#endif
 
   // Sum with the destination
   for (i = 0; i < n; ++i) {
@@ -1147,7 +1113,6 @@
     { aom_iadst16_c, aom_idct4_c },   // ADST_DCT
     { aom_idct16_c, aom_iadst4_c },   // DCT_ADST
     { aom_iadst16_c, aom_iadst4_c },  // ADST_ADST
-#if CONFIG_EXT_TX
     { aom_iadst16_c, aom_idct4_c },   // FLIPADST_DCT
     { aom_idct16_c, aom_iadst4_c },   // DCT_FLIPADST
     { aom_iadst16_c, aom_iadst4_c },  // FLIPADST_FLIPADST
@@ -1160,7 +1125,6 @@
     { iidtx16_c, aom_iadst4_c },      // H_ADST
     { aom_iadst16_c, iidtx4_c },      // V_FLIPADST
     { iidtx16_c, aom_iadst4_c },      // H_FLIPADST
-#endif
   };
 
   const int n = 4;
@@ -1192,9 +1156,7 @@
     IHT_4x16[tx_type].cols(tmp[i], out[i]);
   }
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n4, n);
-#endif
 
   // Sum with the destination
   for (i = 0; i < n4; ++i) {
@@ -1220,7 +1182,6 @@
     { aom_iadst4_c, aom_idct16_c },   // ADST_DCT
     { aom_idct4_c, aom_iadst16_c },   // DCT_ADST
     { aom_iadst4_c, aom_iadst16_c },  // ADST_ADST
-#if CONFIG_EXT_TX
     { aom_iadst4_c, aom_idct16_c },   // FLIPADST_DCT
     { aom_idct4_c, aom_iadst16_c },   // DCT_FLIPADST
     { aom_iadst4_c, aom_iadst16_c },  // FLIPADST_FLIPADST
@@ -1233,7 +1194,6 @@
     { iidtx4_c, aom_iadst16_c },      // H_ADST
     { aom_iadst4_c, iidtx16_c },      // V_FLIPADST
     { iidtx4_c, aom_iadst16_c },      // H_FLIPADST
-#endif
   };
 
   const int n = 4;
@@ -1266,9 +1226,7 @@
       IHT_16x4[tx_type].cols(tmp[i], out[i]);
   }
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n, n4);
-#endif
 
   // Sum with the destination
   for (i = 0; i < n; ++i) {
@@ -1295,7 +1253,6 @@
     { daala_idst16, daala_idct8 },  // ADST_DCT = 1
     { daala_idct16, daala_idst8 },  // DCT_ADST = 2
     { daala_idst16, daala_idst8 },  // ADST_ADST = 3
-#if CONFIG_EXT_TX
     { daala_idst16, daala_idct8 },  // FLIPADST_DCT
     { daala_idct16, daala_idst8 },  // DCT_FLIPADST
     { daala_idst16, daala_idst8 },  // FLIPADST_FLIPADST
@@ -1308,13 +1265,11 @@
     { daala_idtx16, daala_idst8 },  // H_ADST
     { daala_idst16, daala_idtx8 },  // V_FLIPADST
     { daala_idtx16, daala_idst8 },  // H_FLIPADST
-#endif
 #else
     { aom_idct16_c, aom_idct8_c },    // DCT_DCT
     { aom_iadst16_c, aom_idct8_c },   // ADST_DCT
     { aom_idct16_c, aom_iadst8_c },   // DCT_ADST
     { aom_iadst16_c, aom_iadst8_c },  // ADST_ADST
-#if CONFIG_EXT_TX
     { aom_iadst16_c, aom_idct8_c },   // FLIPADST_DCT
     { aom_idct16_c, aom_iadst8_c },   // DCT_FLIPADST
     { aom_iadst16_c, aom_iadst8_c },  // FLIPADST_FLIPADST
@@ -1328,7 +1283,6 @@
     { aom_iadst16_c, iidtx8_c },      // V_FLIPADST
     { iidtx16_c, aom_iadst8_c },      // H_FLIPADST
 #endif
-#endif
   };
 
   const int n = 8;
@@ -1397,9 +1351,7 @@
     IHT_8x16[tx_type].cols(tmp[i], out[i]);
   }
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n2, n);
-#endif
 
   // Sum with the destination
   for (i = 0; i < n2; ++i) {
@@ -1432,7 +1384,6 @@
     { daala_idst8, daala_idct16 },  // ADST_DCT = 1
     { daala_idct8, daala_idst16 },  // DCT_ADST = 2
     { daala_idst8, daala_idst16 },  // ADST_ADST = 3
-#if CONFIG_EXT_TX
     { daala_idst8, daala_idct16 },  // FLIPADST_DCT
     { daala_idct8, daala_idst16 },  // DCT_FLIPADST
     { daala_idst8, daala_idst16 },  // FLIPADST_FLIPADST
@@ -1445,13 +1396,11 @@
     { daala_idtx8, daala_idst16 },  // H_ADST
     { daala_idst8, daala_idtx16 },  // V_FLIPADST
     { daala_idtx8, daala_idst16 },  // H_FLIPADST
-#endif
 #else
     { aom_idct8_c, aom_idct16_c },    // DCT_DCT
     { aom_iadst8_c, aom_idct16_c },   // ADST_DCT
     { aom_idct8_c, aom_iadst16_c },   // DCT_ADST
     { aom_iadst8_c, aom_iadst16_c },  // ADST_ADST
-#if CONFIG_EXT_TX
     { aom_iadst8_c, aom_idct16_c },   // FLIPADST_DCT
     { aom_idct8_c, aom_iadst16_c },   // DCT_FLIPADST
     { aom_iadst8_c, aom_iadst16_c },  // FLIPADST_FLIPADST
@@ -1465,7 +1414,6 @@
     { aom_iadst8_c, iidtx16_c },      // V_FLIPADST
     { iidtx8_c, aom_iadst16_c },      // H_FLIPADST
 #endif
-#endif
   };
 
   const int n = 8;
@@ -1527,9 +1475,7 @@
       IHT_16x8[tx_type].cols(tmp[i], out[i]);
   }
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n, n2);
-#endif
 
   // Sum with the destination
   for (i = 0; i < n; ++i) {
@@ -1568,7 +1514,6 @@
     { ihalfright32_c, aom_idct8_c },   // ADST_DCT
     { aom_idct32_c, aom_iadst8_c },    // DCT_ADST
     { ihalfright32_c, aom_iadst8_c },  // ADST_ADST
-#if CONFIG_EXT_TX
     { ihalfright32_c, aom_idct8_c },   // FLIPADST_DCT
     { aom_idct32_c, aom_iadst8_c },    // DCT_FLIPADST
     { ihalfright32_c, aom_iadst8_c },  // FLIPADST_FLIPADST
@@ -1581,7 +1526,6 @@
     { iidtx32_c, aom_iadst8_c },       // H_ADST
     { ihalfright32_c, iidtx8_c },      // V_FLIPADST
     { iidtx32_c, aom_iadst8_c },       // H_FLIPADST
-#endif
   };
 
   const int n = 8;
@@ -1613,9 +1557,7 @@
     IHT_8x32[tx_type].cols(tmp[i], out[i]);
   }
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n4, n);
-#endif
 
   // Sum with the destination
   for (i = 0; i < n4; ++i) {
@@ -1641,7 +1583,6 @@
     { aom_iadst8_c, aom_idct32_c },    // ADST_DCT
     { aom_idct8_c, ihalfright32_c },   // DCT_ADST
     { aom_iadst8_c, ihalfright32_c },  // ADST_ADST
-#if CONFIG_EXT_TX
     { aom_iadst8_c, aom_idct32_c },    // FLIPADST_DCT
     { aom_idct8_c, ihalfright32_c },   // DCT_FLIPADST
     { aom_iadst8_c, ihalfright32_c },  // FLIPADST_FLIPADST
@@ -1654,7 +1595,6 @@
     { iidtx8_c, ihalfright32_c },      // H_ADST
     { aom_iadst8_c, iidtx32_c },       // V_FLIPADST
     { iidtx8_c, ihalfright32_c },      // H_FLIPADST
-#endif
   };
 
   const int n = 8;
@@ -1687,9 +1627,7 @@
       IHT_32x8[tx_type].cols(tmp[i], out[i]);
   }
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n, n4);
-#endif
 
   // Sum with the destination
   for (i = 0; i < n; ++i) {
@@ -1716,7 +1654,6 @@
     { daala_idst32, daala_idct16 },  // ADST_DCT = 1
     { daala_idct32, daala_idst16 },  // DCT_ADST = 2
     { daala_idst32, daala_idst16 },  // ADST_ADST = 3
-#if CONFIG_EXT_TX
     { daala_idst32, daala_idct16 },  // FLIPADST_DCT
     { daala_idct32, daala_idst16 },  // DCT_FLIPADST
     { daala_idst32, daala_idst16 },  // FLIPADST_FLIPADST
@@ -1729,13 +1666,11 @@
     { daala_idtx32, daala_idst16 },  // H_ADST
     { daala_idst32, daala_idtx16 },  // V_FLIPADST
     { daala_idtx32, daala_idst16 },  // H_FLIPADST
-#endif
 #else
     { aom_idct32_c, aom_idct16_c },     // DCT_DCT
     { ihalfright32_c, aom_idct16_c },   // ADST_DCT
     { aom_idct32_c, aom_iadst16_c },    // DCT_ADST
     { ihalfright32_c, aom_iadst16_c },  // ADST_ADST
-#if CONFIG_EXT_TX
     { ihalfright32_c, aom_idct16_c },   // FLIPADST_DCT
     { aom_idct32_c, aom_iadst16_c },    // DCT_FLIPADST
     { ihalfright32_c, aom_iadst16_c },  // FLIPADST_FLIPADST
@@ -1749,7 +1684,6 @@
     { ihalfright32_c, iidtx16_c },      // V_FLIPADST
     { iidtx32_c, aom_iadst16_c },       // H_FLIPADST
 #endif
-#endif
   };
 
   const int n = 16;
@@ -1777,9 +1711,7 @@
   // inverse transform column vectors
   for (i = 0; i < n; ++i) IHT_16x32[tx_type].cols(tmp[i], out[i]);
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n2, n);
-#endif
 
   // Sum with the destination
   for (i = 0; i < n2; ++i) {
@@ -1810,7 +1742,6 @@
     { daala_idst16, daala_idct32 },  // ADST_DCT = 1
     { daala_idct16, daala_idst32 },  // DCT_ADST = 2
     { daala_idst16, daala_idst32 },  // ADST_ADST = 3
-#if CONFIG_EXT_TX
     { daala_idst16, daala_idct32 },  // FLIPADST_DCT
     { daala_idct16, daala_idst32 },  // DCT_FLIPADST
     { daala_idst16, daala_idst32 },  // FLIPADST_FLIPADST
@@ -1823,13 +1754,11 @@
     { daala_idtx16, daala_idst32 },  // H_ADST
     { daala_idst16, daala_idtx32 },  // V_FLIPADST
     { daala_idtx16, daala_idst32 },  // H_FLIPADST
-#endif
 #else
     { aom_idct16_c, aom_idct32_c },     // DCT_DCT
     { aom_iadst16_c, aom_idct32_c },    // ADST_DCT
     { aom_idct16_c, ihalfright32_c },   // DCT_ADST
     { aom_iadst16_c, ihalfright32_c },  // ADST_ADST
-#if CONFIG_EXT_TX
     { aom_iadst16_c, aom_idct32_c },    // FLIPADST_DCT
     { aom_idct16_c, ihalfright32_c },   // DCT_FLIPADST
     { aom_iadst16_c, ihalfright32_c },  // FLIPADST_FLIPADST
@@ -1843,7 +1772,6 @@
     { aom_iadst16_c, iidtx32_c },       // V_FLIPADST
     { iidtx16_c, ihalfright32_c },      // H_FLIPADST
 #endif
-#endif
   };
   const int n = 16;
   const int n2 = 32;
@@ -1871,9 +1799,7 @@
   // inverse transform column vectors
   for (i = 0; i < n2; ++i) IHT_32x16[tx_type].cols(tmp[i], out[i]);
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n, n2);
-#endif
 
   // Sum with the destination
   for (i = 0; i < n; ++i) {
@@ -1904,7 +1830,6 @@
     { daala_idst8, daala_idct8 },  // ADST_DCT = 1
     { daala_idct8, daala_idst8 },  // DCT_ADST = 2
     { daala_idst8, daala_idst8 },  // ADST_ADST = 3
-#if CONFIG_EXT_TX
     { daala_idst8, daala_idct8 },  // FLIPADST_DCT
     { daala_idct8, daala_idst8 },  // DCT_FLIPADST
     { daala_idst8, daala_idst8 },  // FLIPADST_FLIPADST
@@ -1917,13 +1842,11 @@
     { daala_idtx8, daala_idst8 },  // H_ADST
     { daala_idst8, daala_idtx8 },  // V_FLIPADST
     { daala_idtx8, daala_idst8 },  // H_FLIPADST
-#endif
 #else
     { aom_idct8_c, aom_idct8_c },    // DCT_DCT  = 0
     { aom_iadst8_c, aom_idct8_c },   // ADST_DCT = 1
     { aom_idct8_c, aom_iadst8_c },   // DCT_ADST = 2
     { aom_iadst8_c, aom_iadst8_c },  // ADST_ADST = 3
-#if CONFIG_EXT_TX
     { aom_iadst8_c, aom_idct8_c },   // FLIPADST_DCT
     { aom_idct8_c, aom_iadst8_c },   // DCT_FLIPADST
     { aom_iadst8_c, aom_iadst8_c },  // FLIPADST_FLIPADST
@@ -1937,7 +1860,6 @@
     { aom_iadst8_c, iidtx8_c },      // V_FLIPADST
     { iidtx8_c, aom_iadst8_c },      // H_FLIPADST
 #endif
-#endif
   };
 
   int i, j;
@@ -1987,9 +1909,7 @@
       IHT_8[tx_type].cols(tmp[i], out[i]);
   }
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, 8, 8);
-#endif
 
   // Sum with the destination
   for (i = 0; i < 8; ++i) {
@@ -2020,7 +1940,6 @@
     { daala_idst16, daala_idct16 },  // ADST_DCT = 1
     { daala_idct16, daala_idst16 },  // DCT_ADST = 2
     { daala_idst16, daala_idst16 },  // ADST_ADST = 3
-#if CONFIG_EXT_TX
     { daala_idst16, daala_idct16 },  // FLIPADST_DCT
     { daala_idct16, daala_idst16 },  // DCT_FLIPADST
     { daala_idst16, daala_idst16 },  // FLIPADST_FLIPADST
@@ -2033,13 +1952,11 @@
     { daala_idtx16, daala_idst16 },  // H_ADST
     { daala_idst16, daala_idtx16 },  // V_FLIPADST
     { daala_idtx16, daala_idst16 },  // H_FLIPADST
-#endif
 #else
     { aom_idct16_c, aom_idct16_c },    // DCT_DCT  = 0
     { aom_iadst16_c, aom_idct16_c },   // ADST_DCT = 1
     { aom_idct16_c, aom_iadst16_c },   // DCT_ADST = 2
     { aom_iadst16_c, aom_iadst16_c },  // ADST_ADST = 3
-#if CONFIG_EXT_TX
     { aom_iadst16_c, aom_idct16_c },   // FLIPADST_DCT
     { aom_idct16_c, aom_iadst16_c },   // DCT_FLIPADST
     { aom_iadst16_c, aom_iadst16_c },  // FLIPADST_FLIPADST
@@ -2053,7 +1970,6 @@
     { aom_iadst16_c, iidtx16_c },      // V_FLIPADST
     { iidtx16_c, aom_iadst16_c },      // H_FLIPADST
 #endif
-#endif
   };
 
   int i, j;
@@ -2084,9 +2000,7 @@
   // inverse transform column vectors
   for (i = 0; i < 16; ++i) IHT_16[tx_type].cols(tmp[i], out[i]);
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, 16, 16);
-#endif
 
   // Sum with the destination
   for (i = 0; i < 16; ++i) {
@@ -2102,7 +2016,6 @@
   }
 }
 
-#if CONFIG_EXT_TX || CONFIG_DAALA_TX32
 void av1_iht32x32_1024_add_c(const tran_low_t *input, uint8_t *dest, int stride,
                              const TxfmParam *txfm_param) {
   const TX_TYPE tx_type = txfm_param->tx_type;
@@ -2112,7 +2025,6 @@
   static const transform_2d IHT_32[] = {
 #if CONFIG_DAALA_TX32
     { daala_idct32, daala_idct32 },  // DCT_DCT
-#if CONFIG_EXT_TX
     { daala_idst32, daala_idct32 },  // ADST_DCT
     { daala_idct32, daala_idst32 },  // DCT_ADST
     { daala_idst32, daala_idst32 },  // ADST_ADST
@@ -2128,10 +2040,8 @@
     { daala_idtx32, daala_idst32 },  // H_ADST
     { daala_idst32, daala_idtx32 },  // V_FLIPADST
     { daala_idtx32, daala_idst32 },  // H_FLIPADST
-#endif
 #else
     { aom_idct32_c, aom_idct32_c },      // DCT_DCT
-#if CONFIG_EXT_TX
     { ihalfright32_c, aom_idct32_c },    // ADST_DCT
     { aom_idct32_c, ihalfright32_c },    // DCT_ADST
     { ihalfright32_c, ihalfright32_c },  // ADST_ADST
@@ -2148,7 +2058,6 @@
     { ihalfright32_c, iidtx32_c },       // V_FLIPADST
     { iidtx32_c, ihalfright32_c },       // H_FLIPADST
 #endif
-#endif
   };
 
   int i, j;
@@ -2198,7 +2107,6 @@
     }
   }
 }
-#endif  // CONFIG_EXT_TX || CONFIG_DAALA_TX32
 
 #if CONFIG_TX64X64
 void av1_iht64x64_4096_add_c(const tran_low_t *input, uint8_t *dest, int stride,
@@ -2216,7 +2124,6 @@
     { daala_idst64, daala_idct64 },  // ADST_DCT
     { daala_idct64, daala_idst64 },  // DCT_ADST
     { daala_idst64, daala_idst64 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { daala_idst64, daala_idct64 },  // FLIPADST_DCT
     { daala_idct64, daala_idst64 },  // DCT_FLIPADST
     { daala_idst64, daala_idst64 },  // FLIPADST_FLIPADST
@@ -2229,13 +2136,11 @@
     { daala_idtx64, daala_idst64 },  // H_ADST
     { daala_idst64, daala_idtx64 },  // V_FLIPADST
     { daala_idtx64, daala_idst64 },  // H_FLIPADST
-#endif
 #else
     { idct64_col_c, idct64_row_c },      // DCT_DCT
     { ihalfright64_c, idct64_row_c },    // ADST_DCT
     { idct64_col_c, ihalfright64_c },    // DCT_ADST
     { ihalfright64_c, ihalfright64_c },  // ADST_ADST
-#if CONFIG_EXT_TX
     { ihalfright64_c, idct64_row_c },    // FLIPADST_DCT
     { idct64_col_c, ihalfright64_c },    // DCT_FLIPADST
     { ihalfright64_c, ihalfright64_c },  // FLIPADST_FLIPADST
@@ -2249,7 +2154,6 @@
     { ihalfright64_c, iidtx64_c },       // V_FLIPADST
     { iidtx64_c, ihalfright64_c },       // H_FLIPADST
 #endif
-#endif
   };
 
   int i, j;
@@ -2282,9 +2186,7 @@
   // inverse transform column vectors
   for (i = 0; i < 64; ++i) IHT_64[tx_type].cols(tmp[i], out[i]);
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, 64, 64);
-#endif  // CONFIG_EXT_TX
 
   // Sum with the destination
   for (i = 0; i < 64; ++i) {
@@ -2314,7 +2216,6 @@
     { ihalfright32_c, idct64_row_c },    // ADST_DCT
     { aom_idct32_c, ihalfright64_c },    // DCT_ADST
     { ihalfright32_c, ihalfright64_c },  // ADST_ADST
-#if CONFIG_EXT_TX
     { ihalfright32_c, idct64_row_c },    // FLIPADST_DCT
     { aom_idct32_c, ihalfright64_c },    // DCT_FLIPADST
     { ihalfright32_c, ihalfright64_c },  // FLIPADST_FLIPADST
@@ -2327,7 +2228,6 @@
     { iidtx32_c, ihalfright64_c },       // H_ADST
     { ihalfright32_c, iidtx64_c },       // V_FLIPADST
     { iidtx32_c, ihalfright64_c },       // H_FLIPADST
-#endif
   };
   const int n = 32;
   const int n2 = 64;
@@ -2348,9 +2248,7 @@
   // inverse transform column vectors
   for (i = 0; i < n2; ++i) IHT_64x32[tx_type].cols(tmp[i], out[i]);
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n, n2);
-#endif
 
   // Sum with the destination
   for (i = 0; i < n; ++i) {
@@ -2376,7 +2274,6 @@
     { ihalfright64_c, aom_idct32_c },    // ADST_DCT
     { idct64_col_c, ihalfright32_c },    // DCT_ADST
     { ihalfright64_c, ihalfright32_c },  // ADST_ADST
-#if CONFIG_EXT_TX
     { ihalfright64_c, aom_idct32_c },    // FLIPADST_DCT
     { idct64_col_c, ihalfright32_c },    // DCT_FLIPADST
     { ihalfright64_c, ihalfright32_c },  // FLIPADST_FLIPADST
@@ -2389,7 +2286,6 @@
     { iidtx64_c, ihalfright32_c },       // H_ADST
     { ihalfright64_c, iidtx32_c },       // V_FLIPADST
     { iidtx64_c, ihalfright32_c },       // H_FLIPADST
-#endif
   };
 
   const int n = 32;
@@ -2410,9 +2306,7 @@
   // inverse transform column vectors
   for (i = 0; i < n; ++i) IHT_32x64[tx_type].cols(tmp[i], out[i]);
 
-#if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n2, n);
-#endif
 
   // Sum with the destination
   for (i = 0; i < n2; ++i) {
@@ -2429,9 +2323,7 @@
 // idct
 void av1_idct4x4_add(const tran_low_t *input, uint8_t *dest, int stride,
                      const TxfmParam *txfm_param) {
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
-#endif  // CONFIG_EXT_TX
   const int eob = txfm_param->eob;
   if (eob > 1)
     av1_iht4x4_16_add(input, dest, stride, txfm_param);
@@ -2441,9 +2333,7 @@
 
 void av1_iwht4x4_add(const tran_low_t *input, uint8_t *dest, int stride,
                      const TxfmParam *txfm_param) {
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
-#endif  // CONFIG_EXT_TX
   const int eob = txfm_param->eob;
   if (eob > 1)
     aom_iwht4x4_16_add(input, dest, stride);
@@ -2603,7 +2493,6 @@
       av1_iht4x4_16_add(input, dest, stride, txfm_param);
       break;
 #endif
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
@@ -2626,7 +2515,6 @@
       av1_iht4x4_16_add_c(input, dest, stride, txfm_param);
       break;
     case IDTX: inv_idtx_add_c(input, dest, stride, 4, 4, tx_type); break;
-#endif  // CONFIG_EXT_TX
     default: assert(0); break;
   }
 }
@@ -2755,7 +2643,6 @@
       av1_iht8x8_64_add(input, dest, stride, txfm_param);
       break;
 #endif
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
@@ -2778,7 +2665,6 @@
       av1_iht8x8_64_add_c(input, dest, stride, txfm_param);
       break;
     case IDTX: inv_idtx_add_c(input, dest, stride, 8, 8, tx_type); break;
-#endif  // CONFIG_EXT_TX
     default: assert(0); break;
   }
 }
@@ -2801,7 +2687,6 @@
       av1_iht16x16_256_add(input, dest, stride, txfm_param);
 #endif  // CONFIG_DAALA_TX16
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
@@ -2820,7 +2705,6 @@
 #endif  // CONFIG_DAALA_TX16
       break;
     case IDTX: inv_idtx_add_c(input, dest, stride, 16, 16, tx_type); break;
-#endif  // CONFIG_EXT_TX
 #if CONFIG_MRC_TX
     case MRC_DCT: assert(0 && "Invalid tx type for tx size");
 #endif  // CONFIG_MRC_TX
@@ -2839,7 +2723,6 @@
       av1_iht32x32_1024_add_c(input, dest, stride, txfm_param);
       break;
 #endif
-#if CONFIG_EXT_TX
     case ADST_DCT:
     case DCT_ADST:
     case ADST_ADST:
@@ -2857,7 +2740,6 @@
       av1_iht32x32_1024_add_c(input, dest, stride, txfm_param);
       break;
     case IDTX: inv_idtx_add_c(input, dest, stride, 32, 32, tx_type); break;
-#endif  // CONFIG_EXT_TX
 #if CONFIG_MRC_TX
     case MRC_DCT: imrc32x32_add_c(input, dest, stride, txfm_param); break;
 #endif  // CONFIG_MRC_TX
@@ -2876,7 +2758,6 @@
 #else
     case DCT_DCT:
 #endif
-#if CONFIG_EXT_TX
     case ADST_DCT:
     case DCT_ADST:
     case ADST_ADST:
@@ -2894,7 +2775,6 @@
       av1_iht64x64_4096_add_c(input, dest, stride, txfm_param);
       break;
     case IDTX: inv_idtx_add_c(input, dest, stride, 64, 64, tx_type); break;
-#endif  // CONFIG_EXT_TX
 #if CONFIG_MRC_TX
     case MRC_DCT: assert(0 && "Invalid tx type for tx size");
 #endif  // CONFIG_MRC_TX
@@ -2918,9 +2798,7 @@
 
 void av1_highbd_inv_txfm_add_4x4(const tran_low_t *input, uint8_t *dest,
                                  int stride, const TxfmParam *txfm_param) {
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
-#endif  // CONFIG_EXT_TX
   int eob = txfm_param->eob;
   int bd = txfm_param->bd;
   int lossless = txfm_param->lossless;
@@ -2939,7 +2817,6 @@
       av1_inv_txfm2d_add_4x4(src, CONVERT_TO_SHORTPTR(dest), stride, tx_type,
                              bd);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
@@ -2959,16 +2836,13 @@
       av1_inv_txfm2d_add_4x4_c(src, CONVERT_TO_SHORTPTR(dest), stride, tx_type,
                                bd);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0); break;
   }
 }
 
 void av1_highbd_inv_txfm_add_4x8(const tran_low_t *input, uint8_t *dest,
                                  int stride, const TxfmParam *txfm_param) {
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
-#endif  // CONFIG_EXT_TX
   const int32_t *src = cast_to_int32(input);
   av1_inv_txfm2d_add_4x8_c(src, CONVERT_TO_SHORTPTR(dest), stride,
                            txfm_param->tx_type, txfm_param->bd);
@@ -2976,9 +2850,7 @@
 
 void av1_highbd_inv_txfm_add_8x4(const tran_low_t *input, uint8_t *dest,
                                  int stride, const TxfmParam *txfm_param) {
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
-#endif  // CONFIG_EXT_TX
   const int32_t *src = cast_to_int32(input);
   av1_inv_txfm2d_add_8x4_c(src, CONVERT_TO_SHORTPTR(dest), stride,
                            txfm_param->tx_type, txfm_param->bd);
@@ -3041,7 +2913,6 @@
       av1_inv_txfm2d_add_8x8(src, CONVERT_TO_SHORTPTR(dest), stride, tx_type,
                              bd);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
@@ -3061,7 +2932,6 @@
       av1_inv_txfm2d_add_8x8_c(src, CONVERT_TO_SHORTPTR(dest), stride, tx_type,
                                bd);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0);
   }
 }
@@ -3079,7 +2949,6 @@
       av1_inv_txfm2d_add_16x16(src, CONVERT_TO_SHORTPTR(dest), stride, tx_type,
                                bd);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
@@ -3099,7 +2968,6 @@
       av1_inv_txfm2d_add_16x16_c(src, CONVERT_TO_SHORTPTR(dest), stride,
                                  tx_type, bd);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0);
   }
 }
@@ -3120,7 +2988,6 @@
     case ADST_DCT:
     case DCT_ADST:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
@@ -3133,7 +3000,6 @@
     case H_ADST:
     case V_FLIPADST:
     case H_FLIPADST:
-#endif  // CONFIG_EXT_TX
       av1_inv_txfm2d_add_32x32_c(src, CONVERT_TO_SHORTPTR(dest), stride,
                                  tx_type, bd);
       break;
@@ -3153,7 +3019,6 @@
       av1_inv_txfm2d_add_64x64(src, CONVERT_TO_SHORTPTR(dest), stride, DCT_DCT,
                                bd);
       break;
-#if CONFIG_EXT_TX
     case ADST_DCT:
     case DCT_ADST:
     case ADST_ADST:
@@ -3180,7 +3045,6 @@
     case IDTX:
       highbd_inv_idtx_add_c(input, dest, stride, 64, 64, tx_type, bd);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0); break;
   }
 }
@@ -3188,9 +3052,7 @@
 
 void av1_inv_txfm_add(const tran_low_t *input, uint8_t *dest, int stride,
                       TxfmParam *txfm_param) {
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
-#endif  // CONFIG_EXT_TX
   const TX_SIZE tx_size = txfm_param->tx_size;
 #if CONFIG_LGT_FROM_PRED
   if (txfm_param->use_lgt) {
@@ -3232,18 +3094,13 @@
   }
 }
 
-static void init_txfm_param(const MACROBLOCKD *xd,
-#if CONFIG_EXT_TX
-                            int plane,
-#endif  // CONFIG_EXT_TX
-                            TX_SIZE tx_size, TX_TYPE tx_type, int eob,
-                            TxfmParam *txfm_param) {
+static void init_txfm_param(const MACROBLOCKD *xd, int plane, TX_SIZE tx_size,
+                            TX_TYPE tx_type, int eob, TxfmParam *txfm_param) {
   txfm_param->tx_type = tx_type;
   txfm_param->tx_size = tx_size;
   txfm_param->eob = eob;
   txfm_param->lossless = xd->lossless[xd->mi[0]->mbmi.segment_id];
   txfm_param->bd = xd->bd;
-#if CONFIG_EXT_TX
   const struct macroblockd_plane *const pd = &xd->plane[plane];
   const BLOCK_SIZE plane_bsize =
       get_plane_block_size(xd->mi[0]->mbmi.sb_type, pd);
@@ -3252,7 +3109,6 @@
   // within this function.
   txfm_param->tx_set_type = get_ext_tx_set_type(
       txfm_param->tx_size, plane_bsize, is_inter_block(&xd->mi[0]->mbmi), 0);
-#endif  // CONFIG_EXT_TX
 #if CONFIG_LGT
   txfm_param->is_inter = is_inter_block(&xd->mi[0]->mbmi);
 #endif
@@ -3281,19 +3137,12 @@
 #if CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
                                  uint8_t *mrc_mask,
 #endif  // CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
-#if CONFIG_EXT_TX
-                                 int plane,
-#endif  // CONFIG_EXT_TX
-                                 TX_TYPE tx_type, TX_SIZE tx_size, uint8_t *dst,
-                                 int stride, int eob) {
+                                 int plane, TX_TYPE tx_type, TX_SIZE tx_size,
+                                 uint8_t *dst, int stride, int eob) {
   if (!eob) return;
 
   TxfmParam txfm_param;
-  init_txfm_param(xd,
-#if CONFIG_EXT_TX
-                  plane,
-#endif  // CONFIG_EXT_TX
-                  tx_size, tx_type, eob, &txfm_param);
+  init_txfm_param(xd, plane, tx_size, tx_type, eob, &txfm_param);
 #if CONFIG_LGT || CONFIG_MRC_TX
   txfm_param.is_inter = is_inter_block(&xd->mi[0]->mbmi);
 #endif  // CONFIG_LGT || CONFIG_MRC_TX
@@ -3307,9 +3156,7 @@
   txfm_param.mode = mode;
 #endif  // CONFIG_LGT_FROM_PRED
 #endif  // CONFIG_LGT_FROM_PRED || CONFIG_MRC_TX
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param.tx_set_type][txfm_param.tx_type]);
-#endif  // CONFIG_EXT_TX
 
   const int is_hbd = get_bitdepth_data_path_index(xd);
 #if CONFIG_TXMG
@@ -3361,18 +3208,13 @@
 #if CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
                               mrc_mask,
 #endif  // CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
-#if CONFIG_EXT_TX
-                              plane,
-#endif  // CONFIG_EXT_TX
-                              tx_type, tx_size, dst, dst_stride, eob);
+                              plane, tx_type, tx_size, dst, dst_stride, eob);
 }
 
 void av1_highbd_inv_txfm_add(const tran_low_t *input, uint8_t *dest, int stride,
                              TxfmParam *txfm_param) {
   const TX_SIZE tx_size = txfm_param->tx_size;
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
-#endif  // CONFIG_EXT_TX
   switch (tx_size) {
 #if CONFIG_TX64X64
     case TX_64X64:
diff --git a/av1/common/idct.h b/av1/common/idct.h
index a7c0cc8..7846452 100644
--- a/av1/common/idct.h
+++ b/av1/common/idct.h
@@ -74,11 +74,8 @@
 #if CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
                                  uint8_t *mrc_mask,
 #endif  // CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
-#if CONFIG_EXT_TX
-                                 int plane,
-#endif  // CONFIG_EXT_TX
-                                 TX_TYPE tx_type, TX_SIZE tx_size, uint8_t *dst,
-                                 int stride, int eob);
+                                 int plane, TX_TYPE tx_type, TX_SIZE tx_size,
+                                 uint8_t *dst, int stride, int eob);
 void av1_inverse_transform_block_facade(MACROBLOCKD *xd, int plane, int block,
                                         int blk_row, int blk_col, int eob);
 
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h
index 5e70fc7..351a424 100644
--- a/av1/common/onyxc_int.h
+++ b/av1/common/onyxc_int.h
@@ -384,9 +384,7 @@
   int all_lossless;
   int frame_parallel_decode;  // frame-based threading.
 
-#if CONFIG_EXT_TX
   int reduced_tx_set_used;
-#endif  // CONFIG_EXT_TX
 
   // Context probabilities for reference frame prediction
   MV_REFERENCE_FRAME comp_fwd_ref[FWD_REFS];
diff --git a/av1/common/scan.c b/av1/common/scan.c
index 241d2fb..b7b1555 100644
--- a/av1/common/scan.c
+++ b/av1/common/scan.c
@@ -18,7 +18,6 @@
   0, 4, 1, 5, 8, 2, 12, 9, 3, 6, 13, 10, 7, 14, 11, 15,
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t, mcol_scan_4x4[16]) = {
   0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15,
 };
@@ -26,7 +25,6 @@
 DECLARE_ALIGNED(16, static const int16_t, mrow_scan_4x4[16]) = {
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t, col_scan_4x4[16]) = {
   0, 4, 8, 1, 12, 5, 9, 2, 13, 6, 10, 3, 7, 14, 11, 15,
@@ -80,7 +78,6 @@
   12, 28, 44, 60, 13, 29, 45, 61, 14, 30, 46, 62, 15, 31, 47, 63,
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t, mrow_scan_4x16[64]) = {
   0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14, 15,
   16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
@@ -108,7 +105,6 @@
   8,  24, 40, 56, 9,  25, 41, 57, 10, 26, 42, 58, 11, 27, 43, 59,
   12, 28, 44, 60, 13, 29, 45, 61, 14, 30, 46, 62, 15, 31, 47, 63,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t, default_scan_8x32[256]) = {
   0,   1,   8,   2,   9,   16,  3,   10,  17,  24,  4,   11,  18,  25,  32,
@@ -152,7 +148,6 @@
   255,
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t, mrow_scan_8x32[256]) = {
   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,
   15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,
@@ -234,7 +229,6 @@
   28, 60, 92, 124, 156, 188, 220, 252, 29, 61, 93, 125, 157, 189, 221, 253,
   30, 62, 94, 126, 158, 190, 222, 254, 31, 63, 95, 127, 159, 191, 223, 255,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t, default_scan_8x8[64]) = {
   0,  8,  1,  16, 9,  2,  17, 24, 10, 3,  18, 25, 32, 11, 4,  26,
@@ -243,7 +237,6 @@
   45, 23, 52, 59, 38, 31, 60, 53, 46, 39, 61, 54, 47, 62, 55, 63,
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t, mcol_scan_8x8[64]) = {
   0, 8,  16, 24, 32, 40, 48, 56, 1, 9,  17, 25, 33, 41, 49, 57,
   2, 10, 18, 26, 34, 42, 50, 58, 3, 11, 19, 27, 35, 43, 51, 59,
@@ -257,7 +250,6 @@
   32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
   48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t, col_scan_8x8[64]) = {
   0,  8,  16, 1,  24, 9,  32, 17, 2,  40, 25, 10, 33, 18, 48, 3,
@@ -588,7 +580,6 @@
   255,
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t, mcol_scan_16x16[256]) = {
   0,  16, 32, 48, 64, 80, 96,  112, 128, 144, 160, 176, 192, 208, 224, 240,
   1,  17, 33, 49, 65, 81, 97,  113, 129, 145, 161, 177, 193, 209, 225, 241,
@@ -628,7 +619,6 @@
   240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
   255,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t, col_scan_16x16[256]) = {
   0,   16,  32,  48,  1,   64,  17,  80,  33,  96,  49,  2,   65,  112, 18,
@@ -672,7 +662,6 @@
   255,
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t, mcol_scan_32x32[1024]) = {
   0,   32,   64,  96,   128, 160,  192, 224,  256, 288,  320, 352,  384, 416,
   448, 480,  512, 544,  576, 608,  640, 672,  704, 736,  768, 800,  832, 864,
@@ -831,7 +820,6 @@
   1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
   1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t, default_scan_32x32[1024]) = {
   0,    32,   1,    64,  33,   2,    96,   65,   34,   128,  3,    97,   66,
@@ -1818,7 +1806,6 @@
   2, 2, 5, 9, 12, 6, 9, 3, 6, 10, 13, 7, 10, 11, 14, 0, 0,
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t,
                 mcol_scan_4x4_neighbors[17 * MAX_NEIGHBORS]) = {
   0, 0, 0, 0, 4, 4,  8,  8, 0, 0, 1, 4, 5,  8,  9,  12, 1,
@@ -1830,7 +1817,6 @@
   0, 0, 0, 0, 1, 1, 2,  2, 0, 0, 1,  4,  2,  5,  3,  6, 4,
   4, 5, 8, 6, 9, 7, 10, 8, 8, 9, 12, 10, 13, 11, 14, 0, 0,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t,
                 col_scan_4x4_neighbors[17 * MAX_NEIGHBORS]) = {
@@ -1914,7 +1900,6 @@
   14, 29, 30, 45, 46, 61, 14, 14, 15, 30, 31, 46, 47, 62, 0,  0
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t,
                 mrow_scan_4x16_neighbors[65 * MAX_NEIGHBORS]) = {
   0,  0,  0,  0,  1,  1,  2,  2,  0,  0,  1,  4,  2,  5,  3,  6,  4,  4,  5,
@@ -1958,7 +1943,6 @@
   58, 11, 11, 12, 27, 28, 43, 44, 59, 12, 12, 13, 28, 29, 44, 45, 60, 13, 13,
   14, 29, 30, 45, 46, 61, 14, 14, 15, 30, 31, 46, 47, 62, 0,  0
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t,
                 default_scan_8x32_neighbors[257 * MAX_NEIGHBORS]) = {
@@ -2038,7 +2022,6 @@
   223, 254, 0,   0
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t,
                 mrow_scan_8x32_neighbors[257 * MAX_NEIGHBORS]) = {
   0,   0,   0,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,
@@ -2192,7 +2175,6 @@
   30, 30, 31, 62, 63, 94, 95, 126, 127, 158, 159, 190, 191, 222, 223, 254,
   0,  0
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t,
                 col_scan_8x8_neighbors[65 * MAX_NEIGHBORS]) = {
@@ -2205,7 +2187,6 @@
   53, 60, 31, 38, 46, 53, 39, 46, 54, 61, 47, 54, 55, 62, 0,  0,
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t,
                 mcol_scan_8x8_neighbors[65 * MAX_NEIGHBORS]) = {
   0,  0,  0,  0,  8,  8,  16, 16, 24, 24, 32, 32, 40, 40, 48, 48, 0,  0,  1,
@@ -2227,7 +2208,6 @@
   46, 40, 40, 41, 48, 42, 49, 43, 50, 44, 51, 45, 52, 46, 53, 47, 54, 48, 48,
   49, 56, 50, 57, 51, 58, 52, 59, 53, 60, 54, 61, 55, 62, 0,  0,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t,
                 row_scan_8x8_neighbors[65 * MAX_NEIGHBORS]) = {
@@ -2819,7 +2799,6 @@
   478, 509, 479, 510, 0,   0
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t,
                 mcol_scan_16x16_neighbors[257 * MAX_NEIGHBORS]) = {
   0,   0,   0,   0,   16,  16,  32,  32,  48,  48,  64,  64,  80,  80,  96,
@@ -2897,7 +2876,6 @@
   246, 232, 247, 233, 248, 234, 249, 235, 250, 236, 251, 237, 252, 238, 253,
   239, 254, 0,   0,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t,
                 col_scan_16x16_neighbors[257 * MAX_NEIGHBORS]) = {
@@ -3016,7 +2994,6 @@
   239, 254, 0,   0,
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t,
                 mcol_scan_32x32_neighbors[1025 * MAX_NEIGHBORS]) = {
   0,   0,    0,   0,    32,  32,   64,  64,   96,  96,   128, 128,  160, 160,
@@ -3318,7 +3295,6 @@
   983, 1014, 984, 1015, 985, 1016, 986, 1017, 987, 1018, 988, 1019, 989, 1020,
   990, 1021, 991, 1022, 0,   0,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t,
                 default_scan_32x32_neighbors[1025 * MAX_NEIGHBORS]) = {
@@ -5205,7 +5181,6 @@
   0, 2, 5, 8, 1, 3, 9, 12, 4, 7, 11, 14, 6, 10, 13, 15,
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t, av1_mcol_iscan_4x4[16]) = {
   0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15,
 };
@@ -5213,7 +5188,6 @@
 DECLARE_ALIGNED(16, static const int16_t, av1_mrow_iscan_4x4[16]) = {
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t, av1_col_iscan_4x4[16]) = {
   0, 3, 7, 11, 1, 5, 9, 12, 2, 6, 10, 14, 4, 8, 13, 15,
@@ -5267,7 +5241,6 @@
   10, 12, 14, 17, 20, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63,
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t, av1_mrow_iscan_4x16[64]) = {
   0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14, 15,
   16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
@@ -5295,7 +5268,6 @@
   2, 6, 10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50, 54, 58, 62,
   3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t, av1_default_iscan_8x32[256]) = {
   0,   1,   3,   6,   10,  15,  21,  28,  2,   4,   7,   11,  16,  22,  29,
@@ -5338,7 +5310,6 @@
   255,
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t, av1_mrow_iscan_8x32[256]) = {
   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,
   15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,
@@ -5420,9 +5391,7 @@
   135, 143, 151, 159, 167, 175, 183, 191, 199, 207, 215, 223, 231, 239, 247,
   255,
 };
-#endif  // CONFIG_EXT_TX
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t, av1_mcol_iscan_8x8[64]) = {
   0, 8,  16, 24, 32, 40, 48, 56, 1, 9,  17, 25, 33, 41, 49, 57,
   2, 10, 18, 26, 34, 42, 50, 58, 3, 11, 19, 27, 35, 43, 51, 59,
@@ -5436,7 +5405,6 @@
   32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
   48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t, av1_col_iscan_8x8[64]) = {
   0,  3,  8,  15, 22, 32, 40, 47, 1,  5,  11, 18, 26, 34, 44, 51,
@@ -5752,7 +5720,6 @@
   510, 511,
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t, av1_mcol_iscan_16x16[256]) = {
   0,  16, 32, 48, 64, 80, 96,  112, 128, 144, 160, 176, 192, 208, 224, 240,
   1,  17, 33, 49, 65, 81, 97,  113, 129, 145, 161, 177, 193, 209, 225, 241,
@@ -5792,7 +5759,6 @@
   240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
   255,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t, av1_col_iscan_16x16[256]) = {
   0,  4,  11,  20,  31,  43,  59,  75,  85,  109, 130, 150, 165, 181, 195, 198,
@@ -5855,7 +5821,6 @@
   255,
 };
 
-#if CONFIG_EXT_TX
 DECLARE_ALIGNED(16, static const int16_t, av1_mcol_iscan_32x32[1024]) = {
   0,   32,   64,  96,   128, 160,  192, 224,  256, 288,  320, 352,  384, 416,
   448, 480,  512, 544,  576, 608,  640, 672,  704, 736,  768, 800,  832, 864,
@@ -6014,7 +5979,6 @@
   1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
   1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023,
 };
-#endif  // CONFIG_EXT_TX
 
 DECLARE_ALIGNED(16, static const int16_t, av1_default_iscan_32x32[1024]) = {
   0,    2,    5,    10,   17,   25,   38,   47,   62,   83,   101,  121,  145,
@@ -7004,7 +6968,6 @@
       { row_scan_4x4, av1_row_iscan_4x4, row_scan_4x4_neighbors },
       { col_scan_4x4, av1_col_iscan_4x4, col_scan_4x4_neighbors },
       { default_scan_4x4, av1_default_iscan_4x4, default_scan_4x4_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_4x4, av1_default_iscan_4x4, default_scan_4x4_neighbors },
       { default_scan_4x4, av1_default_iscan_4x4, default_scan_4x4_neighbors },
       { default_scan_4x4, av1_default_iscan_4x4, default_scan_4x4_neighbors },
@@ -7017,7 +6980,6 @@
       { col_scan_4x4, av1_col_iscan_4x4, col_scan_4x4_neighbors },
       { row_scan_4x4, av1_row_iscan_4x4, row_scan_4x4_neighbors },
       { col_scan_4x4, av1_col_iscan_4x4, col_scan_4x4_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_8X8
@@ -7025,7 +6987,6 @@
       { row_scan_8x8, av1_row_iscan_8x8, row_scan_8x8_neighbors },
       { col_scan_8x8, av1_col_iscan_8x8, col_scan_8x8_neighbors },
       { default_scan_8x8, av1_default_iscan_8x8, default_scan_8x8_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_8x8, av1_default_iscan_8x8, default_scan_8x8_neighbors },
       { default_scan_8x8, av1_default_iscan_8x8, default_scan_8x8_neighbors },
       { default_scan_8x8, av1_default_iscan_8x8, default_scan_8x8_neighbors },
@@ -7038,7 +6999,6 @@
       { col_scan_8x8, av1_col_iscan_8x8, col_scan_8x8_neighbors },
       { row_scan_8x8, av1_row_iscan_8x8, row_scan_8x8_neighbors },
       { col_scan_8x8, av1_col_iscan_8x8, col_scan_8x8_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_16X16
@@ -7048,7 +7008,6 @@
       { col_scan_16x16, av1_col_iscan_16x16, col_scan_16x16_neighbors },
       { default_scan_16x16, av1_default_iscan_16x16,
         default_scan_16x16_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_16x16, av1_default_iscan_16x16,
         default_scan_16x16_neighbors },
       { default_scan_16x16, av1_default_iscan_16x16,
@@ -7066,7 +7025,6 @@
       { col_scan_16x16, av1_col_iscan_16x16, col_scan_16x16_neighbors },
       { row_scan_16x16, av1_row_iscan_16x16, row_scan_16x16_neighbors },
       { col_scan_16x16, av1_col_iscan_16x16, col_scan_16x16_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_32X32
@@ -7075,7 +7033,6 @@
       { h2_scan_32x32, av1_h2_iscan_32x32, h2_scan_32x32_neighbors },
       { v2_scan_32x32, av1_v2_iscan_32x32, v2_scan_32x32_neighbors },
       { qtr_scan_32x32, av1_qtr_iscan_32x32, qtr_scan_32x32_neighbors },
-#if CONFIG_EXT_TX
       { h2_scan_32x32, av1_h2_iscan_32x32, h2_scan_32x32_neighbors },
       { v2_scan_32x32, av1_v2_iscan_32x32, v2_scan_32x32_neighbors },
       { qtr_scan_32x32, av1_qtr_iscan_32x32, qtr_scan_32x32_neighbors },
@@ -7088,7 +7045,6 @@
       { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors },
       { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors },
       { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors },
-#endif  // CONFIG_EXT_TX
   },
 #if CONFIG_TX64X64
   {
@@ -7101,7 +7057,6 @@
         default_scan_64x64_neighbors },
       { default_scan_64x64, av1_default_iscan_64x64,
         default_scan_64x64_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_64x64, av1_default_iscan_64x64,
         default_scan_64x64_neighbors },
       { default_scan_64x64, av1_default_iscan_64x64,
@@ -7126,7 +7081,6 @@
         default_scan_64x64_neighbors },
       { default_scan_64x64, av1_default_iscan_64x64,
         default_scan_64x64_neighbors },
-#endif  // CONFIG_EXT_TX
   },
 #endif  // CONFIG_TX64X64
   {
@@ -7135,7 +7089,6 @@
       { mrow_scan_4x8, av1_mrow_iscan_4x8, mrow_scan_4x8_neighbors },
       { mcol_scan_4x8, av1_mcol_iscan_4x8, mcol_scan_4x8_neighbors },
       { default_scan_4x8, av1_default_iscan_4x8, default_scan_4x8_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_4x8, av1_default_iscan_4x8, default_scan_4x8_neighbors },
       { default_scan_4x8, av1_default_iscan_4x8, default_scan_4x8_neighbors },
       { default_scan_4x8, av1_default_iscan_4x8, default_scan_4x8_neighbors },
@@ -7148,7 +7101,6 @@
       { mcol_scan_4x8, av1_mcol_iscan_4x8, mcol_scan_4x8_neighbors },
       { mrow_scan_4x8, av1_mrow_iscan_4x8, mrow_scan_4x8_neighbors },
       { mcol_scan_4x8, av1_mcol_iscan_4x8, mcol_scan_4x8_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_8X4
@@ -7156,7 +7108,6 @@
       { mrow_scan_8x4, av1_mrow_iscan_8x4, mrow_scan_8x4_neighbors },
       { mcol_scan_8x4, av1_mcol_iscan_8x4, mcol_scan_8x4_neighbors },
       { default_scan_8x4, av1_default_iscan_8x4, default_scan_8x4_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_8x4, av1_default_iscan_8x4, default_scan_8x4_neighbors },
       { default_scan_8x4, av1_default_iscan_8x4, default_scan_8x4_neighbors },
       { default_scan_8x4, av1_default_iscan_8x4, default_scan_8x4_neighbors },
@@ -7169,7 +7120,6 @@
       { mcol_scan_8x4, av1_mcol_iscan_8x4, mcol_scan_8x4_neighbors },
       { mrow_scan_8x4, av1_mrow_iscan_8x4, mrow_scan_8x4_neighbors },
       { mcol_scan_8x4, av1_mcol_iscan_8x4, mcol_scan_8x4_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_8X16
@@ -7179,7 +7129,6 @@
       { mcol_scan_8x16, av1_mcol_iscan_8x16, mcol_scan_8x16_neighbors },
       { default_scan_8x16, av1_default_iscan_8x16,
         default_scan_8x16_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_8x16, av1_default_iscan_8x16,
         default_scan_8x16_neighbors },
       { default_scan_8x16, av1_default_iscan_8x16,
@@ -7197,7 +7146,6 @@
       { mcol_scan_8x16, av1_mcol_iscan_8x16, mcol_scan_8x16_neighbors },
       { mrow_scan_8x16, av1_mrow_iscan_8x16, mrow_scan_8x16_neighbors },
       { mcol_scan_8x16, av1_mcol_iscan_8x16, mcol_scan_8x16_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_16X8
@@ -7207,7 +7155,6 @@
       { mcol_scan_16x8, av1_mcol_iscan_16x8, mcol_scan_16x8_neighbors },
       { default_scan_16x8, av1_default_iscan_16x8,
         default_scan_16x8_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_16x8, av1_default_iscan_16x8,
         default_scan_16x8_neighbors },
       { default_scan_16x8, av1_default_iscan_16x8,
@@ -7225,7 +7172,6 @@
       { mcol_scan_16x8, av1_mcol_iscan_16x8, mcol_scan_16x8_neighbors },
       { mrow_scan_16x8, av1_mrow_iscan_16x8, mrow_scan_16x8_neighbors },
       { mcol_scan_16x8, av1_mcol_iscan_16x8, mcol_scan_16x8_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_16X32
@@ -7235,7 +7181,6 @@
       { mcol_scan_16x32, av1_mcol_iscan_16x32, mcol_scan_16x32_neighbors },
       { default_scan_16x32, av1_default_iscan_16x32,
         default_scan_16x32_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_16x32, av1_default_iscan_16x32,
         default_scan_16x32_neighbors },
       { default_scan_16x32, av1_default_iscan_16x32,
@@ -7253,7 +7198,6 @@
       { mcol_scan_16x32, av1_mcol_iscan_16x32, mcol_scan_16x32_neighbors },
       { mrow_scan_16x32, av1_mrow_iscan_16x32, mrow_scan_16x32_neighbors },
       { mcol_scan_16x32, av1_mcol_iscan_16x32, mcol_scan_16x32_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_32X16
@@ -7263,7 +7207,6 @@
       { mcol_scan_32x16, av1_mcol_iscan_32x16, mcol_scan_32x16_neighbors },
       { default_scan_32x16, av1_default_iscan_32x16,
         default_scan_32x16_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_32x16, av1_default_iscan_32x16,
         default_scan_32x16_neighbors },
       { default_scan_32x16, av1_default_iscan_32x16,
@@ -7281,7 +7224,6 @@
       { mcol_scan_32x16, av1_mcol_iscan_32x16, mcol_scan_32x16_neighbors },
       { mrow_scan_32x16, av1_mrow_iscan_32x16, mrow_scan_32x16_neighbors },
       { mcol_scan_32x16, av1_mcol_iscan_32x16, mcol_scan_32x16_neighbors },
-#endif  // CONFIG_EXT_TX
   },
 #if CONFIG_TX64X64
   {
@@ -7294,7 +7236,6 @@
         default_scan_32x64_neighbors },
       { default_scan_32x64, av1_default_iscan_32x64,
         default_scan_32x64_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_32x64, av1_default_iscan_32x64,
         default_scan_32x64_neighbors },
       { default_scan_32x64, av1_default_iscan_32x64,
@@ -7319,7 +7260,6 @@
         default_scan_32x64_neighbors },
       { default_scan_32x64, av1_default_iscan_32x64,
         default_scan_32x64_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_64X32
@@ -7331,7 +7271,6 @@
         default_scan_64x32_neighbors },
       { default_scan_64x32, av1_default_iscan_64x32,
         default_scan_64x32_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_64x32, av1_default_iscan_64x32,
         default_scan_64x32_neighbors },
       { default_scan_64x32, av1_default_iscan_64x32,
@@ -7356,7 +7295,6 @@
         default_scan_64x32_neighbors },
       { default_scan_64x32, av1_default_iscan_64x32,
         default_scan_64x32_neighbors },
-#endif  // CONFIG_EXT_TX
   }
 #endif  // CONFIG_TX64X64
 };
@@ -7368,7 +7306,6 @@
       { default_scan_4x4, av1_default_iscan_4x4, default_scan_4x4_neighbors },
       { default_scan_4x4, av1_default_iscan_4x4, default_scan_4x4_neighbors },
       { default_scan_4x4, av1_default_iscan_4x4, default_scan_4x4_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_4x4, av1_default_iscan_4x4, default_scan_4x4_neighbors },
       { default_scan_4x4, av1_default_iscan_4x4, default_scan_4x4_neighbors },
       { default_scan_4x4, av1_default_iscan_4x4, default_scan_4x4_neighbors },
@@ -7381,7 +7318,6 @@
       { mcol_scan_4x4, av1_mcol_iscan_4x4, mcol_scan_4x4_neighbors },
       { mrow_scan_4x4, av1_mrow_iscan_4x4, mrow_scan_4x4_neighbors },
       { mcol_scan_4x4, av1_mcol_iscan_4x4, mcol_scan_4x4_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_8X8
@@ -7389,7 +7325,6 @@
       { default_scan_8x8, av1_default_iscan_8x8, default_scan_8x8_neighbors },
       { default_scan_8x8, av1_default_iscan_8x8, default_scan_8x8_neighbors },
       { default_scan_8x8, av1_default_iscan_8x8, default_scan_8x8_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_8x8, av1_default_iscan_8x8, default_scan_8x8_neighbors },
       { default_scan_8x8, av1_default_iscan_8x8, default_scan_8x8_neighbors },
       { default_scan_8x8, av1_default_iscan_8x8, default_scan_8x8_neighbors },
@@ -7402,7 +7337,6 @@
       { mcol_scan_8x8, av1_mcol_iscan_8x8, mcol_scan_8x8_neighbors },
       { mrow_scan_8x8, av1_mrow_iscan_8x8, mrow_scan_8x8_neighbors },
       { mcol_scan_8x8, av1_mcol_iscan_8x8, mcol_scan_8x8_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_16X16
@@ -7414,7 +7348,6 @@
         default_scan_16x16_neighbors },
       { default_scan_16x16, av1_default_iscan_16x16,
         default_scan_16x16_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_16x16, av1_default_iscan_16x16,
         default_scan_16x16_neighbors },
       { default_scan_16x16, av1_default_iscan_16x16,
@@ -7432,7 +7365,6 @@
       { mcol_scan_16x16, av1_mcol_iscan_16x16, mcol_scan_16x16_neighbors },
       { mrow_scan_16x16, av1_mrow_iscan_16x16, mrow_scan_16x16_neighbors },
       { mcol_scan_16x16, av1_mcol_iscan_16x16, mcol_scan_16x16_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_32X32
@@ -7441,7 +7373,6 @@
       { h2_scan_32x32, av1_h2_iscan_32x32, h2_scan_32x32_neighbors },
       { v2_scan_32x32, av1_v2_iscan_32x32, v2_scan_32x32_neighbors },
       { qtr_scan_32x32, av1_qtr_iscan_32x32, qtr_scan_32x32_neighbors },
-#if CONFIG_EXT_TX
       { h2_scan_32x32, av1_h2_iscan_32x32, h2_scan_32x32_neighbors },
       { v2_scan_32x32, av1_v2_iscan_32x32, v2_scan_32x32_neighbors },
       { qtr_scan_32x32, av1_qtr_iscan_32x32, qtr_scan_32x32_neighbors },
@@ -7454,7 +7385,6 @@
       { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors },
       { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors },
       { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors },
-#endif  // CONFIG_EXT_TX
   },
 #if CONFIG_TX64X64
   {
@@ -7467,7 +7397,6 @@
         default_scan_64x64_neighbors },
       { default_scan_64x64, av1_default_iscan_64x64,
         default_scan_64x64_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_64x64, av1_default_iscan_64x64,
         default_scan_64x64_neighbors },
       { default_scan_64x64, av1_default_iscan_64x64,
@@ -7492,7 +7421,6 @@
         default_scan_64x64_neighbors },
       { default_scan_64x64, av1_default_iscan_64x64,
         default_scan_64x64_neighbors },
-#endif  // CONFIG_EXT_TX
   },
 #endif  // CONFIG_TX64X64
   {
@@ -7501,7 +7429,6 @@
       { default_scan_4x8, av1_default_iscan_4x8, default_scan_4x8_neighbors },
       { default_scan_4x8, av1_default_iscan_4x8, default_scan_4x8_neighbors },
       { default_scan_4x8, av1_default_iscan_4x8, default_scan_4x8_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_4x8, av1_default_iscan_4x8, default_scan_4x8_neighbors },
       { default_scan_4x8, av1_default_iscan_4x8, default_scan_4x8_neighbors },
       { default_scan_4x8, av1_default_iscan_4x8, default_scan_4x8_neighbors },
@@ -7514,7 +7441,6 @@
       { mcol_scan_4x8, av1_mcol_iscan_4x8, mcol_scan_4x8_neighbors },
       { mrow_scan_4x8, av1_mrow_iscan_4x8, mrow_scan_4x8_neighbors },
       { mcol_scan_4x8, av1_mcol_iscan_4x8, mcol_scan_4x8_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_8X4
@@ -7522,7 +7448,6 @@
       { default_scan_8x4, av1_default_iscan_8x4, default_scan_8x4_neighbors },
       { default_scan_8x4, av1_default_iscan_8x4, default_scan_8x4_neighbors },
       { default_scan_8x4, av1_default_iscan_8x4, default_scan_8x4_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_8x4, av1_default_iscan_8x4, default_scan_8x4_neighbors },
       { default_scan_8x4, av1_default_iscan_8x4, default_scan_8x4_neighbors },
       { default_scan_8x4, av1_default_iscan_8x4, default_scan_8x4_neighbors },
@@ -7535,7 +7460,6 @@
       { mcol_scan_8x4, av1_mcol_iscan_8x4, mcol_scan_8x4_neighbors },
       { mrow_scan_8x4, av1_mrow_iscan_8x4, mrow_scan_8x4_neighbors },
       { mcol_scan_8x4, av1_mcol_iscan_8x4, mcol_scan_8x4_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_8X16
@@ -7547,7 +7471,6 @@
         default_scan_8x16_neighbors },
       { default_scan_8x16, av1_default_iscan_8x16,
         default_scan_8x16_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_8x16, av1_default_iscan_8x16,
         default_scan_8x16_neighbors },
       { default_scan_8x16, av1_default_iscan_8x16,
@@ -7565,7 +7488,6 @@
       { mcol_scan_8x16, av1_mcol_iscan_8x16, mcol_scan_8x16_neighbors },
       { mrow_scan_8x16, av1_mrow_iscan_8x16, mrow_scan_8x16_neighbors },
       { mcol_scan_8x16, av1_mcol_iscan_8x16, mcol_scan_8x16_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_16X8
@@ -7577,7 +7499,6 @@
         default_scan_16x8_neighbors },
       { default_scan_16x8, av1_default_iscan_16x8,
         default_scan_16x8_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_16x8, av1_default_iscan_16x8,
         default_scan_16x8_neighbors },
       { default_scan_16x8, av1_default_iscan_16x8,
@@ -7595,7 +7516,6 @@
       { mcol_scan_16x8, av1_mcol_iscan_16x8, mcol_scan_16x8_neighbors },
       { mrow_scan_16x8, av1_mrow_iscan_16x8, mrow_scan_16x8_neighbors },
       { mcol_scan_16x8, av1_mcol_iscan_16x8, mcol_scan_16x8_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_16X32
@@ -7607,7 +7527,6 @@
         default_scan_16x32_neighbors },
       { default_scan_16x32, av1_default_iscan_16x32,
         default_scan_16x32_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_16x32, av1_default_iscan_16x32,
         default_scan_16x32_neighbors },
       { default_scan_16x32, av1_default_iscan_16x32,
@@ -7625,7 +7544,6 @@
       { mcol_scan_16x32, av1_mcol_iscan_16x32, mcol_scan_16x32_neighbors },
       { mrow_scan_16x32, av1_mrow_iscan_16x32, mrow_scan_16x32_neighbors },
       { mcol_scan_16x32, av1_mcol_iscan_16x32, mcol_scan_16x32_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_32X16
@@ -7637,7 +7555,6 @@
         default_scan_32x16_neighbors },
       { default_scan_32x16, av1_default_iscan_32x16,
         default_scan_32x16_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_32x16, av1_default_iscan_32x16,
         default_scan_32x16_neighbors },
       { default_scan_32x16, av1_default_iscan_32x16,
@@ -7655,7 +7572,6 @@
       { mcol_scan_32x16, av1_mcol_iscan_32x16, mcol_scan_32x16_neighbors },
       { mrow_scan_32x16, av1_mrow_iscan_32x16, mrow_scan_32x16_neighbors },
       { mcol_scan_32x16, av1_mcol_iscan_32x16, mcol_scan_32x16_neighbors },
-#endif  // CONFIG_EXT_TX
   },
 #if CONFIG_TX64X64
   {
@@ -7668,7 +7584,6 @@
         default_scan_32x64_neighbors },
       { default_scan_32x64, av1_default_iscan_32x64,
         default_scan_32x64_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_32x64, av1_default_iscan_32x64,
         default_scan_32x64_neighbors },
       { default_scan_32x64, av1_default_iscan_32x64,
@@ -7693,7 +7608,6 @@
         default_scan_32x64_neighbors },
       { default_scan_32x64, av1_default_iscan_32x64,
         default_scan_32x64_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_64X32
@@ -7705,7 +7619,6 @@
         default_scan_64x32_neighbors },
       { default_scan_64x32, av1_default_iscan_64x32,
         default_scan_64x32_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_64x32, av1_default_iscan_64x32,
         default_scan_64x32_neighbors },
       { default_scan_64x32, av1_default_iscan_64x32,
@@ -7730,7 +7643,6 @@
         default_scan_64x32_neighbors },
       { default_scan_64x32, av1_default_iscan_64x32,
         default_scan_64x32_neighbors },
-#endif  // CONFIG_EXT_TX
   },
 #endif  // CONFIG_TX64X64
   {
@@ -7743,7 +7655,6 @@
         default_scan_4x16_neighbors },
       { default_scan_4x16, av1_default_iscan_4x16,
         default_scan_4x16_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_4x16, av1_default_iscan_4x16,
         default_scan_4x16_neighbors },
       { default_scan_4x16, av1_default_iscan_4x16,
@@ -7761,7 +7672,6 @@
       { mcol_scan_4x16, av1_mcol_iscan_4x16, mcol_scan_4x16_neighbors },
       { mrow_scan_4x16, av1_mrow_iscan_4x16, mrow_scan_4x16_neighbors },
       { mcol_scan_4x16, av1_mcol_iscan_4x16, mcol_scan_4x16_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_16X4
@@ -7773,7 +7683,6 @@
         default_scan_16x4_neighbors },
       { default_scan_16x4, av1_default_iscan_16x4,
         default_scan_16x4_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_16x4, av1_default_iscan_16x4,
         default_scan_16x4_neighbors },
       { default_scan_16x4, av1_default_iscan_16x4,
@@ -7791,7 +7700,6 @@
       { mcol_scan_16x4, av1_mcol_iscan_16x4, mcol_scan_16x4_neighbors },
       { mrow_scan_16x4, av1_mrow_iscan_16x4, mrow_scan_16x4_neighbors },
       { mcol_scan_16x4, av1_mcol_iscan_16x4, mcol_scan_16x4_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_8X32
@@ -7803,7 +7711,6 @@
         default_scan_8x32_neighbors },
       { default_scan_8x32, av1_default_iscan_8x32,
         default_scan_8x32_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_8x32, av1_default_iscan_8x32,
         default_scan_8x32_neighbors },
       { default_scan_8x32, av1_default_iscan_8x32,
@@ -7821,7 +7728,6 @@
       { mcol_scan_8x32, av1_mcol_iscan_8x32, mcol_scan_8x32_neighbors },
       { mrow_scan_8x32, av1_mrow_iscan_8x32, mrow_scan_8x32_neighbors },
       { mcol_scan_8x32, av1_mcol_iscan_8x32, mcol_scan_8x32_neighbors },
-#endif  // CONFIG_EXT_TX
   },
   {
       // TX_32X8
@@ -7833,7 +7739,6 @@
         default_scan_32x8_neighbors },
       { default_scan_32x8, av1_default_iscan_32x8,
         default_scan_32x8_neighbors },
-#if CONFIG_EXT_TX
       { default_scan_32x8, av1_default_iscan_32x8,
         default_scan_32x8_neighbors },
       { default_scan_32x8, av1_default_iscan_32x8,
@@ -7851,7 +7756,6 @@
       { mcol_scan_32x8, av1_mcol_iscan_32x8, mcol_scan_32x8_neighbors },
       { mrow_scan_32x8, av1_mrow_iscan_32x8, mrow_scan_32x8_neighbors },
       { mcol_scan_32x8, av1_mcol_iscan_32x8, mcol_scan_32x8_neighbors },
-#endif  // CONFIG_EXT_TX
   },
 };
 
diff --git a/av1/common/scan.h b/av1/common/scan.h
index 827a34f..adbff18 100644
--- a/av1/common/scan.h
+++ b/av1/common/scan.h
@@ -88,13 +88,8 @@
 
 static INLINE int do_adapt_scan(TX_SIZE tx_size, TX_TYPE tx_type) {
   (void)tx_size;
-#if CONFIG_EXT_TX
   if (tx_size_2d[tx_size] >= 1024 && tx_type != DCT_DCT) return 0;
   return tx_type < IDTX;
-#else
-  (void)tx_type;
-  return 1;
-#endif
 }
 
 static INLINE const SCAN_ORDER *get_scan(const AV1_COMMON *cm, TX_SIZE tx_size,
@@ -111,11 +106,9 @@
 #if CONFIG_ADAPT_SCAN
   (void)mbmi;
   (void)is_inter;
-#if CONFIG_EXT_TX
   if (!do_adapt_scan(tx_size, tx_type))
     return get_default_scan(tx_size, tx_type, is_inter);
   else
-#endif  // CONFIG_EXT_TX
     return &cm->fc->sc[tx_size][tx_type];
 #else   // CONFIG_ADAPT_SCAN
   (void)cm;
diff --git a/av1/common/txb_common.h b/av1/common/txb_common.h
index 160cad5..a41c222 100644
--- a/av1/common/txb_common.h
+++ b/av1/common/txb_common.h
@@ -399,14 +399,12 @@
 
 static INLINE TX_CLASS get_tx_class(TX_TYPE tx_type) {
   switch (tx_type) {
-#if CONFIG_EXT_TX
     case V_DCT:
     case V_ADST:
     case V_FLIPADST: return TX_CLASS_VERT;
     case H_DCT:
     case H_ADST:
     case H_FLIPADST: return TX_CLASS_HORIZ;
-#endif
     default: return TX_CLASS_2D;
   }
 }
@@ -426,7 +424,6 @@
   const int width = 1 << bwl;
 
   int ctx = 0;
-#if CONFIG_EXT_TX
   int tx_class = get_tx_class(tx_type);
   int offset;
   if (tx_class == TX_CLASS_2D)
@@ -439,9 +436,6 @@
 #else
     offset = SIG_COEF_CONTEXTS_2D + SIG_COEF_CONTEXTS_1D;
 #endif
-#else
-  int offset = 0;
-#endif
 
 #if USE_CAUSAL_BASE_CTX
   (void)count;
diff --git a/av1/common/x86/highbd_inv_txfm_sse4.c b/av1/common/x86/highbd_inv_txfm_sse4.c
index 8613bed..95297e5 100644
--- a/av1/common/x86/highbd_inv_txfm_sse4.c
+++ b/av1/common/x86/highbd_inv_txfm_sse4.c
@@ -268,7 +268,6 @@
       iadst4x4_sse4_1(in, col_cfg->cos_bit[2]);
       write_buffer_4x4(in, output, stride, 0, 0, -row_cfg->shift[1], bd);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       row_cfg = &inv_txfm_1d_row_cfg_dct_4;
       col_cfg = &inv_txfm_1d_col_cfg_adst_4;
@@ -309,7 +308,6 @@
       iadst4x4_sse4_1(in, col_cfg->cos_bit[2]);
       write_buffer_4x4(in, output, stride, 0, 1, -row_cfg->shift[1], bd);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0);
   }
 }
@@ -752,7 +750,6 @@
       iadst8x8_sse4_1(out, in, col_cfg->cos_bit[2]);
       write_buffer_8x8(in, output, stride, 0, 0, -row_cfg->shift[1], bd);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       row_cfg = &inv_txfm_1d_row_cfg_dct_8;
       col_cfg = &inv_txfm_1d_col_cfg_adst_8;
@@ -803,7 +800,6 @@
       iadst8x8_sse4_1(out, in, col_cfg->cos_bit[2]);
       write_buffer_8x8(in, output, stride, 0, 1, -row_cfg->shift[1], bd);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0);
   }
 }
@@ -1366,7 +1362,6 @@
       iadst16x16_sse4_1(out, in, col_cfg->cos_bit[2]);
       write_buffer_16x16(in, output, stride, 0, 0, -row_cfg->shift[1], bd);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       row_cfg = &inv_txfm_1d_row_cfg_dct_16;
       col_cfg = &inv_txfm_1d_col_cfg_adst_16;
@@ -1422,7 +1417,6 @@
       iadst16x16_sse4_1(out, in, col_cfg->cos_bit[2]);
       write_buffer_16x16(in, output, stride, 0, 1, -row_cfg->shift[1], bd);
       break;
-#endif
     default: assert(0);
   }
 }
diff --git a/av1/common/x86/hybrid_inv_txfm_avx2.c b/av1/common/x86/hybrid_inv_txfm_avx2.c
index c440d0f..0cc1dde 100644
--- a/av1/common/x86/hybrid_inv_txfm_avx2.c
+++ b/av1/common/x86/hybrid_inv_txfm_avx2.c
@@ -344,7 +344,6 @@
   iadst16_avx2(in);
 }
 
-#if CONFIG_EXT_TX
 static void flip_row(__m256i *in, int rows) {
   int i;
   for (i = 0; i < rows; ++i) {
@@ -361,7 +360,6 @@
   mm256_transpose_16x16(in, in);
   txfm_scaling16_avx2((int16_t)Sqrt2, in);
 }
-#endif
 
 void av1_iht16x16_256_add_avx2(const tran_low_t *input, uint8_t *dest,
                                int stride, const TxfmParam *txfm_param) {
@@ -386,7 +384,6 @@
       iadst16(in);
       iadst16(in);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       idct16(in);
       iadst16(in);
@@ -443,7 +440,6 @@
       iidtx16(in);
       flip_row(in, 16);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0); break;
   }
   store_buffer_16xN(in, stride, dest, 16);
diff --git a/av1/common/x86/idct_intrin_sse2.c b/av1/common/x86/idct_intrin_sse2.c
index 541165c..9d4a435 100644
--- a/av1/common/x86/idct_intrin_sse2.c
+++ b/av1/common/x86/idct_intrin_sse2.c
@@ -16,7 +16,6 @@
 #include "aom_ports/mem.h"
 #include "av1/common/enums.h"
 
-#if CONFIG_EXT_TX
 static INLINE void fliplr_4x4(__m128i *in /*in[2]*/) {
   in[0] = _mm_shufflelo_epi16(in[0], 0x1b);
   in[0] = _mm_shufflehi_epi16(in[0], 0x1b);
@@ -56,7 +55,6 @@
     (dest) = (dest) + ((size)-1) * (stride); \
     (stride) = -(stride);                    \
   } while (0)
-#endif
 
 void av1_iht4x4_16_add_sse2(const tran_low_t *input, uint8_t *dest, int stride,
                             const TxfmParam *txfm_param) {
@@ -85,7 +83,6 @@
       aom_iadst4_sse2(in);
       aom_iadst4_sse2(in);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       aom_idct4_sse2(in);
       aom_iadst4_sse2(in);
@@ -112,7 +109,6 @@
       aom_iadst4_sse2(in);
       FLIPUD_PTR(dest, stride, 4);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0); break;
   }
 
@@ -184,7 +180,6 @@
       aom_iadst8_sse2(in);
       aom_iadst8_sse2(in);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       aom_idct8_sse2(in);
       aom_iadst8_sse2(in);
@@ -211,7 +206,6 @@
       aom_iadst8_sse2(in);
       FLIPUD_PTR(dest, stride, 8);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0); break;
   }
 
@@ -244,13 +238,11 @@
   RECON_AND_STORE(dest + 7 * stride, in[7]);
 }
 
-#if CONFIG_EXT_TX
 static void iidtx16_sse2(__m128i *in0, __m128i *in1) {
   array_transpose_16x16(in0, in1);
   idtx16_8col(in0);
   idtx16_8col(in1);
 }
-#endif  // CONFIG_EXT_TX
 
 void av1_iht16x16_256_add_sse2(const tran_low_t *input, uint8_t *dest,
                                int stride, const TxfmParam *txfm_param) {
@@ -280,7 +272,6 @@
       aom_iadst16_sse2(in0, in1);
       aom_iadst16_sse2(in0, in1);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       aom_idct16_sse2(in0, in1);
       aom_iadst16_sse2(in0, in1);
@@ -337,7 +328,6 @@
       iidtx16_sse2(in0, in1);
       FLIPLR_16x16(in0, in1);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0); break;
   }
 
@@ -346,7 +336,6 @@
   write_buffer_8x16(dest, in1, stride);
 }
 
-#if CONFIG_EXT_TX
 static void iidtx8_sse2(__m128i *in) {
   in[0] = _mm_slli_epi16(in[0], 1);
   in[1] = _mm_slli_epi16(in[1], 1);
@@ -388,7 +377,6 @@
   in[6] = mm_reverse_epi16(in[6]);
   in[7] = mm_reverse_epi16(in[7]);
 }
-#endif  // CONFIG_EXT_TX
 
 void av1_iht8x16_128_add_sse2(const tran_low_t *input, uint8_t *dest,
                               int stride, const TxfmParam *txfm_param) {
@@ -417,10 +405,8 @@
   switch (tx_type) {
     case DCT_DCT:
     case ADST_DCT:
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case H_DCT:
-#endif
       aom_idct8_sse2(in);
       array_transpose_8x8(in, in);
       aom_idct8_sse2(in + 8);
@@ -428,20 +414,17 @@
       break;
     case DCT_ADST:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
     case ADST_FLIPADST:
     case FLIPADST_ADST:
     case H_ADST:
     case H_FLIPADST:
-#endif
       aom_iadst8_sse2(in);
       array_transpose_8x8(in, in);
       aom_iadst8_sse2(in + 8);
       array_transpose_8x8(in + 8, in + 8);
       break;
-#if CONFIG_EXT_TX
     case V_FLIPADST:
     case V_ADST:
     case V_DCT:
@@ -449,7 +432,6 @@
       iidtx8_sse2(in);
       iidtx8_sse2(in + 8);
       break;
-#endif
     default: assert(0); break;
   }
   scale_sqrt2_8x8(in);
@@ -459,50 +441,33 @@
   switch (tx_type) {
     case DCT_DCT:
     case DCT_ADST:
-#if CONFIG_EXT_TX
     case DCT_FLIPADST:
-    case V_DCT:
-#endif
-      idct16_8col(in);
-      break;
+    case V_DCT: idct16_8col(in); break;
     case ADST_DCT:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case FLIPADST_ADST:
     case ADST_FLIPADST:
     case FLIPADST_FLIPADST:
     case FLIPADST_DCT:
     case V_ADST:
-    case V_FLIPADST:
-#endif
-      iadst16_8col(in);
-      break;
-#if CONFIG_EXT_TX
+    case V_FLIPADST: iadst16_8col(in); break;
     case H_DCT:
     case H_ADST:
     case H_FLIPADST:
     case IDTX: idtx16_8col(in); break;
-#endif
     default: assert(0); break;
   }
 
   switch (tx_type) {
     case DCT_DCT:
     case ADST_DCT:
-#if CONFIG_EXT_TX
     case H_DCT:
-#endif
     case DCT_ADST:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case H_ADST:
     case V_ADST:
     case V_DCT:
-    case IDTX:
-#endif
-      write_buffer_8x16(dest, in, stride);
-      break;
-#if CONFIG_EXT_TX
+    case IDTX: write_buffer_8x16(dest, in, stride); break;
     case FLIPADST_DCT:
     case FLIPADST_ADST:
     case V_FLIPADST: write_buffer_8x16(dest + stride * 15, in, -stride); break;
@@ -518,7 +483,6 @@
       flip_buffer_lr_8x8(in + 8);
       write_buffer_8x16(dest + stride * 15, in, -stride);
       break;
-#endif
     default: assert(0); break;
   }
 }
@@ -586,30 +550,20 @@
   switch (tx_type) {
     case DCT_DCT:
     case ADST_DCT:
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
-    case H_DCT:
-#endif
-      idct16_8col(in);
-      break;
+    case H_DCT: idct16_8col(in); break;
     case DCT_ADST:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
     case ADST_FLIPADST:
     case FLIPADST_ADST:
     case H_ADST:
-    case H_FLIPADST:
-#endif
-      iadst16_8col(in);
-      break;
-#if CONFIG_EXT_TX
+    case H_FLIPADST: iadst16_8col(in); break;
     case V_FLIPADST:
     case V_ADST:
     case V_DCT:
     case IDTX: idtx16_8col(in); break;
-#endif
     default: assert(0); break;
   }
 
@@ -621,27 +575,22 @@
   switch (tx_type) {
     case DCT_DCT:
     case DCT_ADST:
-#if CONFIG_EXT_TX
     case DCT_FLIPADST:
     case V_DCT:
-#endif
       aom_idct8_sse2(in);
       aom_idct8_sse2(in + 8);
       break;
     case ADST_DCT:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case FLIPADST_ADST:
     case ADST_FLIPADST:
     case FLIPADST_FLIPADST:
     case FLIPADST_DCT:
     case V_ADST:
     case V_FLIPADST:
-#endif
       aom_iadst8_sse2(in);
       aom_iadst8_sse2(in + 8);
       break;
-#if CONFIG_EXT_TX
     case H_DCT:
     case H_ADST:
     case H_FLIPADST:
@@ -651,7 +600,6 @@
       iidtx8_sse2(in);
       iidtx8_sse2(in + 8);
       break;
-#endif
     default: assert(0); break;
   }
 
@@ -660,17 +608,14 @@
     case ADST_DCT:
     case DCT_ADST:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case H_DCT:
     case H_ADST:
     case V_ADST:
     case V_DCT:
     case IDTX:
-#endif
       write_buffer_8x8_round6(dest, in, stride);
       write_buffer_8x8_round6(dest + 8, in + 8, stride);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case FLIPADST_ADST:
     case V_FLIPADST:
@@ -691,7 +636,6 @@
       write_buffer_8x8_round6(dest + stride * 7, in + 8, -stride);
       write_buffer_8x8_round6(dest + stride * 7 + 8, in, -stride);
       break;
-#endif
     default: assert(0); break;
   }
 }
@@ -731,15 +675,10 @@
   switch (tx_type) {
     case DCT_DCT:
     case ADST_DCT:
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
-    case H_DCT:
-#endif
-      aom_idct8_sse2(in);
-      break;
+    case H_DCT: aom_idct8_sse2(in); break;
     case DCT_ADST:
     case ADST_ADST: aom_iadst8_sse2(in); break;
-#if CONFIG_EXT_TX
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
     case ADST_FLIPADST:
@@ -749,8 +688,9 @@
     case V_FLIPADST:
     case V_ADST:
     case V_DCT:
-    case IDTX: iidtx8_sse2(in); array_transpose_8x8(in, in);
-#endif
+    case IDTX:
+      iidtx8_sse2(in);
+      array_transpose_8x8(in, in);
       break;
     default: assert(0); break;
   }
@@ -769,27 +709,22 @@
   switch (tx_type) {
     case DCT_DCT:
     case DCT_ADST:
-#if CONFIG_EXT_TX
     case DCT_FLIPADST:
     case V_DCT:
-#endif
       aom_idct4_sse2(in + 4);
       aom_idct4_sse2(in + 6);
       break;
     case ADST_DCT:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case FLIPADST_ADST:
     case ADST_FLIPADST:
     case FLIPADST_FLIPADST:
     case FLIPADST_DCT:
     case V_ADST:
     case V_FLIPADST:
-#endif
       aom_iadst4_sse2(in + 4);
       aom_iadst4_sse2(in + 6);
       break;
-#if CONFIG_EXT_TX
     case H_DCT:
     case H_ADST:
     case H_FLIPADST:
@@ -799,7 +734,6 @@
       iidtx4_sse2(in + 6);
       array_transpose_4x4(in + 6);
       break;
-#endif
     default: assert(0); break;
   }
 
@@ -814,7 +748,6 @@
     case ADST_DCT:
     case DCT_ADST:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case H_DCT:
     case H_ADST:
     case V_ADST:
@@ -837,7 +770,6 @@
       in[2] = mm_reverse_epi16(in[2]);
       in[3] = mm_reverse_epi16(in[3]);
       FLIPUD_PTR(dest, stride, 4);
-#endif
       break;
     default: assert(0); break;
   }
@@ -920,27 +852,22 @@
   switch (tx_type) {
     case DCT_DCT:
     case ADST_DCT:
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case H_DCT:
-#endif
       aom_idct4_sse2(in + 4);
       aom_idct4_sse2(in + 6);
       break;
     case DCT_ADST:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
     case ADST_FLIPADST:
     case FLIPADST_ADST:
     case H_ADST:
     case H_FLIPADST:
-#endif
       aom_iadst4_sse2(in + 4);
       aom_iadst4_sse2(in + 6);
       break;
-#if CONFIG_EXT_TX
     case V_FLIPADST:
     case V_ADST:
     case V_DCT:
@@ -950,7 +877,6 @@
       iidtx4_sse2(in + 6);
       array_transpose_4x4(in + 6);
       break;
-#endif
     default: assert(0); break;
   }
 
@@ -966,25 +892,16 @@
   switch (tx_type) {
     case DCT_DCT:
     case DCT_ADST:
-#if CONFIG_EXT_TX
     case DCT_FLIPADST:
-    case V_DCT:
-#endif
-      aom_idct8_sse2(in);
-      break;
+    case V_DCT: aom_idct8_sse2(in); break;
     case ADST_DCT:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case FLIPADST_ADST:
     case ADST_FLIPADST:
     case FLIPADST_FLIPADST:
     case FLIPADST_DCT:
     case V_ADST:
-    case V_FLIPADST:
-#endif
-      aom_iadst8_sse2(in);
-      break;
-#if CONFIG_EXT_TX
+    case V_FLIPADST: aom_iadst8_sse2(in); break;
     case H_DCT:
     case H_ADST:
     case H_FLIPADST:
@@ -992,7 +909,6 @@
       iidtx8_sse2(in);
       array_transpose_8x8(in, in);
       break;
-#endif
     default: assert(0); break;
   }
 
@@ -1001,15 +917,11 @@
     case ADST_DCT:
     case DCT_ADST:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case H_DCT:
     case H_ADST:
     case V_ADST:
     case V_DCT:
-    case IDTX:
-#endif
-      break;
-#if CONFIG_EXT_TX
+    case IDTX: break;
     case FLIPADST_DCT:
     case FLIPADST_ADST:
     case V_FLIPADST: FLIPUD_PTR(dest, stride, 8); break;
@@ -1036,7 +948,6 @@
       in[7] = _mm_shufflelo_epi16(in[7], 0x1b);
       FLIPUD_PTR(dest, stride, 8);
       break;
-#endif
     default: assert(0); break;
   }
   in[0] = _mm_unpacklo_epi64(in[0], in[1]);
@@ -1087,7 +998,6 @@
   aom_idct16_sse2(bl, br);  // Includes a transposition
 }
 
-#if CONFIG_EXT_TX
 static INLINE void iidtx32_16col(__m128i *tl, __m128i *tr, __m128i *bl,
                                  __m128i *br) {
   int i;
@@ -1100,7 +1010,6 @@
     br[i] = _mm_slli_epi16(br[i], 2);
   }
 }
-#endif  // CONFIG_EXT_TX
 
 static INLINE void write_buffer_16x32_round6(uint8_t *dest, __m128i *intl,
                                              __m128i *intr, __m128i *inbl,
@@ -1142,27 +1051,22 @@
   switch (tx_type) {
     case DCT_DCT:
     case ADST_DCT:
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case H_DCT:
-#endif
       aom_idct16_sse2(intl, intr);
       aom_idct16_sse2(inbl, inbr);
       break;
     case DCT_ADST:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
     case ADST_FLIPADST:
     case FLIPADST_ADST:
     case H_ADST:
     case H_FLIPADST:
-#endif
       aom_iadst16_sse2(intl, intr);
       aom_iadst16_sse2(inbl, inbr);
       break;
-#if CONFIG_EXT_TX
     case V_FLIPADST:
     case V_ADST:
     case V_DCT:
@@ -1170,7 +1074,6 @@
       iidtx16_sse2(intl, intr);
       iidtx16_sse2(inbl, inbr);
       break;
-#endif
     default: assert(0); break;
   }
 
@@ -1183,30 +1086,20 @@
   switch (tx_type) {
     case DCT_DCT:
     case DCT_ADST:
-#if CONFIG_EXT_TX
     case DCT_FLIPADST:
-    case V_DCT:
-#endif
-      idct32_16col(intl, intr, inbl, inbr);
-      break;
+    case V_DCT: idct32_16col(intl, intr, inbl, inbr); break;
     case ADST_DCT:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case FLIPADST_ADST:
     case ADST_FLIPADST:
     case FLIPADST_FLIPADST:
     case FLIPADST_DCT:
     case V_ADST:
-    case V_FLIPADST:
-#endif
-      ihalfright32_16col(intl, intr, inbl, inbr);
-      break;
-#if CONFIG_EXT_TX
+    case V_FLIPADST: ihalfright32_16col(intl, intr, inbl, inbr); break;
     case H_DCT:
     case H_ADST:
     case H_FLIPADST:
     case IDTX: iidtx32_16col(intl, intr, inbl, inbr); break;
-#endif
     default: assert(0); break;
   }
 
@@ -1215,15 +1108,11 @@
     case ADST_DCT:
     case DCT_ADST:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case H_DCT:
     case H_ADST:
     case V_ADST:
     case V_DCT:
-    case IDTX:
-#endif
-      break;
-#if CONFIG_EXT_TX
+    case IDTX: break;
     case FLIPADST_DCT:
     case FLIPADST_ADST:
     case V_FLIPADST: FLIPUD_PTR(dest, stride, 32); break;
@@ -1250,7 +1139,6 @@
       }
       FLIPUD_PTR(dest, stride, 32);
       break;
-#endif
     default: assert(0); break;
   }
   write_buffer_16x32_round6(dest, intl, intr, inbl, inbr, stride);
@@ -1296,30 +1184,20 @@
   switch (tx_type) {
     case DCT_DCT:
     case ADST_DCT:
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
-    case H_DCT:
-#endif
-      idct32_16col(in0, in1, in2, in3);
-      break;
+    case H_DCT: idct32_16col(in0, in1, in2, in3); break;
     case DCT_ADST:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
     case ADST_FLIPADST:
     case FLIPADST_ADST:
     case H_ADST:
-    case H_FLIPADST:
-#endif
-      ihalfright32_16col(in0, in1, in2, in3);
-      break;
-#if CONFIG_EXT_TX
+    case H_FLIPADST: ihalfright32_16col(in0, in1, in2, in3); break;
     case V_FLIPADST:
     case V_ADST:
     case V_DCT:
     case IDTX: iidtx32_16col(in0, in1, in2, in3); break;
-#endif
     default: assert(0); break;
   }
 
@@ -1332,27 +1210,22 @@
   switch (tx_type) {
     case DCT_DCT:
     case DCT_ADST:
-#if CONFIG_EXT_TX
     case DCT_FLIPADST:
     case V_DCT:
-#endif
       aom_idct16_sse2(in0, in1);
       aom_idct16_sse2(in2, in3);
       break;
     case ADST_DCT:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case FLIPADST_ADST:
     case ADST_FLIPADST:
     case FLIPADST_FLIPADST:
     case FLIPADST_DCT:
     case V_ADST:
     case V_FLIPADST:
-#endif
       aom_iadst16_sse2(in0, in1);
       aom_iadst16_sse2(in2, in3);
       break;
-#if CONFIG_EXT_TX
     case H_DCT:
     case H_ADST:
     case H_FLIPADST:
@@ -1360,7 +1233,6 @@
       iidtx16_sse2(in0, in1);
       iidtx16_sse2(in2, in3);
       break;
-#endif
     default: assert(0); break;
   }
 
@@ -1369,15 +1241,11 @@
     case ADST_DCT:
     case DCT_ADST:
     case ADST_ADST:
-#if CONFIG_EXT_TX
     case H_DCT:
     case H_ADST:
     case V_ADST:
     case V_DCT:
-    case IDTX:
-#endif
-      break;
-#if CONFIG_EXT_TX
+    case IDTX: break;
     case FLIPADST_DCT:
     case FLIPADST_ADST:
     case V_FLIPADST: FLIPUD_PTR(dest, stride, 16); break;
@@ -1404,7 +1272,6 @@
       }
       FLIPUD_PTR(dest, stride, 16);
       break;
-#endif
     default: assert(0); break;
   }
   write_buffer_32x16_round6(dest, in0, in1, in2, in3, stride);
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 1d79c80..36aa0ae 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -248,10 +248,7 @@
 #if CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
                               xd->mrc_mask,
 #endif  // CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
-#if CONFIG_EXT_TX
-                              plane,
-#endif  // CONFIG_EXT_TX
-                              tx_type, tx_size, dst, stride, eob);
+                              plane, tx_type, tx_size, dst, stride, eob);
   memset(dqcoeff, 0, (scan_line + 1) * sizeof(dqcoeff[0]));
 }
 
@@ -3338,9 +3335,7 @@
   if (cm->reference_mode != SINGLE_REFERENCE) setup_compound_reference_mode(cm);
   read_compound_tools(cm, rb);
 
-#if CONFIG_EXT_TX
   cm->reduced_tx_set_used = aom_rb_read_bit(rb);
-#endif  // CONFIG_EXT_TX
 
 #if CONFIG_ADAPT_SCAN
   cm->use_adapt_scan = aom_rb_read_bit(rb);
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index b38f99f..c63caa7 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -522,12 +522,8 @@
       return tx_size_from_tx_mode(bsize, tx_mode, is_inter);
     }
   } else {
-#if CONFIG_EXT_TX
     assert(IMPLIES(tx_mode == ONLY_4X4, bsize == BLOCK_4X4));
     return max_txsize_rect_lookup[bsize];
-#else
-    return TX_4X4;
-#endif  // CONFIG_EXT_TX
   }
 }
 
@@ -969,7 +965,6 @@
 #endif
 
   if (!FIXED_TX_TYPE) {
-#if CONFIG_EXT_TX
     const TX_SIZE square_tx_size = txsize_sqr_map[tx_size];
     if (get_ext_tx_types(tx_size, mbmi->sb_type, inter_block,
                          cm->reduced_tx_set_used) > 1 &&
@@ -1073,35 +1068,6 @@
     } else {
       *tx_type = DCT_DCT;
     }
-#else  // CONFIG_EXT_TX
-
-    if (tx_size < TX_32X32 &&
-        ((!cm->seg.enabled && cm->base_qindex > 0) ||
-         (cm->seg.enabled && xd->qindex[mbmi->segment_id] > 0)) &&
-        !mbmi->skip &&
-        !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
-#if CONFIG_ENTROPY_STATS
-      FRAME_COUNTS *counts = xd->counts;
-#endif  // CONFIG_ENTROPY_STATS
-      if (inter_block) {
-        *tx_type = av1_ext_tx_inv[aom_read_symbol(
-            r, ec_ctx->inter_ext_tx_cdf[tx_size], TX_TYPES, ACCT_STR)];
-#if CONFIG_ENTROPY_STATS
-        if (counts) ++counts->inter_ext_tx[tx_size][*tx_type];
-#endif  // CONFIG_ENTROPY_STATS
-      } else {
-        const TX_TYPE tx_type_nom = intra_mode_to_tx_type_context[mbmi->mode];
-        *tx_type = av1_ext_tx_inv[aom_read_symbol(
-            r, ec_ctx->intra_ext_tx_cdf[tx_size][tx_type_nom], TX_TYPES,
-            ACCT_STR)];
-#if CONFIG_ENTROPY_STATS
-        if (counts) ++counts->intra_ext_tx[tx_size][tx_type_nom][*tx_type];
-#endif  // CONFIG_ENTROPY_STATS
-      }
-    } else {
-      *tx_type = DCT_DCT;
-    }
-#endif  // CONFIG_EXT_TX
   }
 #if FIXED_TX_TYPE
   assert(mbmi->tx_type == DCT_DCT);
@@ -1183,9 +1149,9 @@
     if (dv_ref.as_int == 0) av1_find_ref_dv(&dv_ref, mi_row, mi_col);
     xd->corrupted |=
         !assign_dv(cm, xd, &mbmi->mv[0], &dv_ref, mi_row, mi_col, bsize, r);
-#if CONFIG_EXT_TX && !CONFIG_TXK_SEL
+#if !CONFIG_TXK_SEL
     av1_read_tx_type(cm, xd, r);
-#endif  // CONFIG_EXT_TX && !CONFIG_TXK_SEL
+#endif  // !CONFIG_TXK_SEL
   }
 }
 #endif  // CONFIG_INTRABC
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 4e1603a..ebb8011 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -328,9 +328,7 @@
                                          : intra_tx_size_cat_lookup[bsize];
     const TX_SIZE coded_tx_size = txsize_sqr_up_map[tx_size];
     const int depth = tx_size_to_depth(coded_tx_size);
-#if CONFIG_EXT_TX
     assert(IMPLIES(is_rect_tx(tx_size), is_rect_tx_allowed(xd, mbmi)));
-#endif  // CONFIG_EXT_TX
 
     aom_write_symbol(w, depth, ec_ctx->tx_size_cdf[tx_size_cat][tx_size_ctx],
                      tx_size_cat + 2);
@@ -1316,7 +1314,6 @@
 #endif
 
   if (!FIXED_TX_TYPE) {
-#if CONFIG_EXT_TX
     const TX_SIZE square_tx_size = txsize_sqr_map[tx_size];
     const BLOCK_SIZE bsize = mbmi->sb_type;
     if (get_ext_tx_types(tx_size, bsize, is_inter, cm->reduced_tx_set_used) >
@@ -1395,24 +1392,6 @@
       }
 #endif  // CONFIG_LGT_FROM_PRED
     }
-#else   // CONFIG_EXT_TX
-    if (tx_size < TX_32X32 &&
-        ((!cm->seg.enabled && cm->base_qindex > 0) ||
-         (cm->seg.enabled && xd->qindex[mbmi->segment_id] > 0)) &&
-        !mbmi->skip &&
-        !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
-      if (is_inter) {
-        aom_write_symbol(w, av1_ext_tx_ind[tx_type],
-                         ec_ctx->inter_ext_tx_cdf[tx_size], TX_TYPES);
-      } else {
-        aom_write_symbol(
-            w, av1_ext_tx_ind[tx_type],
-            ec_ctx->intra_ext_tx_cdf[tx_size]
-                                    [intra_mode_to_tx_type_context[mbmi->mode]],
-            TX_TYPES);
-      }
-    }
-#endif  // CONFIG_EXT_TX
   }
 }
 
@@ -1787,9 +1766,9 @@
     }
     int_mv dv_ref = mbmi_ext->ref_mvs[INTRA_FRAME][0];
     av1_encode_dv(w, &mbmi->mv[0].as_mv, &dv_ref.as_mv, &ec_ctx->ndvc);
-#if CONFIG_EXT_TX && !CONFIG_TXK_SEL
+#if !CONFIG_TXK_SEL
     av1_write_tx_type(cm, xd, w);
-#endif  // CONFIG_EXT_TX && !CONFIG_TXK_SEL
+#endif  // !CONFIG_TXK_SEL
   }
 }
 #endif  // CONFIG_INTRABC
@@ -4145,9 +4124,7 @@
   }
   write_compound_tools(cm, wb);
 
-#if CONFIG_EXT_TX
   aom_wb_write_bit(wb, cm->reduced_tx_set_used);
-#endif  // CONFIG_EXT_TX
 
 #if CONFIG_ADAPT_SCAN
   aom_wb_write_bit(wb, cm->use_adapt_scan);
@@ -4496,9 +4473,7 @@
   }
   write_compound_tools(cm, wb);
 
-#if CONFIG_EXT_TX
   aom_wb_write_bit(wb, cm->reduced_tx_set_used);
-#endif  // CONFIG_EXT_TX
 
   if (!frame_is_intra_only(cm)) write_global_motion(cpi, wb);
 
diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index fea97c5..169038c 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -264,7 +264,6 @@
   int quarter_tx_size_cost[2];
 #endif
   int txfm_partition_cost[TXFM_PARTITION_CONTEXTS][2];
-#if CONFIG_EXT_TX
 #if CONFIG_LGT_FROM_PRED
   int intra_lgt_cost[LGT_SIZES][INTRA_MODES][2];
   int inter_lgt_cost[LGT_SIZES][2];
@@ -272,10 +271,6 @@
   int inter_tx_type_costs[EXT_TX_SETS_INTER][EXT_TX_SIZES][TX_TYPES];
   int intra_tx_type_costs[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES]
                          [TX_TYPES];
-#else
-  int intra_tx_type_costs[EXT_TX_SIZES][TX_TYPES][TX_TYPES];
-  int inter_tx_type_costs[EXT_TX_SIZES][TX_TYPES];
-#endif  // CONFIG_EXT_TX
 #if CONFIG_EXT_INTRA && CONFIG_EXT_INTRA_MOD
   int angle_delta_cost[DIRECTIONAL_MODES][2 * MAX_ANGLE_DELTA + 1];
 #endif  // CONFIG_EXT_INTRA && CONFIG_EXT_INTRA_MOD
diff --git a/av1/encoder/dct.c b/av1/encoder/dct.c
index 7131cb4..e6bcac4 100644
--- a/av1/encoder/dct.c
+++ b/av1/encoder/dct.c
@@ -1249,7 +1249,6 @@
 }
 #endif  // CONFIG_LGT_FROM_PRED
 
-#if CONFIG_EXT_TX
 // TODO(sarahparker) these functions will be removed once the highbitdepth
 // codepath works properly for rectangular transforms. They have almost
 // identical versions in av1_fwd_txfm1d.c, but those are currently only
@@ -1378,7 +1377,6 @@
     default: assert(0); break;
   }
 }
-#endif  // CONFIG_EXT_TX
 
 void av1_fht4x4_c(const int16_t *input, tran_low_t *output, int stride,
                   TxfmParam *txfm_param) {
@@ -1402,7 +1400,6 @@
       { daala_fdst4, daala_fdct4 },  // ADST_DCT
       { daala_fdct4, daala_fdst4 },  // DCT_ADST
       { daala_fdst4, daala_fdst4 },  // ADST_ADST
-#if CONFIG_EXT_TX
       { daala_fdst4, daala_fdct4 },  // FLIPADST_DCT
       { daala_fdct4, daala_fdst4 },  // DCT_FLIPADST
       { daala_fdst4, daala_fdst4 },  // FLIPADST_FLIPADST
@@ -1415,13 +1412,11 @@
       { daala_idtx4, daala_fdst4 },  // H_ADST
       { daala_fdst4, daala_idtx4 },  // V_FLIPADST
       { daala_idtx4, daala_fdst4 },  // H_FLIPADST
-#endif
 #else
       { fdct4, fdct4 },    // DCT_DCT
       { fadst4, fdct4 },   // ADST_DCT
       { fdct4, fadst4 },   // DCT_ADST
       { fadst4, fadst4 },  // ADST_ADST
-#if CONFIG_EXT_TX
       { fadst4, fdct4 },   // FLIPADST_DCT
       { fdct4, fadst4 },   // DCT_FLIPADST
       { fadst4, fadst4 },  // FLIPADST_FLIPADST
@@ -1435,17 +1430,14 @@
       { fadst4, fidtx4 },  // V_FLIPADST
       { fidtx4, fadst4 },  // H_FLIPADST
 #endif
-#endif
     };
     const transform_2d ht = FHT[tx_type];
     tran_low_t out[4 * 4];
     int i, j;
     tran_low_t temp_in[4], temp_out[4];
 
-#if CONFIG_EXT_TX
     int16_t flipped_input[4 * 4];
     maybe_flip_input(&input, &stride, 4, 4, flipped_input, tx_type);
-#endif
 
 #if CONFIG_LGT
     // Choose LGT adaptive to the prediction. We may apply different LGTs for
@@ -1507,7 +1499,6 @@
     { daala_fdst8, daala_fdct4 },  // ADST_DCT
     { daala_fdct8, daala_fdst4 },  // DCT_ADST
     { daala_fdst8, daala_fdst4 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { daala_fdst8, daala_fdct4 },  // FLIPADST_DCT
     { daala_fdct8, daala_fdst4 },  // DCT_FLIPADST
     { daala_fdst8, daala_fdst4 },  // FLIPADST_FLIPADST
@@ -1520,13 +1511,11 @@
     { daala_idtx8, daala_fdst4 },  // H_ADST
     { daala_fdst8, daala_idtx4 },  // V_FLIPADST
     { daala_idtx8, daala_fdst4 },  // H_FLIPADST
-#endif
 #else
     { fdct8, fdct4 },    // DCT_DCT
     { fadst8, fdct4 },   // ADST_DCT
     { fdct8, fadst4 },   // DCT_ADST
     { fadst8, fadst4 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { fadst8, fdct4 },   // FLIPADST_DCT
     { fdct8, fadst4 },   // DCT_FLIPADST
     { fadst8, fadst4 },  // FLIPADST_FLIPADST
@@ -1540,7 +1529,6 @@
     { fadst8, fidtx4 },  // V_FLIPADST
     { fidtx8, fadst4 },  // H_FLIPADST
 #endif
-#endif
   };
   const transform_2d ht = FHT[tx_type];
   const int n = 4;
@@ -1548,10 +1536,8 @@
   tran_low_t out[8 * 4];
   tran_low_t temp_in[8], temp_out[8];
   int i, j;
-#if CONFIG_EXT_TX
   int16_t flipped_input[8 * 4];
   maybe_flip_input(&input, &stride, n2, n, flipped_input, tx_type);
-#endif
 
 #if CONFIG_LGT
   const tran_high_t *lgtmtx_col[1];
@@ -1630,7 +1616,6 @@
     { daala_fdst4, daala_fdct8 },  // ADST_DCT
     { daala_fdct4, daala_fdst8 },  // DCT_ADST
     { daala_fdst4, daala_fdst8 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { daala_fdst4, daala_fdct8 },  // FLIPADST_DCT
     { daala_fdct4, daala_fdst8 },  // DCT_FLIPADST
     { daala_fdst4, daala_fdst8 },  // FLIPADST_FLIPADST
@@ -1643,13 +1628,11 @@
     { daala_idtx4, daala_fdst8 },  // H_ADST
     { daala_fdst4, daala_idtx8 },  // V_FLIPADST
     { daala_idtx4, daala_fdst8 },  // H_FLIPADST
-#endif
 #else
     { fdct4, fdct8 },    // DCT_DCT
     { fadst4, fdct8 },   // ADST_DCT
     { fdct4, fadst8 },   // DCT_ADST
     { fadst4, fadst8 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { fadst4, fdct8 },   // FLIPADST_DCT
     { fdct4, fadst8 },   // DCT_FLIPADST
     { fadst4, fadst8 },  // FLIPADST_FLIPADST
@@ -1663,7 +1646,6 @@
     { fadst4, fidtx8 },  // V_FLIPADST
     { fidtx4, fadst8 },  // H_FLIPADST
 #endif
-#endif
   };
   const transform_2d ht = FHT[tx_type];
   const int n = 4;
@@ -1671,10 +1653,8 @@
   tran_low_t out[8 * 4];
   tran_low_t temp_in[8], temp_out[8];
   int i, j;
-#if CONFIG_EXT_TX
   int16_t flipped_input[8 * 4];
   maybe_flip_input(&input, &stride, n, n2, flipped_input, tx_type);
-#endif
 
 #if CONFIG_LGT
   const tran_high_t *lgtmtx_col[1];
@@ -1751,7 +1731,6 @@
     { fadst16, fdct4 },   // ADST_DCT
     { fdct16, fadst4 },   // DCT_ADST
     { fadst16, fadst4 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { fadst16, fdct4 },   // FLIPADST_DCT
     { fdct16, fadst4 },   // DCT_FLIPADST
     { fadst16, fadst4 },  // FLIPADST_FLIPADST
@@ -1764,7 +1743,6 @@
     { fidtx16, fadst4 },  // H_ADST
     { fadst16, fidtx4 },  // V_FLIPADST
     { fidtx16, fadst4 },  // H_FLIPADST
-#endif
   };
   const transform_2d ht = FHT[tx_type];
   const int n = 4;
@@ -1772,10 +1750,8 @@
   tran_low_t out[16 * 4];
   tran_low_t temp_in[16], temp_out[16];
   int i, j;
-#if CONFIG_EXT_TX
   int16_t flipped_input[16 * 4];
   maybe_flip_input(&input, &stride, n4, n, flipped_input, tx_type);
-#endif
 
 #if CONFIG_LGT
   const tran_high_t *lgtmtx_row[1];
@@ -1818,7 +1794,6 @@
     { fadst4, fdct16 },   // ADST_DCT
     { fdct4, fadst16 },   // DCT_ADST
     { fadst4, fadst16 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { fadst4, fdct16 },   // FLIPADST_DCT
     { fdct4, fadst16 },   // DCT_FLIPADST
     { fadst4, fadst16 },  // FLIPADST_FLIPADST
@@ -1831,7 +1806,6 @@
     { fidtx4, fadst16 },  // H_ADST
     { fadst4, fidtx16 },  // V_FLIPADST
     { fidtx4, fadst16 },  // H_FLIPADST
-#endif
   };
   const transform_2d ht = FHT[tx_type];
   const int n = 4;
@@ -1839,10 +1813,8 @@
   tran_low_t out[16 * 4];
   tran_low_t temp_in[16], temp_out[16];
   int i, j;
-#if CONFIG_EXT_TX
   int16_t flipped_input[16 * 4];
   maybe_flip_input(&input, &stride, n, n4, flipped_input, tx_type);
-#endif
 
 #if CONFIG_LGT
   const tran_high_t *lgtmtx_col[1];
@@ -1886,7 +1858,6 @@
     { daala_fdst16, daala_fdct8 },  // ADST_DCT
     { daala_fdct16, daala_fdst8 },  // DCT_ADST
     { daala_fdst16, daala_fdst8 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { daala_fdst16, daala_fdct8 },  // FLIPADST_DCT
     { daala_fdct16, daala_fdst8 },  // DCT_FLIPADST
     { daala_fdst16, daala_fdst8 },  // FLIPADST_FLIPADST
@@ -1899,13 +1870,11 @@
     { daala_idtx16, daala_fdst8 },  // H_ADST
     { daala_fdst16, daala_idtx8 },  // V_FLIPADST
     { daala_idtx16, daala_fdst8 },  // H_FLIPADST
-#endif
 #else
     { fdct16, fdct8 },    // DCT_DCT
     { fadst16, fdct8 },   // ADST_DCT
     { fdct16, fadst8 },   // DCT_ADST
     { fadst16, fadst8 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { fadst16, fdct8 },   // FLIPADST_DCT
     { fdct16, fadst8 },   // DCT_FLIPADST
     { fadst16, fadst8 },  // FLIPADST_FLIPADST
@@ -1919,7 +1888,6 @@
     { fadst16, fidtx8 },  // V_FLIPADST
     { fidtx16, fadst8 },  // H_FLIPADST
 #endif
-#endif
   };
   const transform_2d ht = FHT[tx_type];
   const int n = 8;
@@ -1927,10 +1895,8 @@
   tran_low_t out[16 * 8];
   tran_low_t temp_in[16], temp_out[16];
   int i, j;
-#if CONFIG_EXT_TX
   int16_t flipped_input[16 * 8];
   maybe_flip_input(&input, &stride, n2, n, flipped_input, tx_type);
-#endif
 
 #if CONFIG_LGT
   const tran_high_t *lgtmtx_row[1];
@@ -2015,7 +1981,6 @@
     { daala_fdst8, daala_fdct16 },  // ADST_DCT
     { daala_fdct8, daala_fdst16 },  // DCT_ADST
     { daala_fdst8, daala_fdst16 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { daala_fdst8, daala_fdct16 },  // FLIPADST_DCT
     { daala_fdct8, daala_fdst16 },  // DCT_FLIPADST
     { daala_fdst8, daala_fdst16 },  // FLIPADST_FLIPADST
@@ -2028,13 +1993,11 @@
     { daala_idtx8, daala_fdst16 },  // H_ADST
     { daala_fdst8, daala_idtx16 },  // V_FLIPADST
     { daala_idtx8, daala_fdst16 },  // H_FLIPADST
-#endif
 #else
     { fdct8, fdct16 },    // DCT_DCT
     { fadst8, fdct16 },   // ADST_DCT
     { fdct8, fadst16 },   // DCT_ADST
     { fadst8, fadst16 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { fadst8, fdct16 },   // FLIPADST_DCT
     { fdct8, fadst16 },   // DCT_FLIPADST
     { fadst8, fadst16 },  // FLIPADST_FLIPADST
@@ -2048,7 +2011,6 @@
     { fadst8, fidtx16 },  // V_FLIPADST
     { fidtx8, fadst16 },  // H_FLIPADST
 #endif
-#endif
   };
   const transform_2d ht = FHT[tx_type];
   const int n = 8;
@@ -2056,10 +2018,8 @@
   tran_low_t out[16 * 8];
   tran_low_t temp_in[16], temp_out[16];
   int i, j;
-#if CONFIG_EXT_TX
   int16_t flipped_input[16 * 8];
   maybe_flip_input(&input, &stride, n, n2, flipped_input, tx_type);
-#endif
 
 #if CONFIG_LGT
   const tran_high_t *lgtmtx_col[1];
@@ -2143,7 +2103,6 @@
     { fhalfright32, fdct8 },   // ADST_DCT
     { fdct32, fadst8 },        // DCT_ADST
     { fhalfright32, fadst8 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { fhalfright32, fdct8 },   // FLIPADST_DCT
     { fdct32, fadst8 },        // DCT_FLIPADST
     { fhalfright32, fadst8 },  // FLIPADST_FLIPADST
@@ -2156,7 +2115,6 @@
     { fidtx32, fadst8 },       // H_ADST
     { fhalfright32, fidtx8 },  // V_FLIPADST
     { fidtx32, fadst8 },       // H_FLIPADST
-#endif
   };
   const transform_2d ht = FHT[tx_type];
   const int n = 8;
@@ -2164,10 +2122,8 @@
   tran_low_t out[32 * 8];
   tran_low_t temp_in[32], temp_out[32];
   int i, j;
-#if CONFIG_EXT_TX
   int16_t flipped_input[32 * 8];
   maybe_flip_input(&input, &stride, n4, n, flipped_input, tx_type);
-#endif
 
 #if CONFIG_LGT
   const tran_high_t *lgtmtx_row[1];
@@ -2210,7 +2166,6 @@
     { fadst8, fdct32 },        // ADST_DCT
     { fdct8, fhalfright32 },   // DCT_ADST
     { fadst8, fhalfright32 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { fadst8, fdct32 },        // FLIPADST_DCT
     { fdct8, fhalfright32 },   // DCT_FLIPADST
     { fadst8, fhalfright32 },  // FLIPADST_FLIPADST
@@ -2223,7 +2178,6 @@
     { fidtx8, fhalfright32 },  // H_ADST
     { fadst8, fidtx32 },       // V_FLIPADST
     { fidtx8, fhalfright32 },  // H_FLIPADST
-#endif
   };
   const transform_2d ht = FHT[tx_type];
   const int n = 8;
@@ -2231,10 +2185,8 @@
   tran_low_t out[32 * 8];
   tran_low_t temp_in[32], temp_out[32];
   int i, j;
-#if CONFIG_EXT_TX
   int16_t flipped_input[32 * 8];
   maybe_flip_input(&input, &stride, n, n4, flipped_input, tx_type);
-#endif
 
 #if CONFIG_LGT
   const tran_high_t *lgtmtx_col[1];
@@ -2278,7 +2230,6 @@
     { daala_fdst32, daala_fdct16 },  // ADST_DCT
     { daala_fdct32, daala_fdst16 },  // DCT_ADST
     { daala_fdst32, daala_fdst16 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { daala_fdst32, daala_fdct16 },  // FLIPADST_DCT
     { daala_fdct32, daala_fdst16 },  // DCT_FLIPADST
     { daala_fdst32, daala_fdst16 },  // FLIPADST_FLIPADST
@@ -2291,13 +2242,11 @@
     { daala_idtx32, daala_fdst16 },  // H_ADST
     { daala_fdst32, daala_idtx16 },  // V_FLIPADST
     { daala_idtx32, daala_fdst16 },  // H_FLIPADST
-#endif
 #else
     { fdct32, fdct16 },         // DCT_DCT
     { fhalfright32, fdct16 },   // ADST_DCT
     { fdct32, fadst16 },        // DCT_ADST
     { fhalfright32, fadst16 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { fhalfright32, fdct16 },   // FLIPADST_DCT
     { fdct32, fadst16 },        // DCT_FLIPADST
     { fhalfright32, fadst16 },  // FLIPADST_FLIPADST
@@ -2311,7 +2260,6 @@
     { fhalfright32, fidtx16 },  // V_FLIPADST
     { fidtx32, fadst16 },       // H_FLIPADST
 #endif
-#endif
   };
   const transform_2d ht = FHT[tx_type];
   const int n = 16;
@@ -2319,10 +2267,8 @@
   tran_low_t out[32 * 16];
   tran_low_t temp_in[32], temp_out[32];
   int i, j;
-#if CONFIG_EXT_TX
   int16_t flipped_input[32 * 16];
   maybe_flip_input(&input, &stride, n2, n, flipped_input, tx_type);
-#endif
 
   // Rows
   for (i = 0; i < n2; ++i) {
@@ -2368,7 +2314,6 @@
     { daala_fdst16, daala_fdct32 },  // ADST_DCT
     { daala_fdct16, daala_fdst32 },  // DCT_ADST
     { daala_fdst16, daala_fdst32 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { daala_fdst16, daala_fdct32 },  // FLIPADST_DCT
     { daala_fdct16, daala_fdst32 },  // DCT_FLIPADST
     { daala_fdst16, daala_fdst32 },  // FLIPADST_FLIPADST
@@ -2381,13 +2326,11 @@
     { daala_idtx16, daala_fdst32 },  // H_ADST
     { daala_fdst16, daala_idtx32 },  // V_FLIPADST
     { daala_idtx16, daala_fdst32 },  // H_FLIPADST
-#endif
 #else
     { fdct16, fdct32 },         // DCT_DCT
     { fadst16, fdct32 },        // ADST_DCT
     { fdct16, fhalfright32 },   // DCT_ADST
     { fadst16, fhalfright32 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { fadst16, fdct32 },        // FLIPADST_DCT
     { fdct16, fhalfright32 },   // DCT_FLIPADST
     { fadst16, fhalfright32 },  // FLIPADST_FLIPADST
@@ -2401,7 +2344,6 @@
     { fadst16, fidtx32 },       // V_FLIPADST
     { fidtx16, fhalfright32 },  // H_FLIPADST
 #endif
-#endif
   };
   const transform_2d ht = FHT[tx_type];
   const int n = 16;
@@ -2409,10 +2351,8 @@
   tran_low_t out[32 * 16];
   tran_low_t temp_in[32], temp_out[32];
   int i, j;
-#if CONFIG_EXT_TX
   int16_t flipped_input[32 * 16];
   maybe_flip_input(&input, &stride, n, n2, flipped_input, tx_type);
-#endif
 
   // Columns
   for (i = 0; i < n2; ++i) {
@@ -2465,7 +2405,6 @@
       { daala_fdst8, daala_fdct8 },  // ADST_DCT
       { daala_fdct8, daala_fdst8 },  // DCT_ADST
       { daala_fdst8, daala_fdst8 },  // ADST_ADST
-#if CONFIG_EXT_TX
       { daala_fdst8, daala_fdct8 },  // FLIPADST_DCT
       { daala_fdct8, daala_fdst8 },  // DCT_FLIPADST
       { daala_fdst8, daala_fdst8 },  // FLIPADST_FLIPADST
@@ -2478,13 +2417,11 @@
       { daala_idtx8, daala_fdst8 },  // H_ADST
       { daala_fdst8, daala_idtx8 },  // V_FLIPADST
       { daala_idtx8, daala_fdst8 },  // H_FLIPADST
-#endif
 #else
       { fdct8, fdct8 },    // DCT_DCT
       { fadst8, fdct8 },   // ADST_DCT
       { fdct8, fadst8 },   // DCT_ADST
       { fadst8, fadst8 },  // ADST_ADST
-#if CONFIG_EXT_TX
       { fadst8, fdct8 },   // FLIPADST_DCT
       { fdct8, fadst8 },   // DCT_FLIPADST
       { fadst8, fadst8 },  // FLIPADST_FLIPADST
@@ -2498,17 +2435,14 @@
       { fadst8, fidtx8 },  // V_FLIPADST
       { fidtx8, fadst8 },  // H_FLIPADST
 #endif
-#endif
     };
     const transform_2d ht = FHT[tx_type];
     tran_low_t out[64];
     int i, j;
     tran_low_t temp_in[8], temp_out[8];
 
-#if CONFIG_EXT_TX
     int16_t flipped_input[8 * 8];
     maybe_flip_input(&input, &stride, 8, 8, flipped_input, tx_type);
-#endif
 
 #if CONFIG_LGT
     const tran_high_t *lgtmtx_col[1];
@@ -2624,7 +2558,6 @@
     { daala_fdst16, daala_fdct16 },  // ADST_DCT
     { daala_fdct16, daala_fdst16 },  // DCT_ADST
     { daala_fdst16, daala_fdst16 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { daala_fdst16, daala_fdct16 },  // FLIPADST_DCT
     { daala_fdct16, daala_fdst16 },  // DCT_FLIPADST
     { daala_fdst16, daala_fdst16 },  // FLIPADST_FLIPADST
@@ -2637,13 +2570,11 @@
     { daala_idtx16, daala_fdst16 },  // H_ADST
     { daala_fdst16, daala_idtx16 },  // V_FLIPADST
     { daala_idtx16, daala_fdst16 },  // H_FLIPADST
-#endif
 #else
     { fdct16, fdct16 },    // DCT_DCT
     { fadst16, fdct16 },   // ADST_DCT
     { fdct16, fadst16 },   // DCT_ADST
     { fadst16, fadst16 },  // ADST_ADST
-#if CONFIG_EXT_TX
     { fadst16, fdct16 },   // FLIPADST_DCT
     { fdct16, fadst16 },   // DCT_FLIPADST
     { fadst16, fadst16 },  // FLIPADST_FLIPADST
@@ -2657,17 +2588,14 @@
     { fadst16, fidtx16 },  // V_FLIPADST
     { fidtx16, fadst16 },  // H_FLIPADST
 #endif
-#endif
   };
   const transform_2d ht = FHT[tx_type];
   tran_low_t out[256];
   int i, j;
   tran_low_t temp_in[16], temp_out[16];
 
-#if CONFIG_EXT_TX
   int16_t flipped_input[16 * 16];
   maybe_flip_input(&input, &stride, 16, 16, flipped_input, tx_type);
-#endif
 
   // Columns
   for (i = 0; i < 16; ++i) {
@@ -2716,7 +2644,6 @@
   static const transform_2d FHT[] = {
 #if CONFIG_DAALA_TX32
     { daala_fdct32, daala_fdct32 },  // DCT_DCT
-#if CONFIG_EXT_TX
     { daala_fdst32, daala_fdct32 },  // ADST_DCT
     { daala_fdct32, daala_fdst32 },  // DCT_ADST
     { daala_fdst32, daala_fdst32 },  // ADST_ADST
@@ -2732,10 +2659,8 @@
     { daala_idtx32, daala_fdst32 },  // H_ADST
     { daala_fdst32, daala_idtx32 },  // V_FLIPADST
     { daala_idtx32, daala_fdst32 },  // H_FLIPADST
-#endif
 #else
     { fdct32, fdct32 },              // DCT_DCT
-#if CONFIG_EXT_TX
     { fhalfright32, fdct32 },        // ADST_DCT
     { fdct32, fhalfright32 },        // DCT_ADST
     { fhalfright32, fhalfright32 },  // ADST_ADST
@@ -2752,7 +2677,6 @@
     { fhalfright32, fidtx32 },       // V_FLIPADST
     { fidtx32, fhalfright32 },       // H_FLIPADST
 #endif
-#endif
 #if CONFIG_MRC_TX
     { fdct32, fdct32 },  // MRC_TX
 #endif                   // CONFIG_MRC_TX
@@ -2762,10 +2686,8 @@
   int i, j;
   tran_low_t temp_in[32], temp_out[32];
 
-#if CONFIG_EXT_TX
   int16_t flipped_input[32 * 32];
   maybe_flip_input(&input, &stride, 32, 32, flipped_input, tx_type);
-#endif
 
 #if CONFIG_MRC_TX
   if (tx_type == MRC_DCT) {
@@ -2806,7 +2728,6 @@
 
 #if CONFIG_TX64X64
 #if !CONFIG_DAALA_TX64
-#if CONFIG_EXT_TX
 static void fidtx64(const tran_low_t *input, tran_low_t *output) {
   int i;
   for (i = 0; i < 64; ++i)
@@ -2827,7 +2748,6 @@
   fdct32(inputhalf, output);
   // Note overall scaling factor is 2 times unitary
 }
-#endif  // CONFIG_EXT_TX
 
 static void fdct64_col(const tran_low_t *input, tran_low_t *output) {
   int32_t in[64], out[64];
@@ -2858,7 +2778,6 @@
   static const transform_2d FHT[] = {
 #if CONFIG_DAALA_TX64
     { daala_fdct64, daala_fdct64 },  // DCT_DCT
-#if CONFIG_EXT_TX
     { daala_fdst64, daala_fdct64 },  // ADST_DCT
     { daala_fdct64, daala_fdst64 },  // DCT_ADST
     { daala_fdst64, daala_fdst64 },  // ADST_ADST
@@ -2874,10 +2793,8 @@
     { daala_idtx64, daala_fdst64 },  // H_ADST
     { daala_fdst64, daala_idtx64 },  // V_FLIPADST
     { daala_idtx64, daala_fdst64 },  // H_FLIPADST
-#endif                               // CONFIG_EXT_TX
 #else
     { fdct64_col, fdct64_row },      // DCT_DCT
-#if CONFIG_EXT_TX
     { fhalfright64, fdct64_row },    // ADST_DCT
     { fdct64_col, fhalfright64 },    // DCT_ADST
     { fhalfright64, fhalfright64 },  // ADST_ADST
@@ -2893,17 +2810,14 @@
     { fidtx64, fhalfright64 },       // H_ADST
     { fhalfright64, fidtx64 },       // V_FLIPADST
     { fidtx64, fhalfright64 },       // H_FLIPADST
-#endif  // CONFIG_EXT_TX
 #endif  // CONFIG_DAALA_TX64
   };
   const transform_2d ht = FHT[tx_type];
   tran_low_t out[4096];
   int i, j;
   tran_low_t temp_in[64], temp_out[64];
-#if CONFIG_EXT_TX
   int16_t flipped_input[64 * 64];
   maybe_flip_input(&input, &stride, 64, 64, flipped_input, tx_type);
-#endif
 
   // Columns
   for (i = 0; i < 64; ++i) {
@@ -2952,8 +2866,7 @@
   assert(tx_type == DCT_DCT);
 #endif
   static const transform_2d FHT[] = {
-    { fdct32, fdct64_row },  // DCT_DCT
-#if CONFIG_EXT_TX
+    { fdct32, fdct64_row },          // DCT_DCT
     { fhalfright32, fdct64_row },    // ADST_DCT
     { fdct32, fhalfright64 },        // DCT_ADST
     { fhalfright32, fhalfright64 },  // ADST_ADST
@@ -2969,7 +2882,6 @@
     { fidtx32, fhalfright64 },       // H_ADST
     { fhalfright32, fidtx64 },       // V_FLIPADST
     { fidtx32, fhalfright64 },       // H_FLIPADST
-#endif                               // CONFIG_EXT_TX
   };
   const transform_2d ht = FHT[tx_type];
   tran_low_t out[2048];
@@ -2977,10 +2889,8 @@
   tran_low_t temp_in[64], temp_out[64];
   const int n = 32;
   const int n2 = 64;
-#if CONFIG_EXT_TX
   int16_t flipped_input[32 * 64];
   maybe_flip_input(&input, &stride, n, n2, flipped_input, tx_type);
-#endif
 
   // Columns
   for (i = 0; i < n2; ++i) {
@@ -3016,8 +2926,7 @@
   assert(tx_type == DCT_DCT);
 #endif
   static const transform_2d FHT[] = {
-    { fdct64_row, fdct32 },  // DCT_DCT
-#if CONFIG_EXT_TX
+    { fdct64_row, fdct32 },          // DCT_DCT
     { fhalfright64, fdct32 },        // ADST_DCT
     { fdct64_row, fhalfright32 },    // DCT_ADST
     { fhalfright64, fhalfright32 },  // ADST_ADST
@@ -3033,7 +2942,6 @@
     { fidtx64, fhalfright32 },       // H_ADST
     { fhalfright64, fidtx32 },       // V_FLIPADST
     { fidtx64, fhalfright32 },       // H_FLIPADST
-#endif                               // CONFIG_EXT_TX
   };
   const transform_2d ht = FHT[tx_type];
   tran_low_t out[32 * 64];
@@ -3041,10 +2949,8 @@
   tran_low_t temp_in[64], temp_out[64];
   const int n = 32;
   const int n2 = 64;
-#if CONFIG_EXT_TX
   int16_t flipped_input[32 * 64];
   maybe_flip_input(&input, &stride, n2, n, flipped_input, tx_type);
-#endif
 
   // Rows
   for (i = 0; i < n2; ++i) {
@@ -3068,7 +2974,6 @@
 }
 #endif  // CONFIG_TX64X64
 
-#if CONFIG_EXT_TX
 // Forward identity transform.
 void av1_fwd_idtx_c(const int16_t *src_diff, tran_low_t *coeff, int stride,
                     int bsx, int bsy, TX_TYPE tx_type) {
@@ -3083,5 +2988,4 @@
     }
   }
 }
-#endif  // CONFIG_EXT_TX
 #endif  // !AV1_DCT_GTEST
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index fcf01259..15d0ac1 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -3994,11 +3994,9 @@
 
 void av1_encode_frame(AV1_COMP *cpi) {
   AV1_COMMON *const cm = &cpi->common;
-#if CONFIG_EXT_TX
   // Indicates whether or not to use a default reduced set for ext-tx
   // rather than the potential full set of 16 transforms
   cm->reduced_tx_set_used = 0;
-#endif  // CONFIG_EXT_TX
 #if CONFIG_ADAPT_SCAN
   cm->use_adapt_scan = 1;
   // TODO(angiebird): call av1_init_scan_order only when use_adapt_scan
@@ -4426,7 +4424,6 @@
   TX_TYPE tx_type =
       av1_get_tx_type(PLANE_TYPE_Y, xd, blk_row, blk_col, block, tx_size);
 #endif
-#if CONFIG_EXT_TX
   if (get_ext_tx_types(tx_size, bsize, is_inter, cm->reduced_tx_set_used) > 1 &&
       cm->base_qindex > 0 && !mbmi->skip &&
       !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
@@ -4510,31 +4507,6 @@
 #endif  // CONFIG_LGT_FROM_PRED
     }
   }
-#else
-  (void)bsize;
-  if (tx_size < TX_32X32 &&
-      ((!cm->seg.enabled && cm->base_qindex > 0) ||
-       (cm->seg.enabled && xd->qindex[mbmi->segment_id] > 0)) &&
-      !mbmi->skip &&
-      !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
-    if (is_inter) {
-#if CONFIG_ENTROPY_STATS
-      ++counts->inter_ext_tx[tx_size][tx_type];
-#endif  // CONFIG_ENTROPY_STATS
-      update_cdf(fc->inter_ext_tx_cdf[tx_size], av1_ext_tx_ind[tx_type],
-                 TX_TYPES);
-    } else {
-#if CONFIG_ENTROPY_STATS
-      ++counts->intra_ext_tx[tx_size][intra_mode_to_tx_type_context[mbmi->mode]]
-                            [tx_type];
-#endif  // CONFIG_ENTROPY_STATS
-      update_cdf(
-          fc->intra_ext_tx_cdf[tx_size]
-                              [intra_mode_to_tx_type_context[mbmi->mode]],
-          av1_ext_tx_ind[tx_type], TX_TYPES);
-    }
-  }
-#endif  // CONFIG_EXT_TX
 }
 
 static void encode_superblock(const AV1_COMP *const cpi, ThreadData *td,
@@ -4684,9 +4656,7 @@
 #endif
       }
 #endif
-#if CONFIG_EXT_TX
       assert(IMPLIES(is_rect_tx(tx_size), is_rect_tx_allowed(xd, mbmi)));
-#endif  // CONFIG_EXT_TX
     } else {
       int i, j;
       TX_SIZE intra_tx_size;
@@ -4698,16 +4668,10 @@
           intra_tx_size = tx_size_from_tx_mode(bsize, cm->tx_mode, 1);
         }
       } else {
-#if CONFIG_EXT_TX
         intra_tx_size = tx_size;
-#else
-        intra_tx_size = (bsize >= BLOCK_8X8) ? tx_size : TX_4X4;
-#endif  // CONFIG_EXT_TX
       }
-#if CONFIG_EXT_TX
       ++td->counts->tx_size_implied[max_txsize_lookup[bsize]]
                                    [txsize_sqr_up_map[tx_size]];
-#endif  // CONFIG_EXT_TX
 
       for (j = 0; j < mi_height; j++)
         for (i = 0; i < mi_width; i++)
diff --git a/av1/encoder/encodemb.c b/av1/encoder/encodemb.c
index 760337b..5e3f236 100644
--- a/av1/encoder/encodemb.c
+++ b/av1/encoder/encodemb.c
@@ -539,11 +539,9 @@
   txfm_param.tx_type = tx_type;
   txfm_param.tx_size = tx_size;
   txfm_param.lossless = xd->lossless[mbmi->segment_id];
-#if CONFIG_EXT_TX
   txfm_param.tx_set_type =
       get_ext_tx_set_type(txfm_param.tx_size, plane_bsize, is_inter_block(mbmi),
                           cm->reduced_tx_set_used);
-#endif  // CONFIG_EXT_TX
 #if CONFIG_MRC_TX || CONFIG_LGT
   txfm_param.is_inter = is_inter_block(mbmi);
 #endif
@@ -642,10 +640,7 @@
 #if CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
                                 mrc_mask,
 #endif  // CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
-#if CONFIG_EXT_TX
-                                plane,
-#endif  // CONFIG_EXT_TX
-                                tx_type, tx_size, dst, pd->dst.stride,
+                                plane, tx_type, tx_size, dst, pd->dst.stride,
                                 p->eobs[block]);
   }
 }
@@ -743,11 +738,9 @@
     txfm_param.tx_size = tx_size;
     txfm_param.eob = p->eobs[block];
     txfm_param.lossless = xd->lossless[xd->mi[0]->mbmi.segment_id];
-#if CONFIG_EXT_TX
     txfm_param.tx_set_type = get_ext_tx_set_type(
         txfm_param.tx_size, plane_bsize, is_inter_block(&xd->mi[0]->mbmi),
         cm->reduced_tx_set_used);
-#endif  // CONFIG_EXT_TX
 #if CONFIG_HIGHBITDEPTH
     if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
       av1_highbd_inv_txfm_add_4x4(dqcoeff, dst, pd->dst.stride, &txfm_param);
@@ -914,10 +907,7 @@
 #if CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
                               mrc_mask,
 #endif  // CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
-#if CONFIG_EXT_TX
-                              plane,
-#endif  // CONFIG_EXT_TX
-                              tx_type, tx_size, dst, dst_stride, *eob);
+                              plane, tx_type, tx_size, dst, dst_stride, *eob);
 
   if (*eob) *(args->skip) = 0;
 
diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c
index 177a660..e715a54 100644
--- a/av1/encoder/encodetxb.c
+++ b/av1/encoder/encodetxb.c
@@ -2195,13 +2195,11 @@
       continue;
     }
 
-#if CONFIG_EXT_TX
     const int is_inter = is_inter_block(mbmi);
     const TxSetType tx_set_type =
         get_ext_tx_set_type(get_min_tx_size(tx_size), mbmi->sb_type, is_inter,
                             cm->reduced_tx_set_used);
     if (!av1_ext_tx_used[tx_set_type][tx_type]) continue;
-#endif  // CONFIG_EXT_TX
 
     RD_STATS this_rd_stats;
     av1_invalid_rd_stats(&this_rd_stats);
diff --git a/av1/encoder/hybrid_fwd_txfm.c b/av1/encoder/hybrid_fwd_txfm.c
index 17c3533..f1bed84 100644
--- a/av1/encoder/hybrid_fwd_txfm.c
+++ b/av1/encoder/hybrid_fwd_txfm.c
@@ -119,31 +119,25 @@
 #if CONFIG_TX64X64
 static void fwd_txfm_64x64(const int16_t *src_diff, tran_low_t *coeff,
                            int diff_stride, TxfmParam *txfm_param) {
-#if CONFIG_EXT_TX
   if (txfm_param->tx_type == IDTX)
     av1_fwd_idtx_c(src_diff, coeff, diff_stride, 64, 64, txfm_param->tx_type);
   else
-#endif
     av1_fht64x64(src_diff, coeff, diff_stride, txfm_param);
 }
 
 static void fwd_txfm_32x64(const int16_t *src_diff, tran_low_t *coeff,
                            int diff_stride, TxfmParam *txfm_param) {
-#if CONFIG_EXT_TX
   if (txfm_param->tx_type == IDTX)
     av1_fwd_idtx_c(src_diff, coeff, diff_stride, 32, 64, txfm_param->tx_type);
   else
-#endif
     av1_fht32x64(src_diff, coeff, diff_stride, txfm_param);
 }
 
 static void fwd_txfm_64x32(const int16_t *src_diff, tran_low_t *coeff,
                            int diff_stride, TxfmParam *txfm_param) {
-#if CONFIG_EXT_TX
   if (txfm_param->tx_type == IDTX)
     av1_fwd_idtx_c(src_diff, coeff, diff_stride, 64, 32, txfm_param->tx_type);
   else
-#endif
     av1_fht64x32(src_diff, coeff, diff_stride, txfm_param);
 }
 #endif  // CONFIG_TX64X64
@@ -204,7 +198,6 @@
       // fallthrough intended
       av1_fwd_txfm2d_4x4(src_diff, dst_coeff, diff_stride, tx_type, bd);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
@@ -224,7 +217,6 @@
       // fallthrough intended
       av1_fwd_txfm2d_4x4_c(src_diff, dst_coeff, diff_stride, tx_type, bd);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0);
   }
 }
@@ -284,7 +276,6 @@
       // fallthrough intended
       av1_fwd_txfm2d_8x8(src_diff, dst_coeff, diff_stride, tx_type, bd);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
@@ -304,7 +295,6 @@
       // fallthrough intended
       av1_fwd_txfm2d_8x8_c(src_diff, dst_coeff, diff_stride, tx_type, bd);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0);
   }
 }
@@ -322,7 +312,6 @@
       // fallthrough intended
       av1_fwd_txfm2d_16x16(src_diff, dst_coeff, diff_stride, tx_type, bd);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
@@ -342,7 +331,6 @@
       // fallthrough intended
       av1_fwd_txfm2d_16x16_c(src_diff, dst_coeff, diff_stride, tx_type, bd);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0);
   }
 }
@@ -360,7 +348,6 @@
       // fallthrough intended
       av1_fwd_txfm2d_32x32(src_diff, dst_coeff, diff_stride, tx_type, bd);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
     case DCT_FLIPADST:
     case FLIPADST_FLIPADST:
@@ -380,7 +367,6 @@
       // fallthrough intended
       av1_fwd_txfm2d_32x32_c(src_diff, dst_coeff, diff_stride, tx_type, bd);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0);
   }
 }
@@ -395,7 +381,6 @@
     case DCT_DCT:
       av1_fwd_txfm2d_32x64_c(src_diff, dst_coeff, diff_stride, tx_type, bd);
       break;
-#if CONFIG_EXT_TX
     case ADST_DCT:
     case DCT_ADST:
     case ADST_ADST:
@@ -421,7 +406,6 @@
     case IDTX:
       av1_fwd_idtx_c(src_diff, dst_coeff, diff_stride, 32, 64, tx_type);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0); break;
   }
 }
@@ -435,7 +419,6 @@
     case DCT_DCT:
       av1_fwd_txfm2d_64x32_c(src_diff, dst_coeff, diff_stride, tx_type, bd);
       break;
-#if CONFIG_EXT_TX
     case ADST_DCT:
     case DCT_ADST:
     case ADST_ADST:
@@ -461,7 +444,6 @@
     case IDTX:
       av1_fwd_idtx_c(src_diff, dst_coeff, diff_stride, 64, 32, tx_type);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0); break;
   }
 }
@@ -474,7 +456,6 @@
     case DCT_DCT:
       av1_fwd_txfm2d_64x64(src_diff, dst_coeff, diff_stride, tx_type, bd);
       break;
-#if CONFIG_EXT_TX
     case ADST_DCT:
     case DCT_ADST:
     case ADST_ADST:
@@ -500,7 +481,6 @@
     case IDTX:
       av1_fwd_idtx_c(src_diff, dst_coeff, diff_stride, 64, 64, tx_type);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0); break;
   }
 }
@@ -508,9 +488,7 @@
 
 void av1_fwd_txfm(const int16_t *src_diff, tran_low_t *coeff, int diff_stride,
                   TxfmParam *txfm_param) {
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
-#endif  // CONFIG_EXT_TX
   const TX_SIZE tx_size = txfm_param->tx_size;
 #if CONFIG_LGT_FROM_PRED
   if (txfm_param->use_lgt) {
@@ -574,9 +552,7 @@
 
 void av1_highbd_fwd_txfm(const int16_t *src_diff, tran_low_t *coeff,
                          int diff_stride, TxfmParam *txfm_param) {
-#if CONFIG_EXT_TX
   assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
-#endif  // CONFIG_EXT_TX
   const TX_SIZE tx_size = txfm_param->tx_size;
   switch (tx_size) {
 #if CONFIG_TX64X64
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c
index 7dd4b89..dc6af9e 100644
--- a/av1/encoder/rd.c
+++ b/av1/encoder/rd.c
@@ -64,7 +64,6 @@
 #endif  // CONFIG_EXT_PARTITION
 };
 
-#if CONFIG_EXT_TX
 static const int use_intra_ext_tx_for_txsize[EXT_TX_SETS_INTRA][EXT_TX_SIZES] =
     {
       { 1, 1, 1, 1 },  // unused
@@ -83,7 +82,6 @@
       { 0, 0, 0, 1 },
 #endif  // CONFIG_MRC_TX
     };
-#endif  // CONFIG_EXT_TX
 
 void av1_fill_mode_rates(AV1_COMMON *const cm, MACROBLOCK *x,
                          FRAME_CONTEXT *fc) {
@@ -246,7 +244,6 @@
 #endif
   }
 
-#if CONFIG_EXT_TX
 #if CONFIG_LGT_FROM_PRED
   if (LGT_FROM_PRED_INTRA) {
     for (i = 0; i < LGT_SIZES; ++i) {
@@ -282,17 +279,6 @@
       }
     }
   }
-#else
-  for (i = TX_4X4; i < EXT_TX_SIZES; ++i) {
-    for (j = 0; j < TX_TYPES; ++j)
-      av1_cost_tokens_from_cdf(x->intra_tx_type_costs[i][j],
-                               fc->intra_ext_tx_cdf[i][j], av1_ext_tx_inv);
-  }
-  for (i = TX_4X4; i < EXT_TX_SIZES; ++i) {
-    av1_cost_tokens_from_cdf(x->inter_tx_type_costs[i], fc->inter_ext_tx_cdf[i],
-                             av1_ext_tx_inv);
-  }
-#endif  // CONFIG_EXT_TX
 #if CONFIG_EXT_INTRA && CONFIG_EXT_INTRA_MOD
   for (i = 0; i < DIRECTIONAL_MODES; ++i) {
     av1_cost_tokens_from_cdf(x->angle_delta_cost[i], fc->angle_delta_cdf[i],
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index a0ddd66..ba16d06 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -58,9 +58,7 @@
 #include "av1/encoder/rd.h"
 #include "av1/encoder/rdopt.h"
 #include "av1/encoder/tokenize.h"
-#if CONFIG_EXT_TX
 #include "av1/encoder/tx_prune_model_weights.h"
-#endif  // CONFIG_EXT_TX
 
 #if CONFIG_DUAL_FILTER
 #define DUAL_FILTER_SET_SIZE (SWITCHABLE_FILTERS * SWITCHABLE_FILTERS)
@@ -1039,7 +1037,6 @@
   return prune_bitmask;
 }
 
-#if CONFIG_EXT_TX
 static void get_horver_correlation(const int16_t *diff, int stride, int w,
                                    int h, double *hcorr, double *vcorr) {
   // Returns hor/ver correlation coefficient
@@ -1123,7 +1120,6 @@
 
   return prune;
 }
-#endif  // CONFIG_EXT_TX
 
 // Performance drop: 0.3%, Speed improvement: 5%
 static int prune_one_for_sby(const AV1_COMP *cpi, BLOCK_SIZE bsize,
@@ -1134,7 +1130,6 @@
                           pd->dst.stride);
 }
 
-#if CONFIG_EXT_TX
 // 1D Transforms used in inter set, this needs to be changed if
 // ext_tx_used_inter is changed
 static const int ext_tx_used_inter_1D[EXT_TX_SETS_INTER][TX_TYPES_1D] = {
@@ -1384,18 +1379,12 @@
 
   return prune_bitmask;
 }
-#endif  // CONFIG_EXT_TX
 
 static int prune_tx_types(const AV1_COMP *cpi, BLOCK_SIZE bsize, MACROBLOCK *x,
                           const MACROBLOCKD *const xd, int tx_set_type) {
-#if CONFIG_EXT_TX
   int tx_set = ext_tx_set_index[1][tx_set_type];
   assert(tx_set >= 0);
   const int *tx_set_1D = ext_tx_used_inter_1D[tx_set];
-#else
-  const int tx_set_1D[TX_TYPES_1D] = { 0 };
-  (void)tx_set_type;
-#endif  // CONFIG_EXT_TX
 
   switch (cpi->sf.tx_type_search.prune_mode) {
     case NO_PRUNE: return 0; break;
@@ -1403,7 +1392,6 @@
       if (!(tx_set_1D[FLIPADST_1D] & tx_set_1D[ADST_1D])) return 0;
       return prune_one_for_sby(cpi, bsize, x, xd);
       break;
-#if CONFIG_EXT_TX
     case PRUNE_TWO:
       if (!(tx_set_1D[FLIPADST_1D] & tx_set_1D[ADST_1D])) {
         if (!(tx_set_1D[DCT_1D] & tx_set_1D[IDTX_1D])) return 0;
@@ -1429,7 +1417,6 @@
       else
         return 0;
       break;
-#endif  // CONFIG_EXT_TX
   }
   assert(0);
   return 0;
@@ -1437,23 +1424,13 @@
 
 static int do_tx_type_search(TX_TYPE tx_type, int prune,
                              TX_TYPE_PRUNE_MODE mode) {
-// TODO(sarahparker) implement for non ext tx
-#if CONFIG_EXT_TX
+  // TODO(sarahparker) implement for non ext tx
   if (mode >= PRUNE_2D_ACCURATE) {
     return !((prune >> tx_type) & 1);
   } else {
     return !(((prune >> vtx_tab[tx_type]) & 1) |
              ((prune >> (htx_tab[tx_type] + 8)) & 1));
   }
-#else
-  // temporary to avoid compiler warnings
-  (void)vtx_tab;
-  (void)htx_tab;
-  (void)tx_type;
-  (void)prune;
-  (void)mode;
-  return 1;
-#endif  // CONFIG_EXT_TX
 }
 
 static void model_rd_from_sse(const AV1_COMP *const cpi,
@@ -1976,10 +1953,8 @@
 #if CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
                                     mrc_mask,
 #endif  // CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
-#if CONFIG_EXT_TX
-                                    plane,
-#endif  // CONFIG_EXT_TX
-                                    tx_type, tx_size, recon, MAX_TX_SIZE, eob);
+                                    plane, tx_type, tx_size, recon, MAX_TX_SIZE,
+                                    eob);
 
 #if CONFIG_DIST_8X8
         if (x->using_dist_8x8 && plane == 0 && (bsw < 8 || bsh < 8)) {
@@ -2349,7 +2324,6 @@
 
   const MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi;
   const int is_inter = is_inter_block(mbmi);
-#if CONFIG_EXT_TX
   if (get_ext_tx_types(tx_size, bsize, is_inter, cm->reduced_tx_set_used) > 1 &&
       !xd->lossless[xd->mi[0]->mbmi.segment_id]) {
     const int ext_tx_set =
@@ -2376,20 +2350,6 @@
       }
     }
   }
-#else
-  (void)bsize;
-  (void)cm;
-  if (tx_size < TX_32X32 && !xd->lossless[xd->mi[0]->mbmi.segment_id] &&
-      !FIXED_TX_TYPE) {
-    if (is_inter) {
-      return x->inter_tx_type_costs[tx_size][tx_type];
-    } else {
-      return x->intra_tx_type_costs[tx_size]
-                                   [intra_mode_to_tx_type_context[mbmi->mode]]
-                                   [tx_type];
-    }
-  }
-#endif  // CONFIG_EXT_TX
   return 0;
 }
 static int64_t txfm_yrd(const AV1_COMP *const cpi, MACROBLOCK *x,
@@ -2407,9 +2367,7 @@
 
   const int r_tx_size = tx_size_cost(cm, x, bs, tx_size);
 
-#if CONFIG_EXT_TX
   assert(IMPLIES(is_rect_tx(tx_size), is_rect_tx_allowed_bsize(bs)));
-#endif  // CONFIG_EXT_TX
 
   s0 = x->skip_cost[skip_ctx][0];
   s1 = x->skip_cost[skip_ctx][1];
@@ -2480,7 +2438,6 @@
       tx_type != get_default_tx_type(0, xd, 0, tx_size))
     return 1;
   if (max_tx_size >= TX_32X32 && tx_size == TX_4X4) return 1;
-#if CONFIG_EXT_TX
   const AV1_COMMON *const cm = &cpi->common;
   const TxSetType tx_set_type =
       get_ext_tx_set_type(tx_size, bs, is_inter, cm->reduced_tx_set_used);
@@ -2495,12 +2452,6 @@
       if (tx_type != intra_mode_to_tx_type_context[mbmi->mode]) return 1;
     }
   }
-#else   // CONFIG_EXT_TX
-  if (tx_size >= TX_32X32 && tx_type != DCT_DCT) return 1;
-  if (is_inter && cpi->sf.tx_type_search.prune_mode > NO_PRUNE &&
-      !do_tx_type_search(tx_type, prune, cpi->sf.tx_type_search.prune_mode))
-    return 1;
-#endif  // CONFIG_EXT_TX
   return 0;
 }
 
@@ -2543,20 +2494,13 @@
 
   mbmi->tx_size = tx_size_from_tx_mode(bs, cm->tx_mode, is_inter);
   mbmi->min_tx_size = get_min_tx_size(mbmi->tx_size);
-#if CONFIG_EXT_TX
   const TxSetType tx_set_type =
       get_ext_tx_set_type(mbmi->tx_size, bs, is_inter, cm->reduced_tx_set_used);
-#endif  // CONFIG_EXT_TX
 
   if (is_inter && cpi->sf.tx_type_search.prune_mode > NO_PRUNE &&
       !x->use_default_inter_tx_type) {
-#if CONFIG_EXT_TX
     prune = prune_tx_types(cpi, bs, x, xd, tx_set_type);
-#else
-    prune = prune_tx_types(cpi, bs, x, xd, 0);
-#endif  // CONFIG_EXT_TX
   }
-#if CONFIG_EXT_TX
   if (get_ext_tx_types(mbmi->tx_size, bs, is_inter, cm->reduced_tx_set_used) >
           1 &&
       !xd->lossless[mbmi->segment_id]) {
@@ -2637,48 +2581,6 @@
     txfm_rd_in_plane(x, cpi, rd_stats, ref_best_rd, 0, bs, mbmi->tx_size,
                      cpi->sf.use_fast_coef_costing);
   }
-#else   // CONFIG_EXT_TX
-  if (mbmi->tx_size < TX_32X32 && !xd->lossless[mbmi->segment_id]) {
-    for (tx_type = 0; tx_type < TX_TYPES; ++tx_type) {
-      RD_STATS this_rd_stats;
-      if (!is_inter && x->use_default_intra_tx_type &&
-          tx_type != get_default_tx_type(0, xd, 0, mbmi->tx_size))
-        continue;
-      if (is_inter && x->use_default_inter_tx_type &&
-          tx_type != get_default_tx_type(0, xd, 0, mbmi->tx_size))
-        continue;
-      mbmi->tx_type = tx_type;
-      txfm_rd_in_plane(x, cpi, &this_rd_stats, ref_best_rd, 0, bs,
-                       mbmi->tx_size, cpi->sf.use_fast_coef_costing);
-      if (this_rd_stats.rate == INT_MAX) continue;
-
-      av1_tx_type_cost(cm, x, xd, bs, plane, mbmi->tx_size, tx_type);
-      if (is_inter) {
-        if (cpi->sf.tx_type_search.prune_mode > NO_PRUNE &&
-            !do_tx_type_search(tx_type, prune,
-                               cpi->sf.tx_type_search.prune_mode))
-          continue;
-      }
-      if (this_rd_stats.skip)
-        this_rd = RDCOST(x->rdmult, s1, this_rd_stats.sse);
-      else
-        this_rd =
-            RDCOST(x->rdmult, this_rd_stats.rate + s0, this_rd_stats.dist);
-      if (is_inter && !xd->lossless[mbmi->segment_id] && !this_rd_stats.skip)
-        this_rd = AOMMIN(this_rd, RDCOST(x->rdmult, s1, this_rd_stats.sse));
-
-      if (this_rd < best_rd) {
-        best_rd = this_rd;
-        best_tx_type = mbmi->tx_type;
-        *rd_stats = this_rd_stats;
-      }
-    }
-  } else {
-    mbmi->tx_type = DCT_DCT;
-    txfm_rd_in_plane(x, cpi, rd_stats, ref_best_rd, 0, bs, mbmi->tx_size,
-                     cpi->sf.use_fast_coef_costing);
-  }
-#endif  // CONFIG_EXT_TX
   mbmi->tx_type = best_tx_type;
 #if CONFIG_LGT_FROM_PRED
   mbmi->use_lgt = is_lgt_best;
@@ -2730,7 +2632,6 @@
 
   av1_invalid_rd_stats(rd_stats);
 
-#if CONFIG_EXT_TX
   int evaluate_rect_tx = 0;
   if (tx_select) {
     evaluate_rect_tx = is_rect_tx_allowed(xd, mbmi);
@@ -2857,7 +2758,6 @@
 #endif  // CONFIG_LGT_FROM_PRED
   }
 #endif  // CONFIG_RECT_TX_EXT
-#endif  // CONFIG_EXT_TX
 
   if (tx_select) {
     start_tx = max_tx_size;
@@ -2872,18 +2772,12 @@
   int prune = 0;
   if (is_inter && cpi->sf.tx_type_search.prune_mode > NO_PRUNE &&
       !x->use_default_inter_tx_type) {
-#if CONFIG_EXT_TX
     prune = prune_tx_types(cpi, bs, x, xd, EXT_TX_SET_ALL16);
-#else
-    prune = prune_tx_types(cpi, bs, x, xd, 0);
-#endif  // CONFIG_EXT_TX
   }
 
   last_rd = INT64_MAX;
   for (n = start_tx; n >= end_tx; --n) {
-#if CONFIG_EXT_TX
     if (is_rect_tx(n)) break;
-#endif  // CONFIG_EXT_TX
     TX_TYPE tx_start = DCT_DCT;
     TX_TYPE tx_end = TX_TYPES;
 #if CONFIG_TXK_SEL
@@ -2954,10 +2848,6 @@
 #endif
 
   mbmi->min_tx_size = get_min_tx_size(mbmi->tx_size);
-
-#if !CONFIG_EXT_TX
-  if (mbmi->tx_size >= TX_32X32) assert(mbmi->tx_type == DCT_DCT);
-#endif  // !CONFIG_EXT_TX
 }
 
 static void super_block_yrd(const AV1_COMP *const cpi, MACROBLOCK *x,
@@ -4009,10 +3899,8 @@
 #if CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
                               mrc_mask,
 #endif  // CONFIG_MRC_TX && SIGNAL_ANY_MRC_MASK
-#if CONFIG_EXT_TX
-                              plane,
-#endif  // CONFIG_EXT_TX
-                              tx_type, tx_size, rec_buffer, MAX_TX_SIZE, eob);
+                              plane, tx_type, tx_size, rec_buffer, MAX_TX_SIZE,
+                              eob);
   if (eob > 0) {
 #if CONFIG_DIST_8X8
     if (x->using_dist_8x8 && plane == 0 && (bw < 8 && bh < 8)) {
@@ -4606,7 +4494,6 @@
   }
 
 #if !CONFIG_TXK_SEL
-#if CONFIG_EXT_TX
   if (get_ext_tx_types(mbmi->min_tx_size, bsize, is_inter,
                        cm->reduced_tx_set_used) > 1 &&
       !xd->lossless[xd->mi[0]->mbmi.segment_id]) {
@@ -4652,10 +4539,6 @@
 #if CONFIG_LGT_FROM_PRED
   }
 #endif
-#else
-  if (mbmi->min_tx_size < TX_32X32 && !xd->lossless[xd->mi[0]->mbmi.segment_id])
-    rd_stats->rate += x->inter_tx_type_costs[mbmi->min_tx_size][mbmi->tx_type];
-#endif  // CONFIG_EXT_TX
 #endif  // CONFIG_TXK_SEL
 
   if (rd_stats->skip)
@@ -4908,7 +4791,6 @@
   param.tx_size = max_txsize_rect_lookup[bsize];
   param.bd = 8;
   param.lossless = 0;
-#if CONFIG_EXT_TX
   const MACROBLOCKD *xd = &x->e_mbd;
   const struct macroblockd_plane *const pd = &xd->plane[0];
   const BLOCK_SIZE plane_bsize =
@@ -4918,7 +4800,6 @@
   // within this function.
   param.tx_set_type = get_ext_tx_set_type(param.tx_size, plane_bsize,
                                           is_inter_block(&xd->mi[0]->mbmi), 0);
-#endif  // CONFIG_EXT_TX
 
 #if CONFIG_TXMG
   av1_highbd_fwd_txfm(p->src_diff, DCT_coefs, bw, &param);
@@ -4969,7 +4850,6 @@
     rate += x->txfm_partition_cost[ctx][0];
   }
 #if !CONFIG_TXK_SEL
-#if CONFIG_EXT_TX
   const AV1_COMMON *cm = &cpi->common;
   const int ext_tx_set = get_ext_tx_set(max_txsize_lookup[bsize], bsize, 1,
                                         cm->reduced_tx_set_used);
@@ -4981,10 +4861,6 @@
           x->inter_tx_type_costs[ext_tx_set][txsize_sqr_map[mbmi->min_tx_size]]
                                 [mbmi->tx_type];
   }
-#else
-  if (mbmi->min_tx_size < TX_32X32 && !xd->lossless[xd->mi[0]->mbmi.segment_id])
-    rd_stats->rate += x->inter_tx_type_costs[mbmi->min_tx_size][mbmi->tx_type];
-#endif  // CONFIG_EXT_TX
 #endif  // CONFIG_TXK_SEL
   rd_stats->rate = rate;
 
@@ -5022,26 +4898,24 @@
   const int n4 = bsize_to_num_blk(bsize);
   int idx, idy;
   int prune = 0;
-#if CONFIG_EXT_TX
   const TX_SIZE sqr_up_tx_size =
       txsize_sqr_up_map[max_txsize_rect_lookup[bsize]];
   // Get the tx_size 1 level down
   TX_SIZE min_tx_size = sub_tx_size_map[sqr_up_tx_size];
   const TxSetType tx_set_type = get_ext_tx_set_type(
       min_tx_size, bsize, is_inter, cm->reduced_tx_set_used);
-#endif  // CONFIG_EXT_TX
   int within_border = (mi_row + mi_size_high[bsize] <= cm->mi_rows) &&
                       (mi_col + mi_size_wide[bsize] <= cm->mi_cols);
 
   av1_invalid_rd_stats(rd_stats);
 
-#if CONFIG_EXT_TX && CONFIG_LGT_FROM_PRED
+#if CONFIG_LGT_FROM_PRED
   mbmi->use_lgt = 0;
   int search_lgt = is_inter
                        ? LGT_FROM_PRED_INTER &&
                              (!cpi->sf.tx_type_search.prune_mode > NO_PRUNE)
                        : LGT_FROM_PRED_INTRA && ALLOW_INTRA_EXT_TX;
-#endif  // CONFIG_EXT_TX && CONFIG_LGT_FROM_PRED
+#endif  // CONFIG_LGT_FROM_PRED
 
   const uint32_t hash = get_block_residue_hash(x, bsize);
   TX_RD_RECORD *tx_rd_record = &x->tx_rd_record;
@@ -5074,11 +4948,7 @@
 
   if (is_inter && cpi->sf.tx_type_search.prune_mode > NO_PRUNE &&
       !x->use_default_inter_tx_type && !xd->lossless[mbmi->segment_id]) {
-#if CONFIG_EXT_TX
     prune = prune_tx_types(cpi, bsize, x, xd, tx_set_type);
-#else
-    prune = prune_tx_types(cpi, bsize, x, xd, 0);
-#endif  // CONFIG_EXT_TX
   }
 
   int found = 0;
@@ -5086,38 +4956,32 @@
   for (tx_type = txk_start; tx_type < txk_end; ++tx_type) {
     RD_STATS this_rd_stats;
     av1_init_rd_stats(&this_rd_stats);
-#if CONFIG_EXT_TX && CONFIG_MRC_TX
+#if CONFIG_MRC_TX
     // MRC_DCT only implemented for TX_32X32 so only include this tx in
     // the search for TX_32X32
     if (tx_type == MRC_DCT &&
         (max_tx_size != TX_32X32 || (is_inter && !USE_MRC_INTER) ||
          (!is_inter && !USE_MRC_INTRA)))
       continue;
-#endif  // CONFIG_EXT_TX && CONFIG_MRC_TX
-#if CONFIG_EXT_TX
+#endif  // CONFIG_MRC_TX
     if (!av1_ext_tx_used[tx_set_type][tx_type]) continue;
     (void)prune;
-// TODO(sarahparker) This speed feature has been temporarily disabled
-// with ext-tx because it is not compatible with the current
-// search method. It will be fixed in a followup.
-/*
-    if (is_inter) {
-      if (cpi->sf.tx_type_search.prune_mode > NO_PRUNE) {
-        if (!do_tx_type_search(tx_type, prune,
-                               cpi->sf.tx_type_search.prune_mode))
-          continue;
-      }
-    } else {
-      if (!ALLOW_INTRA_EXT_TX && bsize >= BLOCK_8X8) {
-        if (tx_type != intra_mode_to_tx_type_context[mbmi->mode]) continue;
-      }
-    }
-*/
-#else   // CONFIG_EXT_TX
-    if (is_inter && cpi->sf.tx_type_search.prune_mode > NO_PRUNE &&
-        !do_tx_type_search(tx_type, prune, cpi->sf.tx_type_search.prune_mode))
-      continue;
-#endif  // CONFIG_EXT_TX
+    // TODO(sarahparker) This speed feature has been temporarily disabled
+    // with ext-tx because it is not compatible with the current
+    // search method. It will be fixed in a followup.
+    /*
+        if (is_inter) {
+          if (cpi->sf.tx_type_search.prune_mode > NO_PRUNE) {
+            if (!do_tx_type_search(tx_type, prune,
+                                   cpi->sf.tx_type_search.prune_mode))
+              continue;
+          }
+        } else {
+          if (!ALLOW_INTRA_EXT_TX && bsize >= BLOCK_8X8) {
+            if (tx_type != intra_mode_to_tx_type_context[mbmi->mode]) continue;
+          }
+        }
+    */
     if (is_inter && x->use_default_inter_tx_type &&
         tx_type != get_default_tx_type(0, xd, 0, max_tx_size))
       continue;
@@ -5127,14 +4991,12 @@
 
     rd = select_tx_size_fix_type(cpi, x, &this_rd_stats, bsize, mi_row, mi_col,
                                  ref_best_rd, tx_type);
-#if CONFIG_EXT_TX
     // If the current tx_type is not included in the tx_set for the smallest
     // tx size found, then all vartx partitions were actually transformed with
     // DCT_DCT and we should avoid picking it.
     const TxSetType min_tx_set_type = get_ext_tx_set_type(
         mbmi->min_tx_size, bsize, is_inter, cm->reduced_tx_set_used);
     if (!av1_ext_tx_used[min_tx_set_type][tx_type]) continue;
-#endif  // CONFIG_EXT_TX
 
     ref_best_rd = AOMMIN(rd, ref_best_rd);
     if (rd < best_rd) {
@@ -5157,7 +5019,7 @@
   assert(IMPLIES(!found, ref_best_rd != INT64_MAX));
   if (!found) return;
 
-#if CONFIG_EXT_TX && CONFIG_LGT_FROM_PRED
+#if CONFIG_LGT_FROM_PRED
   if (search_lgt && is_lgt_allowed(mbmi->mode, max_tx_size) &&
       !cm->reduced_tx_set_used) {
     RD_STATS this_rd_stats;
@@ -5177,7 +5039,7 @@
       mbmi->use_lgt = 0;
     }
   }
-#endif  // CONFIG_EXT_TX && CONFIG_LGT_FROM_PRED
+#endif  // CONFIG_LGT_FROM_PRED
   // We found a candidate transform to use. Copy our results from the "best"
   // array into mbmi.
   mbmi->tx_type = best_tx_type;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 82e4d03..6fe07ec 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -220,9 +220,7 @@
     sf->allow_partition_search_skip = 1;
     sf->use_upsampled_references = 0;
     sf->adaptive_rd_thresh = 2;
-#if CONFIG_EXT_TX
     sf->tx_type_search.prune_mode = PRUNE_2D_FAST;
-#endif
     sf->gm_search_type = GM_DISABLE_SEARCH;
   }
 
@@ -398,11 +396,7 @@
   sf->cb_partition_search = 0;
   sf->alt_ref_search_fp = 0;
   sf->partition_search_type = SEARCH_PARTITION;
-#if CONFIG_EXT_TX
   sf->tx_type_search.prune_mode = PRUNE_2D_ACCURATE;
-#else
-  sf->tx_type_search.prune_mode = NO_PRUNE;
-#endif  // CONFIG_EXT_TX
   sf->tx_type_search.use_skip_flag_prediction = 1;
   sf->tx_type_search.fast_intra_tx_type_search = 0;
   sf->tx_type_search.fast_inter_tx_type_search = 0;
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index d886ad4..db62f02 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -190,7 +190,6 @@
   NO_PRUNE = 0,
   // eliminates one tx type in vertical and horizontal direction
   PRUNE_ONE = 1,
-#if CONFIG_EXT_TX
   // eliminates two tx types in each direction
   PRUNE_TWO = 2,
   // adaptively prunes the least perspective tx types out of all 16
@@ -198,7 +197,6 @@
   PRUNE_2D_ACCURATE = 3,
   // similar, but applies much more aggressive pruning to get better speed-up
   PRUNE_2D_FAST = 4,
-#endif
 } TX_TYPE_PRUNE_MODE;
 
 typedef struct {
diff --git a/av1/encoder/x86/dct_intrin_sse2.c b/av1/encoder/x86/dct_intrin_sse2.c
index e5b19a4..9a3e334 100644
--- a/av1/encoder/x86/dct_intrin_sse2.c
+++ b/av1/encoder/x86/dct_intrin_sse2.c
@@ -167,7 +167,6 @@
   transpose_4x4(in);
 }
 
-#if CONFIG_EXT_TX
 static void fidtx4_sse2(__m128i *in) {
   const __m128i k__zero_epi16 = _mm_set1_epi16((int16_t)0);
   const __m128i k__sqrt2_epi16 = _mm_set1_epi16((int16_t)Sqrt2);
@@ -200,7 +199,6 @@
   in[1] = _mm_packs_epi32(u1, u3);
   transpose_4x4(in);
 }
-#endif  // CONFIG_EXT_TX
 
 void av1_fht4x4_sse2(const int16_t *input, tran_low_t *output, int stride,
                      TxfmParam *txfm_param) {
@@ -230,7 +228,6 @@
       fadst4_sse2(in);
       write_buffer_4x4(output, in);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       load_buffer_4x4(input, in, stride, 1, 0);
       fadst4_sse2(in);
@@ -303,7 +300,6 @@
       fadst4_sse2(in);
       write_buffer_4x4(output, in);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0);
   }
 }
@@ -848,7 +844,6 @@
   array_transpose_8x8(in, in);
 }
 
-#if CONFIG_EXT_TX
 static void fidtx8_sse2(__m128i *in) {
   in[0] = _mm_slli_epi16(in[0], 1);
   in[1] = _mm_slli_epi16(in[1], 1);
@@ -861,7 +856,6 @@
 
   array_transpose_8x8(in, in);
 }
-#endif  // CONFIG_EXT_TX
 
 void av1_fht8x8_sse2(const int16_t *input, tran_low_t *output, int stride,
                      TxfmParam *txfm_param) {
@@ -894,7 +888,6 @@
       right_shift_8x8(in, 1);
       write_buffer_8x8(output, in, 8);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       load_buffer_8x8(input, in, stride, 1, 0);
       fadst8_sse2(in);
@@ -979,7 +972,6 @@
       right_shift_8x8(in, 1);
       write_buffer_8x8(output, in, 8);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0);
   }
 }
@@ -1892,13 +1884,11 @@
   array_transpose_16x16(in0, in1);
 }
 
-#if CONFIG_EXT_TX
 static void fidtx16_sse2(__m128i *in0, __m128i *in1) {
   idtx16_8col(in0);
   idtx16_8col(in1);
   array_transpose_16x16(in0, in1);
 }
-#endif  // CONFIG_EXT_TX
 
 void av1_fht16x16_sse2(const int16_t *input, tran_low_t *output, int stride,
                        TxfmParam *txfm_param) {
@@ -1937,7 +1927,6 @@
       fadst16_sse2(in0, in1);
       write_buffer_16x16(output, in0, in1, 16);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       load_buffer_16x16(input, in0, in1, stride, 1, 0);
       fadst16_sse2(in0, in1);
@@ -2022,7 +2011,6 @@
       fadst16_sse2(in0, in1);
       write_buffer_16x16(output, in0, in1, 16);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0); break;
   }
 }
@@ -2153,7 +2141,6 @@
       fadst4_sse2(in + 4);
       fadst8_sse2(in);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       load_buffer_4x8(input, in, stride, 1, 0);
       fdct4_sse2(in);
@@ -2226,7 +2213,6 @@
       fadst4_sse2(in + 4);
       fidtx8_sse2(in);
       break;
-#endif
     default: assert(0); break;
   }
   write_buffer_4x8(output, in);
@@ -2331,7 +2317,6 @@
       fadst4_sse2(in + 4);
       fadst8_sse2(in);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       load_buffer_8x4(input, in, stride, 1, 0);
       fadst4_sse2(in);
@@ -2404,7 +2389,6 @@
       fidtx4_sse2(in + 4);
       fadst8_sse2(in);
       break;
-#endif
     default: assert(0); break;
   }
   write_buffer_8x4(output, in);
@@ -2490,7 +2474,6 @@
       row_8x16_rounding(in, 2);
       fadst16_8col(in);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       load_buffer_8x16(input, in, stride, 1, 0);
       array_transpose_8x8(t, t);
@@ -2599,7 +2582,6 @@
       row_8x16_rounding(in, 2);
       idtx16_8col(in);
       break;
-#endif
     default: assert(0); break;
   }
   write_buffer_8x8(output, t, 8);
@@ -2668,7 +2650,6 @@
       col_16x8_rounding(in, 2);
       fadst16_8col(in);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       load_buffer_16x8(input, in, stride, 1, 0);
       fadst8_sse2(l);
@@ -2753,7 +2734,6 @@
       col_16x8_rounding(in, 2);
       fadst16_8col(in);
       break;
-#endif
     default: assert(0); break;
   }
   array_transpose_8x8(l, l);
@@ -2772,7 +2752,6 @@
   array_transpose_16x16(bl, br);
 }
 
-#if CONFIG_EXT_TX
 static INLINE void fidtx32_16col(__m128i *tl, __m128i *tr, __m128i *bl,
                                  __m128i *br) {
   int i;
@@ -2785,7 +2764,6 @@
   array_transpose_16x16(tl, tr);
   array_transpose_16x16(bl, br);
 }
-#endif
 
 static INLINE void load_buffer_16x32(const int16_t *input, __m128i *intl,
                                      __m128i *intr, __m128i *inbl,
@@ -2982,7 +2960,6 @@
       round_signed_16x16(inbl, inbr);
       fhalfright32_16col(intl, intr, inbl, inbr, transpose);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       load_buffer_16x32(input, intl, intr, inbl, inbr, stride, 1, 0);
       fdct16t_sse2(intl, intr);
@@ -3079,7 +3056,6 @@
       round_signed_16x16(inbl, inbr);
       fidtx32_16col(intl, intr, inbl, inbr);
       break;
-#endif
     default: assert(0); break;
   }
   write_buffer_16x32(output, intl, intr, inbl, inbr);
@@ -3172,7 +3148,6 @@
       round_signed_16x16(in2, in3);
       fhalfright32_16col(in0, in1, in2, in3, no_transpose);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       load_buffer_32x16(input, in0, in1, in2, in3, stride, 1, 0);
       fadst16_sse2(in0, in1);
@@ -3269,7 +3244,6 @@
       round_signed_16x16(in2, in3);
       fhalfright32_16col(in0, in1, in2, in3, no_transpose);
       break;
-#endif
     default: assert(0); break;
   }
   write_buffer_32x16(output, in0, in1, in2, in3);
@@ -3350,14 +3324,12 @@
   swap_16x16(&in0[16], &in1[16], in2, in3);
 }
 
-#if CONFIG_EXT_TX
 static INLINE void fidtx32(__m128i *in0, __m128i *in1, __m128i *in2,
                            __m128i *in3) {
   fidtx32_16col(in0, in1, &in0[16], &in1[16]);
   fidtx32_16col(in2, in3, &in2[16], &in3[16]);
   swap_16x16(&in0[16], &in1[16], in2, in3);
 }
-#endif
 
 static INLINE void round_signed_32x32(__m128i *in0, __m128i *in1, __m128i *in2,
                                       __m128i *in3) {
@@ -3408,7 +3380,6 @@
       round_signed_32x32(in0, in1, in2, in3);
       fhalfright32(in0, in1, in2, in3);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       load_buffer_32x32(input, in0, in1, in2, in3, stride, 1, 0);
       fhalfright32(in0, in1, in2, in3);
@@ -3476,7 +3447,6 @@
       round_signed_32x32(in0, in1, in2, in3);
       fhalfright32(in0, in1, in2, in3);
       break;
-#endif
     default: assert(0);
   }
   write_buffer_32x32(in0, in1, in2, in3, output);
diff --git a/av1/encoder/x86/highbd_fwd_txfm_sse4.c b/av1/encoder/x86/highbd_fwd_txfm_sse4.c
index b684f7a..e620eee 100644
--- a/av1/encoder/x86/highbd_fwd_txfm_sse4.c
+++ b/av1/encoder/x86/highbd_fwd_txfm_sse4.c
@@ -233,7 +233,6 @@
       fadst4x4_sse4_1(in, row_cfg->cos_bit[2]);
       write_buffer_4x4(in, coeff);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       row_cfg = &fwd_txfm_1d_row_cfg_dct_4;
       col_cfg = &fwd_txfm_1d_col_cfg_adst_4;
@@ -274,7 +273,6 @@
       fadst4x4_sse4_1(in, row_cfg->cos_bit[2]);
       write_buffer_4x4(in, coeff);
       break;
-#endif
     default: assert(0);
   }
   (void)bd;
@@ -976,7 +974,6 @@
       transpose_8x8(out, in);
       write_buffer_8x8(in, coeff);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       row_cfg = &fwd_txfm_1d_row_cfg_dct_8;
       col_cfg = &fwd_txfm_1d_col_cfg_adst_8;
@@ -1032,7 +1029,6 @@
       transpose_8x8(out, in);
       write_buffer_8x8(in, coeff);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0);
   }
   (void)bd;
@@ -1850,7 +1846,6 @@
       transpose_16x16(out, in);
       write_buffer_16x16(in, coeff);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       row_cfg = &fwd_txfm_1d_row_cfg_dct_16;
       col_cfg = &fwd_txfm_1d_col_cfg_adst_16;
@@ -1906,7 +1901,6 @@
       transpose_16x16(out, in);
       write_buffer_16x16(in, coeff);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0);
   }
   (void)bd;
diff --git a/av1/encoder/x86/hybrid_fwd_txfm_avx2.c b/av1/encoder/x86/hybrid_fwd_txfm_avx2.c
index 88621c8..d714181 100644
--- a/av1/encoder/x86/hybrid_fwd_txfm_avx2.c
+++ b/av1/encoder/x86/hybrid_fwd_txfm_avx2.c
@@ -907,11 +907,9 @@
   in[15] = _mm256_sub_epi16(zero, x1);
 }
 
-#if CONFIG_EXT_TX
 static void fidtx16_avx2(__m256i *in) {
   txfm_scaling16_avx2((int16_t)Sqrt2, in);
 }
-#endif
 
 void av1_fht16x16_avx2(const int16_t *input, tran_low_t *output, int stride,
                        TxfmParam *txfm_param) {
@@ -950,7 +948,6 @@
       right_shift_16x16(in);
       fadst16_avx2(in);
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       load_buffer_16x16(input, stride, 1, 0, in);
       fadst16_avx2(in);
@@ -1035,7 +1032,6 @@
       right_shift_16x16(in);
       fadst16_avx2(in);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0); break;
   }
   mm256_transpose_16x16(in, in);
@@ -1405,7 +1401,6 @@
   }
 }
 
-#if CONFIG_EXT_TX
 static void fhalfright32_16col_avx2(__m256i *in) {
   int i = 0;
   const __m256i zero = _mm256_setzero_si256();
@@ -1436,7 +1431,6 @@
   mm256_vectors_swap(in1, &in1[16], 16);
   mm256_transpose_32x32(in0, in1);
 }
-#endif  // CONFIG_EXT_TX
 
 static INLINE void load_buffer_32x32(const int16_t *input, int stride,
                                      int flipud, int fliplr, __m256i *in0,
@@ -1500,7 +1494,6 @@
   right_shift_32x32_16col(bit, in1);
 }
 
-#if CONFIG_EXT_TX
 static void fidtx32_avx2(__m256i *in0, __m256i *in1) {
   int i = 0;
   while (i < 32) {
@@ -1510,7 +1503,6 @@
   }
   mm256_transpose_32x32(in0, in1);
 }
-#endif
 
 void av1_fht32x32_avx2(const int16_t *input, tran_low_t *output, int stride,
                        TxfmParam *txfm_param) {
@@ -1528,7 +1520,6 @@
       right_shift_32x32(in0, in1);
       fdct32_avx2(in0, in1);
       break;
-#if CONFIG_EXT_TX
     case ADST_DCT:
       load_buffer_32x32(input, stride, 0, 0, in0, in1);
       fhalfright32_avx2(in0, in1);
@@ -1619,7 +1610,6 @@
       right_shift_32x32(in0, in1);
       fhalfright32_avx2(in0, in1);
       break;
-#endif  // CONFIG_EXT_TX
     default: assert(0); break;
   }
   write_buffer_32x32(in0, in1, output);
diff --git a/build/cmake/aom_config_defaults.cmake b/build/cmake/aom_config_defaults.cmake
index 9b176f2..3bc1937 100644
--- a/build/cmake/aom_config_defaults.cmake
+++ b/build/cmake/aom_config_defaults.cmake
@@ -142,7 +142,6 @@
 set(CONFIG_EXT_PARTITION_TYPES_AB 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_EXT_SKIP 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_EXT_TILE 0 CACHE NUMBER "AV1 experiment flag.")
-set(CONFIG_EXT_TX 1 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_EXT_WARPED_MOTION 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_FILTER_INTRA 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_FP_MB_STATS 0 CACHE NUMBER "AV1 experiment flag.")
diff --git a/build/cmake/aom_experiment_deps.cmake b/build/cmake/aom_experiment_deps.cmake
index 4a770e6..36d7a53 100644
--- a/build/cmake/aom_experiment_deps.cmake
+++ b/build/cmake/aom_experiment_deps.cmake
@@ -27,18 +27,12 @@
   endif ()
 
   if (CONFIG_CTX1D)
-    if (NOT CONFIG_EXT_TX)
-      change_config_and_warn(CONFIG_EXT_TX 1 CONFIG_CTX1D)
-    endif ()
     if (NOT CONFIG_LV_MAP)
       change_config_and_warn(CONFIG_LV_MAP 1 CONFIG_CTX1D)
     endif ()
   endif ()
 
   if (CONFIG_EOB_FIRST)
-    if (NOT CONFIG_EXT_TX)
-      change_config_and_warn(CONFIG_EXT_TX 1 CONFIG_EOB_FIRST)
-    endif ()
     if (NOT CONFIG_LV_MAP)
       change_config_and_warn(CONFIG_LV_MAP 1 CONFIG_EOB_FIRST)
     endif ()
diff --git a/configure b/configure
index 28c0649..8eb34f4 100755
--- a/configure
+++ b/configure
@@ -255,7 +255,6 @@
     dual_filter
     convolve_round
     compound_round
-    ext_tx
     tx64x64
     ext_intra
     filter_intra
@@ -498,7 +497,6 @@
     # Enable adopted experiments by default
     soft_enable adopted_experiments
     if enabled adopted_experiments; then
-      soft_enable ext_tx
       soft_enable cdef
       soft_enable cdef_singlepass
       soft_enable ext_intra
@@ -540,16 +538,12 @@
     # Fix up experiment dependencies
     enabled lv_map && disable_feature mrc_tx
     enabled eob_first && enable_feature lv_map
-    enabled eob_first && enable_feature ext_tx
-    enabled mrc_tx && enable_feature ext_tx
     enabled txk_sel && soft_enable lv_map
     enabled ctx1d && soft_enable lv_map
-    enabled ctx1d && soft_enable ext_tx
     enabled compound_round && soft_enable convolve_round
     enabled ext_intra_mod && enable_feature intra_edge
     enabled intra_edge && enable_feature ext_intra
     enabled ext_comp_refs && enable_feature one_sided_compound
-    enabled lgt_from_pred && enable_feature ext_tx
     enabled lgt_from_pred && disable_feature mrc_tx
     enabled cfl && enable_feature smooth_hv
     enabled cdef_singlepass && enable_feature cdef
diff --git a/examples/inspect.c b/examples/inspect.c
index 7de4d3a..1f5abfa 100644
--- a/examples/inspect.c
+++ b/examples/inspect.c
@@ -185,7 +185,6 @@
                                   ENUM(ADST_DCT),
                                   ENUM(DCT_ADST),
                                   ENUM(ADST_ADST),
-#if CONFIG_EXT_TX
                                   ENUM(FLIPADST_DCT),
                                   ENUM(DCT_FLIPADST),
                                   ENUM(FLIPADST_FLIPADST),
@@ -198,7 +197,6 @@
                                   ENUM(H_ADST),
                                   ENUM(V_FLIPADST),
                                   ENUM(H_FLIPADST),
-#endif
                                   LAST_ENUM };
 #if CONFIG_DUAL_FILTER
 const map_entry dual_filter_map[] = { ENUM(REG_REG),       ENUM(REG_SMOOTH),
diff --git a/test/av1_fht16x16_test.cc b/test/av1_fht16x16_test.cc
index 9d290c2..fefdab9 100644
--- a/test/av1_fht16x16_test.cc
+++ b/test/av1_fht16x16_test.cc
@@ -174,7 +174,6 @@
              AOM_BITS_8, 256),
   make_tuple(&av1_fht16x16_sse2, &av1_iht16x16_256_add_sse2, ADST_ADST,
              AOM_BITS_8, 256),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht16x16_sse2, &av1_iht16x16_256_add_sse2, FLIPADST_DCT,
              AOM_BITS_8, 256),
   make_tuple(&av1_fht16x16_sse2, &av1_iht16x16_256_add_sse2, DCT_FLIPADST,
@@ -199,7 +198,6 @@
              AOM_BITS_8, 256),
   make_tuple(&av1_fht16x16_sse2, &av1_iht16x16_256_add_sse2, H_FLIPADST,
              AOM_BITS_8, 256)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(SSE2, AV1Trans16x16HT,
                         ::testing::ValuesIn(kArrayHt16x16Param_sse2));
@@ -215,7 +213,6 @@
              AOM_BITS_8, 256),
   make_tuple(&av1_fht16x16_avx2, &av1_iht16x16_256_add_avx2, ADST_ADST,
              AOM_BITS_8, 256),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht16x16_avx2, &av1_iht16x16_256_add_avx2, FLIPADST_DCT,
              AOM_BITS_8, 256),
   make_tuple(&av1_fht16x16_avx2, &av1_iht16x16_256_add_avx2, DCT_FLIPADST,
@@ -240,7 +237,6 @@
              AOM_BITS_8, 256),
   make_tuple(&av1_fht16x16_avx2, &av1_iht16x16_256_add_avx2, H_FLIPADST,
              AOM_BITS_8, 256)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(AVX2, AV1Trans16x16HT,
                         ::testing::ValuesIn(kArrayHt16x16Param_avx2));
@@ -256,7 +252,6 @@
   make_tuple(&av1_fwd_txfm2d_16x16_sse4_1, DCT_ADST, 12),
   make_tuple(&av1_fwd_txfm2d_16x16_sse4_1, ADST_ADST, 10),
   make_tuple(&av1_fwd_txfm2d_16x16_sse4_1, ADST_ADST, 12),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fwd_txfm2d_16x16_sse4_1, FLIPADST_DCT, 10),
   make_tuple(&av1_fwd_txfm2d_16x16_sse4_1, FLIPADST_DCT, 12),
   make_tuple(&av1_fwd_txfm2d_16x16_sse4_1, DCT_FLIPADST, 10),
@@ -267,7 +262,6 @@
   make_tuple(&av1_fwd_txfm2d_16x16_sse4_1, ADST_FLIPADST, 12),
   make_tuple(&av1_fwd_txfm2d_16x16_sse4_1, FLIPADST_ADST, 10),
   make_tuple(&av1_fwd_txfm2d_16x16_sse4_1, FLIPADST_ADST, 12),
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(SSE4_1, AV1HighbdTrans16x16HT,
                         ::testing::ValuesIn(kArrayHBDHt16x16Param_sse4_1));
diff --git a/test/av1_fht16x32_test.cc b/test/av1_fht16x32_test.cc
index 0b3928f..ae37e2d 100644
--- a/test/av1_fht16x32_test.cc
+++ b/test/av1_fht16x32_test.cc
@@ -88,7 +88,6 @@
              512),
   make_tuple(&av1_fht16x32_c, &av1_iht16x32_512_add_c, ADST_ADST, AOM_BITS_8,
              512),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht16x32_c, &av1_iht16x32_512_add_c, FLIPADST_DCT, AOM_BITS_8,
              512),
   make_tuple(&av1_fht16x32_c, &av1_iht16x32_512_add_c, DCT_FLIPADST, AOM_BITS_8,
@@ -108,7 +107,6 @@
              512),
   make_tuple(&av1_fht16x32_c, &av1_iht16x32_512_add_c, H_FLIPADST, AOM_BITS_8,
              512)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(C, AV1Trans16x32HT,
                         ::testing::ValuesIn(kArrayHt16x32Param_c));
@@ -123,7 +121,6 @@
              AOM_BITS_8, 512),
   make_tuple(&av1_fht16x32_sse2, &av1_iht16x32_512_add_sse2, ADST_ADST,
              AOM_BITS_8, 512),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht16x32_sse2, &av1_iht16x32_512_add_sse2, FLIPADST_DCT,
              AOM_BITS_8, 512),
   make_tuple(&av1_fht16x32_sse2, &av1_iht16x32_512_add_sse2, DCT_FLIPADST,
@@ -148,7 +145,6 @@
              AOM_BITS_8, 512),
   make_tuple(&av1_fht16x32_sse2, &av1_iht16x32_512_add_sse2, H_FLIPADST,
              AOM_BITS_8, 512)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(SSE2, AV1Trans16x32HT,
                         ::testing::ValuesIn(kArrayHt16x32Param_sse2));
diff --git a/test/av1_fht16x8_test.cc b/test/av1_fht16x8_test.cc
index 3ee1a08..8c49993 100644
--- a/test/av1_fht16x8_test.cc
+++ b/test/av1_fht16x8_test.cc
@@ -86,7 +86,6 @@
   make_tuple(&av1_fht16x8_c, &av1_iht16x8_128_add_c, DCT_ADST, AOM_BITS_8, 128),
   make_tuple(&av1_fht16x8_c, &av1_iht16x8_128_add_c, ADST_ADST, AOM_BITS_8,
              128),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht16x8_c, &av1_iht16x8_128_add_c, FLIPADST_DCT, AOM_BITS_8,
              128),
   make_tuple(&av1_fht16x8_c, &av1_iht16x8_128_add_c, DCT_FLIPADST, AOM_BITS_8,
@@ -106,7 +105,6 @@
              128),
   make_tuple(&av1_fht16x8_c, &av1_iht16x8_128_add_c, H_FLIPADST, AOM_BITS_8,
              128)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(C, AV1Trans16x8HT,
                         ::testing::ValuesIn(kArrayHt16x8Param_c));
@@ -121,7 +119,6 @@
              128),
   make_tuple(&av1_fht16x8_sse2, &av1_iht16x8_128_add_sse2, ADST_ADST,
              AOM_BITS_8, 128),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht16x8_sse2, &av1_iht16x8_128_add_sse2, FLIPADST_DCT,
              AOM_BITS_8, 128),
   make_tuple(&av1_fht16x8_sse2, &av1_iht16x8_128_add_sse2, DCT_FLIPADST,
@@ -146,7 +143,6 @@
              AOM_BITS_8, 128),
   make_tuple(&av1_fht16x8_sse2, &av1_iht16x8_128_add_sse2, H_FLIPADST,
              AOM_BITS_8, 128)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(SSE2, AV1Trans16x8HT,
                         ::testing::ValuesIn(kArrayHt16x8Param_sse2));
diff --git a/test/av1_fht32x16_test.cc b/test/av1_fht32x16_test.cc
index cbce074..97f564d 100644
--- a/test/av1_fht32x16_test.cc
+++ b/test/av1_fht32x16_test.cc
@@ -88,7 +88,6 @@
              512),
   make_tuple(&av1_fht32x16_c, &av1_iht32x16_512_add_c, ADST_ADST, AOM_BITS_8,
              512),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht32x16_c, &av1_iht32x16_512_add_c, FLIPADST_DCT, AOM_BITS_8,
              512),
   make_tuple(&av1_fht32x16_c, &av1_iht32x16_512_add_c, DCT_FLIPADST, AOM_BITS_8,
@@ -108,7 +107,6 @@
              512),
   make_tuple(&av1_fht32x16_c, &av1_iht32x16_512_add_c, H_FLIPADST, AOM_BITS_8,
              512)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(C, AV1Trans32x16HT,
                         ::testing::ValuesIn(kArrayHt32x16Param_c));
@@ -123,7 +121,6 @@
              AOM_BITS_8, 512),
   make_tuple(&av1_fht32x16_sse2, &av1_iht32x16_512_add_sse2, ADST_ADST,
              AOM_BITS_8, 512),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht32x16_sse2, &av1_iht32x16_512_add_sse2, FLIPADST_DCT,
              AOM_BITS_8, 512),
   make_tuple(&av1_fht32x16_sse2, &av1_iht32x16_512_add_sse2, DCT_FLIPADST,
@@ -148,7 +145,6 @@
              AOM_BITS_8, 512),
   make_tuple(&av1_fht32x16_sse2, &av1_iht32x16_512_add_sse2, H_FLIPADST,
              AOM_BITS_8, 512)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(SSE2, AV1Trans32x16HT,
                         ::testing::ValuesIn(kArrayHt32x16Param_sse2));
diff --git a/test/av1_fht32x32_test.cc b/test/av1_fht32x32_test.cc
index 7376aee..c47b056 100644
--- a/test/av1_fht32x32_test.cc
+++ b/test/av1_fht32x32_test.cc
@@ -168,7 +168,6 @@
 #if HAVE_SSE2 && !CONFIG_DAALA_TX32
 const Ht32x32Param kArrayHt32x32Param_sse2[] = {
   make_tuple(&av1_fht32x32_sse2, &dummy_inv_txfm, DCT_DCT, AOM_BITS_8, 1024),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht32x32_sse2, &dummy_inv_txfm, ADST_DCT, AOM_BITS_8, 1024),
   make_tuple(&av1_fht32x32_sse2, &dummy_inv_txfm, DCT_ADST, AOM_BITS_8, 1024),
   make_tuple(&av1_fht32x32_sse2, &dummy_inv_txfm, ADST_ADST, AOM_BITS_8, 1024),
@@ -189,7 +188,6 @@
   make_tuple(&av1_fht32x32_sse2, &dummy_inv_txfm, H_ADST, AOM_BITS_8, 1024),
   make_tuple(&av1_fht32x32_sse2, &dummy_inv_txfm, V_FLIPADST, AOM_BITS_8, 1024),
   make_tuple(&av1_fht32x32_sse2, &dummy_inv_txfm, H_FLIPADST, AOM_BITS_8, 1024)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(SSE2, AV1Trans32x32HT,
                         ::testing::ValuesIn(kArrayHt32x32Param_sse2));
@@ -198,7 +196,6 @@
 #if HAVE_AVX2 && !CONFIG_DAALA_TX32
 const Ht32x32Param kArrayHt32x32Param_avx2[] = {
   make_tuple(&av1_fht32x32_avx2, &dummy_inv_txfm, DCT_DCT, AOM_BITS_8, 1024),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht32x32_avx2, &dummy_inv_txfm, ADST_DCT, AOM_BITS_8, 1024),
   make_tuple(&av1_fht32x32_avx2, &dummy_inv_txfm, DCT_ADST, AOM_BITS_8, 1024),
   make_tuple(&av1_fht32x32_avx2, &dummy_inv_txfm, ADST_ADST, AOM_BITS_8, 1024),
@@ -219,7 +216,6 @@
   make_tuple(&av1_fht32x32_avx2, &dummy_inv_txfm, H_ADST, AOM_BITS_8, 1024),
   make_tuple(&av1_fht32x32_avx2, &dummy_inv_txfm, V_FLIPADST, AOM_BITS_8, 1024),
   make_tuple(&av1_fht32x32_avx2, &dummy_inv_txfm, H_FLIPADST, AOM_BITS_8, 1024)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(AVX2, AV1Trans32x32HT,
                         ::testing::ValuesIn(kArrayHt32x32Param_avx2));
diff --git a/test/av1_fht4x4_test.cc b/test/av1_fht4x4_test.cc
index 1a0ebb1..df7b03c 100644
--- a/test/av1_fht4x4_test.cc
+++ b/test/av1_fht4x4_test.cc
@@ -177,7 +177,6 @@
              16),
   make_tuple(&av1_fht4x4_sse2, &av1_iht4x4_16_add_sse2, ADST_ADST, AOM_BITS_8,
              16),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht4x4_sse2, &av1_iht4x4_16_add_sse2, FLIPADST_DCT,
              AOM_BITS_8, 16),
   make_tuple(&av1_fht4x4_sse2, &av1_iht4x4_16_add_sse2, DCT_FLIPADST,
@@ -197,7 +196,6 @@
              16),
   make_tuple(&av1_fht4x4_sse2, &av1_iht4x4_16_add_sse2, H_FLIPADST, AOM_BITS_8,
              16)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(SSE2, AV1Trans4x4HT,
                         ::testing::ValuesIn(kArrayHt4x4Param_sse2));
@@ -213,7 +211,6 @@
   make_tuple(&av1_fwd_txfm2d_4x4_sse4_1, DCT_ADST, 12),
   make_tuple(&av1_fwd_txfm2d_4x4_sse4_1, ADST_ADST, 10),
   make_tuple(&av1_fwd_txfm2d_4x4_sse4_1, ADST_ADST, 12),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fwd_txfm2d_4x4_sse4_1, FLIPADST_DCT, 10),
   make_tuple(&av1_fwd_txfm2d_4x4_sse4_1, FLIPADST_DCT, 12),
   make_tuple(&av1_fwd_txfm2d_4x4_sse4_1, DCT_FLIPADST, 10),
@@ -224,7 +221,6 @@
   make_tuple(&av1_fwd_txfm2d_4x4_sse4_1, ADST_FLIPADST, 12),
   make_tuple(&av1_fwd_txfm2d_4x4_sse4_1, FLIPADST_ADST, 10),
   make_tuple(&av1_fwd_txfm2d_4x4_sse4_1, FLIPADST_ADST, 12),
-#endif  // CONFIG_EXT_TX
 };
 
 INSTANTIATE_TEST_CASE_P(SSE4_1, AV1HighbdTrans4x4HT,
diff --git a/test/av1_fht4x8_test.cc b/test/av1_fht4x8_test.cc
index f9d2120..2b13fcd 100644
--- a/test/av1_fht4x8_test.cc
+++ b/test/av1_fht4x8_test.cc
@@ -85,7 +85,6 @@
   make_tuple(&av1_fht4x8_c, &av1_iht4x8_32_add_c, ADST_DCT, AOM_BITS_8, 32),
   make_tuple(&av1_fht4x8_c, &av1_iht4x8_32_add_c, DCT_ADST, AOM_BITS_8, 32),
   make_tuple(&av1_fht4x8_c, &av1_iht4x8_32_add_c, ADST_ADST, AOM_BITS_8, 32),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht4x8_c, &av1_iht4x8_32_add_c, FLIPADST_DCT, AOM_BITS_8, 32),
   make_tuple(&av1_fht4x8_c, &av1_iht4x8_32_add_c, DCT_FLIPADST, AOM_BITS_8, 32),
   make_tuple(&av1_fht4x8_c, &av1_iht4x8_32_add_c, FLIPADST_FLIPADST, AOM_BITS_8,
@@ -101,7 +100,6 @@
   make_tuple(&av1_fht4x8_c, &av1_iht4x8_32_add_c, H_ADST, AOM_BITS_8, 32),
   make_tuple(&av1_fht4x8_c, &av1_iht4x8_32_add_c, V_FLIPADST, AOM_BITS_8, 32),
   make_tuple(&av1_fht4x8_c, &av1_iht4x8_32_add_c, H_FLIPADST, AOM_BITS_8, 32)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(C, AV1Trans4x8HT,
                         ::testing::ValuesIn(kArrayHt4x8Param_c));
@@ -116,7 +114,6 @@
              32),
   make_tuple(&av1_fht4x8_sse2, &av1_iht4x8_32_add_sse2, ADST_ADST, AOM_BITS_8,
              32),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht4x8_sse2, &av1_iht4x8_32_add_sse2, FLIPADST_DCT,
              AOM_BITS_8, 32),
   make_tuple(&av1_fht4x8_sse2, &av1_iht4x8_32_add_sse2, DCT_FLIPADST,
@@ -136,7 +133,6 @@
              32),
   make_tuple(&av1_fht4x8_sse2, &av1_iht4x8_32_add_sse2, H_FLIPADST, AOM_BITS_8,
              32)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(SSE2, AV1Trans4x8HT,
                         ::testing::ValuesIn(kArrayHt4x8Param_sse2));
diff --git a/test/av1_fht64x64_test.cc b/test/av1_fht64x64_test.cc
index f2a03e7..3414d00 100644
--- a/test/av1_fht64x64_test.cc
+++ b/test/av1_fht64x64_test.cc
@@ -90,7 +90,6 @@
              4096),
   make_tuple(&av1_fht64x64_c, &av1_iht64x64_4096_add_c, ADST_ADST, AOM_BITS_8,
              4096),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht64x64_c, &av1_iht64x64_4096_add_c, FLIPADST_DCT,
              AOM_BITS_8, 4096),
   make_tuple(&av1_fht64x64_c, &av1_iht64x64_4096_add_c, DCT_FLIPADST,
@@ -114,7 +113,6 @@
              4096),
   make_tuple(&av1_fht64x64_c, &av1_iht64x64_4096_add_c, H_FLIPADST, AOM_BITS_8,
              4096)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(C, AV1Trans64x64HT,
                         ::testing::ValuesIn(kArrayHt64x64Param_c));
diff --git a/test/av1_fht8x16_test.cc b/test/av1_fht8x16_test.cc
index 689cb0b..9490a32 100644
--- a/test/av1_fht8x16_test.cc
+++ b/test/av1_fht8x16_test.cc
@@ -85,7 +85,6 @@
   make_tuple(&av1_fht8x16_c, &av1_iht8x16_128_add_c, DCT_ADST, AOM_BITS_8, 128),
   make_tuple(&av1_fht8x16_c, &av1_iht8x16_128_add_c, ADST_ADST, AOM_BITS_8,
              128),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht8x16_c, &av1_iht8x16_128_add_c, FLIPADST_DCT, AOM_BITS_8,
              128),
   make_tuple(&av1_fht8x16_c, &av1_iht8x16_128_add_c, DCT_FLIPADST, AOM_BITS_8,
@@ -105,7 +104,6 @@
              128),
   make_tuple(&av1_fht8x16_c, &av1_iht8x16_128_add_c, H_FLIPADST, AOM_BITS_8,
              128)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(C, AV1Trans8x16HT,
                         ::testing::ValuesIn(kArrayHt8x16Param_c));
@@ -120,7 +118,6 @@
              128),
   make_tuple(&av1_fht8x16_sse2, &av1_iht8x16_128_add_sse2, ADST_ADST,
              AOM_BITS_8, 128),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht8x16_sse2, &av1_iht8x16_128_add_sse2, FLIPADST_DCT,
              AOM_BITS_8, 128),
   make_tuple(&av1_fht8x16_sse2, &av1_iht8x16_128_add_sse2, DCT_FLIPADST,
@@ -145,7 +142,6 @@
              AOM_BITS_8, 128),
   make_tuple(&av1_fht8x16_sse2, &av1_iht8x16_128_add_sse2, H_FLIPADST,
              AOM_BITS_8, 128)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(SSE2, AV1Trans8x16HT,
                         ::testing::ValuesIn(kArrayHt8x16Param_sse2));
diff --git a/test/av1_fht8x4_test.cc b/test/av1_fht8x4_test.cc
index e50a694..b891031 100644
--- a/test/av1_fht8x4_test.cc
+++ b/test/av1_fht8x4_test.cc
@@ -84,7 +84,6 @@
   make_tuple(&av1_fht8x4_c, &av1_iht8x4_32_add_c, ADST_DCT, AOM_BITS_8, 32),
   make_tuple(&av1_fht8x4_c, &av1_iht8x4_32_add_c, DCT_ADST, AOM_BITS_8, 32),
   make_tuple(&av1_fht8x4_c, &av1_iht8x4_32_add_c, ADST_ADST, AOM_BITS_8, 32),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht8x4_c, &av1_iht8x4_32_add_c, FLIPADST_DCT, AOM_BITS_8, 32),
   make_tuple(&av1_fht8x4_c, &av1_iht8x4_32_add_c, DCT_FLIPADST, AOM_BITS_8, 32),
   make_tuple(&av1_fht8x4_c, &av1_iht8x4_32_add_c, FLIPADST_FLIPADST, AOM_BITS_8,
@@ -100,7 +99,6 @@
   make_tuple(&av1_fht8x4_c, &av1_iht8x4_32_add_c, H_ADST, AOM_BITS_8, 32),
   make_tuple(&av1_fht8x4_c, &av1_iht8x4_32_add_c, V_FLIPADST, AOM_BITS_8, 32),
   make_tuple(&av1_fht8x4_c, &av1_iht8x4_32_add_c, H_FLIPADST, AOM_BITS_8, 32)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(C, AV1Trans8x4HT,
                         ::testing::ValuesIn(kArrayHt8x4Param_c));
@@ -115,7 +113,6 @@
              32),
   make_tuple(&av1_fht8x4_sse2, &av1_iht8x4_32_add_sse2, ADST_ADST, AOM_BITS_8,
              32),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht8x4_sse2, &av1_iht8x4_32_add_sse2, FLIPADST_DCT,
              AOM_BITS_8, 32),
   make_tuple(&av1_fht8x4_sse2, &av1_iht8x4_32_add_sse2, DCT_FLIPADST,
@@ -135,7 +132,6 @@
              32),
   make_tuple(&av1_fht8x4_sse2, &av1_iht8x4_32_add_sse2, H_FLIPADST, AOM_BITS_8,
              32)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(SSE2, AV1Trans8x4HT,
                         ::testing::ValuesIn(kArrayHt8x4Param_sse2));
diff --git a/test/av1_fht8x8_test.cc b/test/av1_fht8x8_test.cc
index d7be488..1bffe4e 100644
--- a/test/av1_fht8x8_test.cc
+++ b/test/av1_fht8x8_test.cc
@@ -177,7 +177,6 @@
              64),
   make_tuple(&av1_fht8x8_sse2, &av1_iht8x8_64_add_sse2, ADST_ADST, AOM_BITS_8,
              64),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fht8x8_sse2, &av1_iht8x8_64_add_sse2, FLIPADST_DCT,
              AOM_BITS_8, 64),
   make_tuple(&av1_fht8x8_sse2, &av1_iht8x8_64_add_sse2, DCT_FLIPADST,
@@ -197,7 +196,6 @@
              64),
   make_tuple(&av1_fht8x8_sse2, &av1_iht8x8_64_add_sse2, H_FLIPADST, AOM_BITS_8,
              64)
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(SSE2, AV1Trans8x8HT,
                         ::testing::ValuesIn(kArrayHt8x8Param_sse2));
@@ -213,7 +211,6 @@
   make_tuple(&av1_fwd_txfm2d_8x8_sse4_1, DCT_ADST, 12),
   make_tuple(&av1_fwd_txfm2d_8x8_sse4_1, ADST_ADST, 10),
   make_tuple(&av1_fwd_txfm2d_8x8_sse4_1, ADST_ADST, 12),
-#if CONFIG_EXT_TX
   make_tuple(&av1_fwd_txfm2d_8x8_sse4_1, FLIPADST_DCT, 10),
   make_tuple(&av1_fwd_txfm2d_8x8_sse4_1, FLIPADST_DCT, 12),
   make_tuple(&av1_fwd_txfm2d_8x8_sse4_1, DCT_FLIPADST, 10),
@@ -224,7 +221,6 @@
   make_tuple(&av1_fwd_txfm2d_8x8_sse4_1, ADST_FLIPADST, 12),
   make_tuple(&av1_fwd_txfm2d_8x8_sse4_1, FLIPADST_ADST, 10),
   make_tuple(&av1_fwd_txfm2d_8x8_sse4_1, FLIPADST_ADST, 12),
-#endif  // CONFIG_EXT_TX
 };
 INSTANTIATE_TEST_CASE_P(SSE4_1, AV1HighbdTrans8x8HT,
                         ::testing::ValuesIn(kArrayHBDHt8x8Param_sse4_1));
diff --git a/test/av1_fwd_txfm2d_test.cc b/test/av1_fwd_txfm2d_test.cc
index adf9a80..33dc3a8 100644
--- a/test/av1_fwd_txfm2d_test.cc
+++ b/test/av1_fwd_txfm2d_test.cc
@@ -134,7 +134,6 @@
 
 TEST_P(AV1FwdTxfm2d, RunFwdAccuracyCheck) { RunFwdAccuracyCheck(); }
 const AV1FwdTxfm2dParam av1_fwd_txfm2d_param_c[] = {
-#if CONFIG_EXT_TX
   AV1FwdTxfm2dParam(FLIPADST_DCT, TX_4X4, 2, 0.2),
   AV1FwdTxfm2dParam(DCT_FLIPADST, TX_4X4, 2, 0.2),
   AV1FwdTxfm2dParam(FLIPADST_FLIPADST, TX_4X4, 2, 0.2),
@@ -155,7 +154,6 @@
   AV1FwdTxfm2dParam(FLIPADST_FLIPADST, TX_32X32, 70, 7),
   AV1FwdTxfm2dParam(ADST_FLIPADST, TX_32X32, 70, 7),
   AV1FwdTxfm2dParam(FLIPADST_ADST, TX_32X32, 70, 7),
-#endif
   AV1FwdTxfm2dParam(DCT_DCT, TX_4X4, 2, 0.2),
   AV1FwdTxfm2dParam(ADST_DCT, TX_4X4, 2, 0.2),
   AV1FwdTxfm2dParam(DCT_ADST, TX_4X4, 2, 0.2),
diff --git a/test/av1_highbd_iht_test.cc b/test/av1_highbd_iht_test.cc
index 25b1f64..7619796 100644
--- a/test/av1_highbd_iht_test.cc
+++ b/test/av1_highbd_iht_test.cc
@@ -163,7 +163,6 @@
   make_tuple(PARAM_LIST_16X16, DCT_ADST, 12),
   make_tuple(PARAM_LIST_16X16, ADST_ADST, 10),
   make_tuple(PARAM_LIST_16X16, ADST_ADST, 12),
-#if CONFIG_EXT_TX
   make_tuple(PARAM_LIST_16X16, FLIPADST_DCT, 10),
   make_tuple(PARAM_LIST_16X16, FLIPADST_DCT, 12),
   make_tuple(PARAM_LIST_16X16, DCT_FLIPADST, 10),
@@ -175,7 +174,6 @@
   make_tuple(PARAM_LIST_16X16, FLIPADST_ADST, 10),
   make_tuple(PARAM_LIST_16X16, FLIPADST_ADST, 12),
 #endif
-#endif
 // 8x8
 #if !CONFIG_DAALA_TX8
   make_tuple(PARAM_LIST_8X8, DCT_DCT, 10),
@@ -186,7 +184,6 @@
   make_tuple(PARAM_LIST_8X8, DCT_ADST, 12),
   make_tuple(PARAM_LIST_8X8, ADST_ADST, 10),
   make_tuple(PARAM_LIST_8X8, ADST_ADST, 12),
-#if CONFIG_EXT_TX
   make_tuple(PARAM_LIST_8X8, FLIPADST_DCT, 10),
   make_tuple(PARAM_LIST_8X8, FLIPADST_DCT, 12),
   make_tuple(PARAM_LIST_8X8, DCT_FLIPADST, 10),
@@ -198,7 +195,6 @@
   make_tuple(PARAM_LIST_8X8, FLIPADST_ADST, 10),
   make_tuple(PARAM_LIST_8X8, FLIPADST_ADST, 12),
 #endif
-#endif
 // 4x4
 #if !CONFIG_DAALA_TX4
   make_tuple(PARAM_LIST_4X4, DCT_DCT, 10),
@@ -209,7 +205,6 @@
   make_tuple(PARAM_LIST_4X4, DCT_ADST, 12),
   make_tuple(PARAM_LIST_4X4, ADST_ADST, 10),
   make_tuple(PARAM_LIST_4X4, ADST_ADST, 12),
-#if CONFIG_EXT_TX
   make_tuple(PARAM_LIST_4X4, FLIPADST_DCT, 10),
   make_tuple(PARAM_LIST_4X4, FLIPADST_DCT, 12),
   make_tuple(PARAM_LIST_4X4, DCT_FLIPADST, 10),
@@ -221,7 +216,6 @@
   make_tuple(PARAM_LIST_4X4, FLIPADST_ADST, 10),
   make_tuple(PARAM_LIST_4X4, FLIPADST_ADST, 12),
 #endif
-#endif
 };
 
 INSTANTIATE_TEST_CASE_P(SSE4_1, AV1HighbdInvHTNxN,
diff --git a/test/av1_inv_txfm2d_test.cc b/test/av1_inv_txfm2d_test.cc
index 6226458..4aa943f 100644
--- a/test/av1_inv_txfm2d_test.cc
+++ b/test/av1_inv_txfm2d_test.cc
@@ -101,7 +101,6 @@
 TEST_P(AV1InvTxfm2d, RunRoundtripCheck) { RunRoundtripCheck(); }
 
 const AV1InvTxfm2dParam av1_inv_txfm2d_param[] = {
-#if CONFIG_EXT_TX
   AV1InvTxfm2dParam(DCT_DCT, TX_4X8, 2, 0.007),
   AV1InvTxfm2dParam(ADST_DCT, TX_4X8, 2, 0.012),
   AV1InvTxfm2dParam(DCT_ADST, TX_4X8, 2, 0.012),
@@ -162,7 +161,6 @@
   AV1InvTxfm2dParam(FLIPADST_FLIPADST, TX_32X32, 4, 0.4),
   AV1InvTxfm2dParam(ADST_FLIPADST, TX_32X32, 4, 0.4),
   AV1InvTxfm2dParam(FLIPADST_ADST, TX_32X32, 4, 0.4),
-#endif
   AV1InvTxfm2dParam(DCT_DCT, TX_4X4, 2, 0.002),
   AV1InvTxfm2dParam(ADST_DCT, TX_4X4, 2, 0.002),
   AV1InvTxfm2dParam(DCT_ADST, TX_4X4, 2, 0.002),
diff --git a/test/av1_txfm_test.cc b/test/av1_txfm_test.cc
index 4545de1..235872c 100644
--- a/test/av1_txfm_test.cc
+++ b/test/av1_txfm_test.cc
@@ -34,7 +34,6 @@
       *type0 = TYPE_ADST;
       *type1 = TYPE_ADST;
       break;
-#if CONFIG_EXT_TX
     case FLIPADST_DCT:
       *type0 = TYPE_ADST;
       *type1 = TYPE_DCT;
@@ -55,7 +54,6 @@
       *type0 = TYPE_ADST;
       *type1 = TYPE_ADST;
       break;
-#endif  // CONFIG_EXT_TX
     default:
       *type0 = TYPE_DCT;
       *type1 = TYPE_DCT;
diff --git a/test/dct16x16_test.cc b/test/dct16x16_test.cc
index f82864f..5adc296 100644
--- a/test/dct16x16_test.cc
+++ b/test/dct16x16_test.cc
@@ -871,18 +871,5 @@
                         ::testing::Values(make_tuple(&aom_fdct16x16_msa,
                                                      &aom_idct16x16_256_add_msa,
                                                      DCT_DCT, AOM_BITS_8)));
-#if !CONFIG_EXT_TX && !CONFIG_DAALA_TX16
-// TODO(yaowu): re-enable this after msa versions are updated to match C.
-INSTANTIATE_TEST_CASE_P(
-    DISABLED_MSA, Trans16x16HT,
-    ::testing::Values(make_tuple(&av1_fht16x16_msa, &av1_iht16x16_256_add_msa,
-                                 DCT_DCT, AOM_BITS_8),
-                      make_tuple(&av1_fht16x16_msa, &av1_iht16x16_256_add_msa,
-                                 ADST_DCT, AOM_BITS_8),
-                      make_tuple(&av1_fht16x16_msa, &av1_iht16x16_256_add_msa,
-                                 DCT_ADST, AOM_BITS_8),
-                      make_tuple(&av1_fht16x16_msa, &av1_iht16x16_256_add_msa,
-                                 ADST_ADST, AOM_BITS_8)));
-#endif  // !CONFIG_EXT_TX && !CONFIG_DAALA_TX16
 #endif  // HAVE_MSA && !CONFIG_HIGHBITDEPTH
 }  // namespace
diff --git a/test/fdct4x4_test.cc b/test/fdct4x4_test.cc
index 67e4505..5ce263c 100644
--- a/test/fdct4x4_test.cc
+++ b/test/fdct4x4_test.cc
@@ -334,17 +334,5 @@
                         ::testing::Values(make_tuple(&aom_fdct4x4_msa,
                                                      &aom_idct4x4_16_add_msa,
                                                      DCT_DCT, AOM_BITS_8, 16)));
-#if !CONFIG_EXT_TX && !CONFIG_DAALA_TX4
-INSTANTIATE_TEST_CASE_P(
-    MSA, Trans4x4HT,
-    ::testing::Values(make_tuple(&av1_fht4x4_msa, &av1_iht4x4_16_add_msa,
-                                 DCT_DCT, AOM_BITS_8, 16),
-                      make_tuple(&av1_fht4x4_msa, &av1_iht4x4_16_add_msa,
-                                 ADST_DCT, AOM_BITS_8, 16),
-                      make_tuple(&av1_fht4x4_msa, &av1_iht4x4_16_add_msa,
-                                 DCT_ADST, AOM_BITS_8, 16),
-                      make_tuple(&av1_fht4x4_msa, &av1_iht4x4_16_add_msa,
-                                 ADST_ADST, AOM_BITS_8, 16)));
-#endif  // !CONFIG_EXT_TX && && !CONFIG_DAALA_TX4
 #endif  // HAVE_MSA && !CONFIG_HIGHBITDEPTH
 }  // namespace
diff --git a/test/fdct8x8_test.cc b/test/fdct8x8_test.cc
index ca45b39..2b8f524 100644
--- a/test/fdct8x8_test.cc
+++ b/test/fdct8x8_test.cc
@@ -722,17 +722,5 @@
                         ::testing::Values(make_tuple(&aom_fdct8x8_msa,
                                                      &aom_idct8x8_64_add_msa,
                                                      DCT_DCT, AOM_BITS_8)));
-#if !CONFIG_EXT_TX && !CONFIG_DAALA_TX8
-INSTANTIATE_TEST_CASE_P(
-    MSA, FwdTrans8x8HT,
-    ::testing::Values(make_tuple(&av1_fht8x8_msa, &av1_iht8x8_64_add_msa,
-                                 DCT_DCT, AOM_BITS_8),
-                      make_tuple(&av1_fht8x8_msa, &av1_iht8x8_64_add_msa,
-                                 ADST_DCT, AOM_BITS_8),
-                      make_tuple(&av1_fht8x8_msa, &av1_iht8x8_64_add_msa,
-                                 DCT_ADST, AOM_BITS_8),
-                      make_tuple(&av1_fht8x8_msa, &av1_iht8x8_64_add_msa,
-                                 ADST_ADST, AOM_BITS_8)));
-#endif  // !CONFIG_EXT_TX && !CONFIG_DAALA_TX8
 #endif  // HAVE_MSA && !CONFIG_HIGHBITDEPTH
 }  // namespace
diff --git a/test/test.cmake b/test/test.cmake
index 437e46f..693f778 100644
--- a/test/test.cmake
+++ b/test/test.cmake
@@ -263,17 +263,15 @@
       endif ()
     endif ()
 
-    if (CONFIG_EXT_TX)
-      set(AOM_UNIT_TEST_ENCODER_SOURCES
-          ${AOM_UNIT_TEST_ENCODER_SOURCES}
-          "${AOM_ROOT}/test/av1_fht16x32_test.cc"
-          "${AOM_ROOT}/test/av1_fht16x8_test.cc"
-          "${AOM_ROOT}/test/av1_fht32x16_test.cc"
-          "${AOM_ROOT}/test/av1_fht4x4_test.cc"
-          "${AOM_ROOT}/test/av1_fht4x8_test.cc"
-          "${AOM_ROOT}/test/av1_fht8x16_test.cc"
-          "${AOM_ROOT}/test/av1_fht8x4_test.cc")
-    endif ()
+    set(AOM_UNIT_TEST_ENCODER_SOURCES
+        ${AOM_UNIT_TEST_ENCODER_SOURCES}
+        "${AOM_ROOT}/test/av1_fht16x32_test.cc"
+        "${AOM_ROOT}/test/av1_fht16x8_test.cc"
+        "${AOM_ROOT}/test/av1_fht32x16_test.cc"
+        "${AOM_ROOT}/test/av1_fht4x4_test.cc"
+        "${AOM_ROOT}/test/av1_fht4x8_test.cc"
+        "${AOM_ROOT}/test/av1_fht8x16_test.cc"
+        "${AOM_ROOT}/test/av1_fht8x4_test.cc")
 
     set(AOM_UNIT_TEST_ENCODER_INTRIN_SSE4_1
         ${AOM_UNIT_TEST_ENCODER_INTRIN_SSE4_1}
diff --git a/test/test.mk b/test/test.mk
index 8acb5f7..9b9d170 100644
--- a/test/test.mk
+++ b/test/test.mk
@@ -181,14 +181,12 @@
 ifeq ($(CONFIG_TX64X64),yes)
 LIBAOM_TEST_SRCS-$(CONFIG_AV1_ENCODER) += av1_fht64x64_test.cc
 endif
-ifeq ($(CONFIG_EXT_TX),yes)
 LIBAOM_TEST_SRCS-$(CONFIG_AV1_ENCODER) += av1_fht4x8_test.cc
 LIBAOM_TEST_SRCS-$(CONFIG_AV1_ENCODER) += av1_fht8x4_test.cc
 LIBAOM_TEST_SRCS-$(CONFIG_AV1_ENCODER) += av1_fht8x16_test.cc
 LIBAOM_TEST_SRCS-$(CONFIG_AV1_ENCODER) += av1_fht16x8_test.cc
 LIBAOM_TEST_SRCS-$(CONFIG_AV1_ENCODER) += av1_fht16x32_test.cc
 LIBAOM_TEST_SRCS-$(CONFIG_AV1_ENCODER) += av1_fht32x16_test.cc
-endif
 
 LIBAOM_TEST_SRCS-$(CONFIG_AV1_ENCODER) += sum_squares_test.cc
 LIBAOM_TEST_SRCS-$(CONFIG_AV1_ENCODER) += subtract_test.cc
diff --git a/tools/aom_entropy_optimizer.c b/tools/aom_entropy_optimizer.c
index 4ae4ea7..c985b39 100644
--- a/tools/aom_entropy_optimizer.c
+++ b/tools/aom_entropy_optimizer.c
@@ -704,21 +704,7 @@
 #endif
 
 /* Transform type */
-#if CONFIG_EXT_TX
 // TODO(yuec): different trees are used depending on selected ext tx set
-#else
-  // TODO(yuec): intra_ext_tx use different trees depending on the context
-  cts_each_dim[0] = EXT_TX_SIZES;
-  cts_each_dim[1] = TX_TYPES;
-  optimize_entropy_table(&fc.inter_ext_tx[0][0], probsfile, 2, cts_each_dim,
-                         av1_ext_tx_tree, 0,
-                         "static const aom_prob default_inter_ext_tx_prob"
-                         "[EXT_TX_SIZES][TX_TYPES - 1]");
-  optimize_cdf_table(&fc.inter_ext_tx[0][0], probsfile, 2, cts_each_dim,
-                     "static const aom_cdf_prob "
-                     "default_inter_ext_tx_prob[EXT_TX_SIZES][CDF_SIZE(TX_"
-                     "TYPES)]");
-#endif
 
 /* supertx experiment */
 
