-#define filters_8tap_1d_fn(op, sz, dir, dvar) \
-filter_8tap_1d_fn(op, sz, FILTER_8TAP_REGULAR, regular, dir, dvar) \
-filter_8tap_1d_fn(op, sz, FILTER_8TAP_SHARP, sharp, dir, dvar) \
-filter_8tap_1d_fn(op, sz, FILTER_8TAP_SMOOTH, smooth, dir, dvar)
-
-#define filters_8tap_1d_fn2(op, sz) \
-filters_8tap_1d_fn(op, sz, h, mx) \
-filters_8tap_1d_fn(op, sz, v, my)
-
-#define filters_8tap_1d_fn3(op) \
-filters_8tap_1d_fn2(op, 64) \
-filters_8tap_1d_fn2(op, 32) \
-filters_8tap_1d_fn2(op, 16) \
-filters_8tap_1d_fn2(op, 8) \
-filters_8tap_1d_fn2(op, 4)
-
-filters_8tap_1d_fn3(put)
-filters_8tap_1d_fn3(avg)
+#define filters_8tap_1d_fn(op, sz, dir, dvar, opt) \
+filter_8tap_1d_fn(op, sz, FILTER_8TAP_REGULAR, regular, dir, dvar, opt) \
+filter_8tap_1d_fn(op, sz, FILTER_8TAP_SHARP, sharp, dir, dvar, opt) \
+filter_8tap_1d_fn(op, sz, FILTER_8TAP_SMOOTH, smooth, dir, dvar, opt)
+
+#define filters_8tap_1d_fn2(op, sz, opt) \
+filters_8tap_1d_fn(op, sz, h, mx, opt) \
+filters_8tap_1d_fn(op, sz, v, my, opt)
+
+#define filters_8tap_1d_fn3(op, opt) \
+filters_8tap_1d_fn2(op, 64, opt) \
+filters_8tap_1d_fn2(op, 32, opt) \
+filters_8tap_1d_fn2(op, 16, opt) \
+filters_8tap_1d_fn2(op, 8, opt) \
+filters_8tap_1d_fn2(op, 4, opt)
+
+filters_8tap_1d_fn3(put, ssse3)
+filters_8tap_1d_fn3(avg, ssse3)
+#if ARCH_X86_64 && HAVE_AVX2_EXTERNAL
+filters_8tap_1d_fn2(put, 64, avx2)
+filters_8tap_1d_fn2(put, 32, avx2)
+filters_8tap_1d_fn2(avg, 64, avx2)
+filters_8tap_1d_fn2(avg, 32, avx2)
+#endif