diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0ccef4e..fec7d05 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -374,8 +374,6 @@
     #"${AOM_ROOT}/test/accounting_test.cc"
     "${AOM_ROOT}/test/acm_random.h"
     "${AOM_ROOT}/test/active_map_test.cc"
-    # not in test.mk
-    #"${AOM_ROOT}/test/add_noise_test.cc"
     "${AOM_ROOT}/test/altref_test.cc"
     "${AOM_ROOT}/test/android"
     # requires CONFIG_ANS
diff --git a/aom_dsp/deblock.c b/aom_dsp/deblock.c
deleted file mode 100644
index ec53891..0000000
--- a/aom_dsp/deblock.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- *
- */
-
-#include <stdlib.h>
-#include "aom/aom_integer.h"
-
-const int16_t aom_rv[] = {
-  8,  5,  2,  2,  8,  12, 4,  9,  8,  3,  0,  3,  9,  0,  0,  0,  8,  3,  14,
-  4,  10, 1,  11, 14, 1,  14, 9,  6,  12, 11, 8,  6,  10, 0,  0,  8,  9,  0,
-  3,  14, 8,  11, 13, 4,  2,  9,  0,  3,  9,  6,  1,  2,  3,  14, 13, 1,  8,
-  2,  9,  7,  3,  3,  1,  13, 13, 6,  6,  5,  2,  7,  11, 9,  11, 8,  7,  3,
-  2,  0,  13, 13, 14, 4,  12, 5,  12, 10, 8,  10, 13, 10, 4,  14, 4,  10, 0,
-  8,  11, 1,  13, 7,  7,  14, 6,  14, 13, 2,  13, 5,  4,  4,  0,  10, 0,  5,
-  13, 2,  12, 7,  11, 13, 8,  0,  4,  10, 7,  2,  7,  2,  2,  5,  3,  4,  7,
-  3,  3,  14, 14, 5,  9,  13, 3,  14, 3,  6,  3,  0,  11, 8,  13, 1,  13, 1,
-  12, 0,  10, 9,  7,  6,  2,  8,  5,  2,  13, 7,  1,  13, 14, 7,  6,  7,  9,
-  6,  10, 11, 7,  8,  7,  5,  14, 8,  4,  4,  0,  8,  7,  10, 0,  8,  14, 11,
-  3,  12, 5,  7,  14, 3,  14, 5,  2,  6,  11, 12, 12, 8,  0,  11, 13, 1,  2,
-  0,  5,  10, 14, 7,  8,  0,  4,  11, 0,  8,  0,  3,  10, 5,  8,  0,  11, 6,
-  7,  8,  10, 7,  13, 9,  2,  5,  1,  5,  10, 2,  4,  3,  5,  6,  10, 8,  9,
-  4,  11, 14, 0,  10, 0,  5,  13, 2,  12, 7,  11, 13, 8,  0,  4,  10, 7,  2,
-  7,  2,  2,  5,  3,  4,  7,  3,  3,  14, 14, 5,  9,  13, 3,  14, 3,  6,  3,
-  0,  11, 8,  13, 1,  13, 1,  12, 0,  10, 9,  7,  6,  2,  8,  5,  2,  13, 7,
-  1,  13, 14, 7,  6,  7,  9,  6,  10, 11, 7,  8,  7,  5,  14, 8,  4,  4,  0,
-  8,  7,  10, 0,  8,  14, 11, 3,  12, 5,  7,  14, 3,  14, 5,  2,  6,  11, 12,
-  12, 8,  0,  11, 13, 1,  2,  0,  5,  10, 14, 7,  8,  0,  4,  11, 0,  8,  0,
-  3,  10, 5,  8,  0,  11, 6,  7,  8,  10, 7,  13, 9,  2,  5,  1,  5,  10, 2,
-  4,  3,  5,  6,  10, 8,  9,  4,  11, 14, 3,  8,  3,  7,  8,  5,  11, 4,  12,
-  3,  11, 9,  14, 8,  14, 13, 4,  3,  1,  2,  14, 6,  5,  4,  4,  11, 4,  6,
-  2,  1,  5,  8,  8,  12, 13, 5,  14, 10, 12, 13, 0,  9,  5,  5,  11, 10, 13,
-  9,  10, 13,
-};
-
-void aom_post_proc_down_and_across_mb_row_c(unsigned char *src_ptr,
-                                            unsigned char *dst_ptr,
-                                            int src_pixels_per_line,
-                                            int dst_pixels_per_line, int cols,
-                                            unsigned char *f, int size) {
-  unsigned char *p_src, *p_dst;
-  int row;
-  int col;
-  unsigned char v;
-  unsigned char d[4];
-
-  for (row = 0; row < size; row++) {
-    /* post_proc_down for one row */
-    p_src = src_ptr;
-    p_dst = dst_ptr;
-
-    for (col = 0; col < cols; col++) {
-      unsigned char p_above2 = p_src[col - 2 * src_pixels_per_line];
-      unsigned char p_above1 = p_src[col - src_pixels_per_line];
-      unsigned char p_below1 = p_src[col + src_pixels_per_line];
-      unsigned char p_below2 = p_src[col + 2 * src_pixels_per_line];
-
-      v = p_src[col];
-
-      if ((abs(v - p_above2) < f[col]) && (abs(v - p_above1) < f[col]) &&
-          (abs(v - p_below1) < f[col]) && (abs(v - p_below2) < f[col])) {
-        unsigned char k1, k2, k3;
-        k1 = (p_above2 + p_above1 + 1) >> 1;
-        k2 = (p_below2 + p_below1 + 1) >> 1;
-        k3 = (k1 + k2 + 1) >> 1;
-        v = (k3 + v + 1) >> 1;
-      }
-
-      p_dst[col] = v;
-    }
-
-    /* now post_proc_across */
-    p_src = dst_ptr;
-    p_dst = dst_ptr;
-
-    p_src[-2] = p_src[-1] = p_src[0];
-    p_src[cols] = p_src[cols + 1] = p_src[cols - 1];
-
-    for (col = 0; col < cols; col++) {
-      v = p_src[col];
-
-      if ((abs(v - p_src[col - 2]) < f[col]) &&
-          (abs(v - p_src[col - 1]) < f[col]) &&
-          (abs(v - p_src[col + 1]) < f[col]) &&
-          (abs(v - p_src[col + 2]) < f[col])) {
-        unsigned char k1, k2, k3;
-        k1 = (p_src[col - 2] + p_src[col - 1] + 1) >> 1;
-        k2 = (p_src[col + 2] + p_src[col + 1] + 1) >> 1;
-        k3 = (k1 + k2 + 1) >> 1;
-        v = (k3 + v + 1) >> 1;
-      }
-
-      d[col & 3] = v;
-
-      if (col >= 2) p_dst[col - 2] = d[(col - 2) & 3];
-    }
-
-    /* handle the last two pixels */
-    p_dst[col - 2] = d[(col - 2) & 3];
-    p_dst[col - 1] = d[(col - 1) & 3];
-
-    /* next row */
-    src_ptr += src_pixels_per_line;
-    dst_ptr += dst_pixels_per_line;
-  }
-}
-
-void aom_mbpost_proc_across_ip_c(unsigned char *src, int pitch, int rows,
-                                 int cols, int flimit) {
-  int r, c, i;
-
-  unsigned char *s = src;
-  unsigned char d[16];
-
-  for (r = 0; r < rows; r++) {
-    int sumsq = 0;
-    int sum = 0;
-
-    for (i = -8; i < 0; i++) s[i] = s[0];
-
-    /* 17 avoids valgrind warning - we buffer values in c in d
-     * and only write them when we've read 8 ahead...
-     */
-    for (i = 0; i < 17; i++) s[i + cols] = s[cols - 1];
-
-    for (i = -8; i <= 6; i++) {
-      sumsq += s[i] * s[i];
-      sum += s[i];
-      d[i + 8] = 0;
-    }
-
-    for (c = 0; c < cols + 8; c++) {
-      int x = s[c + 7] - s[c - 8];
-      int y = s[c + 7] + s[c - 8];
-
-      sum += x;
-      sumsq += x * y;
-
-      d[c & 15] = s[c];
-
-      if (sumsq * 15 - sum * sum < flimit) {
-        d[c & 15] = (8 + sum + s[c]) >> 4;
-      }
-
-      s[c - 8] = d[(c - 8) & 15];
-    }
-
-    s += pitch;
-  }
-}
-
-void aom_mbpost_proc_down_c(unsigned char *dst, int pitch, int rows, int cols,
-                            int flimit) {
-  int r, c, i;
-  const int16_t *rv3 = &aom_rv[63 & rand()];
-
-  for (c = 0; c < cols; c++) {
-    unsigned char *s = &dst[c];
-    int sumsq = 0;
-    int sum = 0;
-    unsigned char d[16];
-    const int16_t *rv2 = rv3 + ((c * 17) & 127);
-
-    for (i = -8; i < 0; i++) s[i * pitch] = s[0];
-
-    /* 17 avoids valgrind warning - we buffer values in c in d
-     * and only write them when we've read 8 ahead...
-     */
-    for (i = 0; i < 17; i++) s[(i + rows) * pitch] = s[(rows - 1) * pitch];
-
-    for (i = -8; i <= 6; i++) {
-      sumsq += s[i * pitch] * s[i * pitch];
-      sum += s[i * pitch];
-    }
-
-    for (r = 0; r < rows + 8; r++) {
-      sumsq += s[7 * pitch] * s[7 * pitch] - s[-8 * pitch] * s[-8 * pitch];
-      sum += s[7 * pitch] - s[-8 * pitch];
-      d[r & 15] = s[0];
-
-      if (sumsq * 15 - sum * sum < flimit) {
-        d[r & 15] = (rv2[r & 127] + sum + s[0]) >> 4;
-      }
-      if (r >= 8) s[-8 * pitch] = d[(r - 8) & 15];
-      s += pitch;
-    }
-  }
-}
diff --git a/aom_dsp/mips/deblock_msa.c b/aom_dsp/mips/deblock_msa.c
deleted file mode 100644
index 6f97296..0000000
--- a/aom_dsp/mips/deblock_msa.c
+++ /dev/null
@@ -1,682 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <stdlib.h>
-#include "./macros_msa.h"
-
-extern const int16_t aom_rv[];
-
-#define AOM_TRANSPOSE8x16_UB_UB(in0, in1, in2, in3, in4, in5, in6, in7, out0,  \
-                                out1, out2, out3, out4, out5, out6, out7,      \
-                                out8, out9, out10, out11, out12, out13, out14, \
-                                out15)                                         \
-  {                                                                            \
-    v8i16 temp0, temp1, temp2, temp3, temp4;                                   \
-    v8i16 temp5, temp6, temp7, temp8, temp9;                                   \
-                                                                               \
-    ILVR_B4_SH(in1, in0, in3, in2, in5, in4, in7, in6, temp0, temp1, temp2,    \
-               temp3);                                                         \
-    ILVR_H2_SH(temp1, temp0, temp3, temp2, temp4, temp5);                      \
-    ILVRL_W2_SH(temp5, temp4, temp6, temp7);                                   \
-    ILVL_H2_SH(temp1, temp0, temp3, temp2, temp4, temp5);                      \
-    ILVRL_W2_SH(temp5, temp4, temp8, temp9);                                   \
-    ILVL_B4_SH(in1, in0, in3, in2, in5, in4, in7, in6, temp0, temp1, temp2,    \
-               temp3);                                                         \
-    ILVR_H2_SH(temp1, temp0, temp3, temp2, temp4, temp5);                      \
-    ILVRL_W2_UB(temp5, temp4, out8, out10);                                    \
-    ILVL_H2_SH(temp1, temp0, temp3, temp2, temp4, temp5);                      \
-    ILVRL_W2_UB(temp5, temp4, out12, out14);                                   \
-    out0 = (v16u8)temp6;                                                       \
-    out2 = (v16u8)temp7;                                                       \
-    out4 = (v16u8)temp8;                                                       \
-    out6 = (v16u8)temp9;                                                       \
-    out9 = (v16u8)__msa_ilvl_d((v2i64)out8, (v2i64)out8);                      \
-    out11 = (v16u8)__msa_ilvl_d((v2i64)out10, (v2i64)out10);                   \
-    out13 = (v16u8)__msa_ilvl_d((v2i64)out12, (v2i64)out12);                   \
-    out15 = (v16u8)__msa_ilvl_d((v2i64)out14, (v2i64)out14);                   \
-    out1 = (v16u8)__msa_ilvl_d((v2i64)out0, (v2i64)out0);                      \
-    out3 = (v16u8)__msa_ilvl_d((v2i64)out2, (v2i64)out2);                      \
-    out5 = (v16u8)__msa_ilvl_d((v2i64)out4, (v2i64)out4);                      \
-    out7 = (v16u8)__msa_ilvl_d((v2i64)out6, (v2i64)out6);                      \
-  }
-
-#define AOM_AVER_IF_RETAIN(above2_in, above1_in, src_in, below1_in, below2_in, \
-                           ref, out)                                           \
-  {                                                                            \
-    v16u8 temp0, temp1;                                                        \
-                                                                               \
-    temp1 = __msa_aver_u_b(above2_in, above1_in);                              \
-    temp0 = __msa_aver_u_b(below2_in, below1_in);                              \
-    temp1 = __msa_aver_u_b(temp1, temp0);                                      \
-    out = __msa_aver_u_b(src_in, temp1);                                       \
-    temp0 = __msa_asub_u_b(src_in, above2_in);                                 \
-    temp1 = __msa_asub_u_b(src_in, above1_in);                                 \
-    temp0 = (temp0 < ref);                                                     \
-    temp1 = (temp1 < ref);                                                     \
-    temp0 = temp0 & temp1;                                                     \
-    temp1 = __msa_asub_u_b(src_in, below1_in);                                 \
-    temp1 = (temp1 < ref);                                                     \
-    temp0 = temp0 & temp1;                                                     \
-    temp1 = __msa_asub_u_b(src_in, below2_in);                                 \
-    temp1 = (temp1 < ref);                                                     \
-    temp0 = temp0 & temp1;                                                     \
-    out = __msa_bmz_v(out, src_in, temp0);                                     \
-  }
-
-#define TRANSPOSE12x16_B(in0, in1, in2, in3, in4, in5, in6, in7, in8, in9,    \
-                         in10, in11, in12, in13, in14, in15)                  \
-  {                                                                           \
-    v8i16 temp0, temp1, temp2, temp3, temp4;                                  \
-    v8i16 temp5, temp6, temp7, temp8, temp9;                                  \
-                                                                              \
-    ILVR_B2_SH(in1, in0, in3, in2, temp0, temp1);                             \
-    ILVRL_H2_SH(temp1, temp0, temp2, temp3);                                  \
-    ILVR_B2_SH(in5, in4, in7, in6, temp0, temp1);                             \
-    ILVRL_H2_SH(temp1, temp0, temp4, temp5);                                  \
-    ILVRL_W2_SH(temp4, temp2, temp0, temp1);                                  \
-    ILVRL_W2_SH(temp5, temp3, temp2, temp3);                                  \
-    ILVR_B2_SH(in9, in8, in11, in10, temp4, temp5);                           \
-    ILVR_B2_SH(in9, in8, in11, in10, temp4, temp5);                           \
-    ILVRL_H2_SH(temp5, temp4, temp6, temp7);                                  \
-    ILVR_B2_SH(in13, in12, in15, in14, temp4, temp5);                         \
-    ILVRL_H2_SH(temp5, temp4, temp8, temp9);                                  \
-    ILVRL_W2_SH(temp8, temp6, temp4, temp5);                                  \
-    ILVRL_W2_SH(temp9, temp7, temp6, temp7);                                  \
-    ILVL_B2_SH(in1, in0, in3, in2, temp8, temp9);                             \
-    ILVR_D2_UB(temp4, temp0, temp5, temp1, in0, in2);                         \
-    in1 = (v16u8)__msa_ilvl_d((v2i64)temp4, (v2i64)temp0);                    \
-    in3 = (v16u8)__msa_ilvl_d((v2i64)temp5, (v2i64)temp1);                    \
-    ILVL_B2_SH(in5, in4, in7, in6, temp0, temp1);                             \
-    ILVR_D2_UB(temp6, temp2, temp7, temp3, in4, in6);                         \
-    in5 = (v16u8)__msa_ilvl_d((v2i64)temp6, (v2i64)temp2);                    \
-    in7 = (v16u8)__msa_ilvl_d((v2i64)temp7, (v2i64)temp3);                    \
-    ILVL_B4_SH(in9, in8, in11, in10, in13, in12, in15, in14, temp2, temp3,    \
-               temp4, temp5);                                                 \
-    ILVR_H4_SH(temp9, temp8, temp1, temp0, temp3, temp2, temp5, temp4, temp6, \
-               temp7, temp8, temp9);                                          \
-    ILVR_W2_SH(temp7, temp6, temp9, temp8, temp0, temp1);                     \
-    in8 = (v16u8)__msa_ilvr_d((v2i64)temp1, (v2i64)temp0);                    \
-    in9 = (v16u8)__msa_ilvl_d((v2i64)temp1, (v2i64)temp0);                    \
-    ILVL_W2_SH(temp7, temp6, temp9, temp8, temp2, temp3);                     \
-    in10 = (v16u8)__msa_ilvr_d((v2i64)temp3, (v2i64)temp2);                   \
-    in11 = (v16u8)__msa_ilvl_d((v2i64)temp3, (v2i64)temp2);                   \
-  }
-
-#define AOM_TRANSPOSE12x8_UB_UB(in0, in1, in2, in3, in4, in5, in6, in7, in8, \
-                                in9, in10, in11)                             \
-  {                                                                          \
-    v8i16 temp0, temp1, temp2, temp3;                                        \
-    v8i16 temp4, temp5, temp6, temp7;                                        \
-                                                                             \
-    ILVR_B2_SH(in1, in0, in3, in2, temp0, temp1);                            \
-    ILVRL_H2_SH(temp1, temp0, temp2, temp3);                                 \
-    ILVR_B2_SH(in5, in4, in7, in6, temp0, temp1);                            \
-    ILVRL_H2_SH(temp1, temp0, temp4, temp5);                                 \
-    ILVRL_W2_SH(temp4, temp2, temp0, temp1);                                 \
-    ILVRL_W2_SH(temp5, temp3, temp2, temp3);                                 \
-    ILVL_B2_SH(in1, in0, in3, in2, temp4, temp5);                            \
-    temp4 = __msa_ilvr_h(temp5, temp4);                                      \
-    ILVL_B2_SH(in5, in4, in7, in6, temp6, temp7);                            \
-    temp5 = __msa_ilvr_h(temp7, temp6);                                      \
-    ILVRL_W2_SH(temp5, temp4, temp6, temp7);                                 \
-    in0 = (v16u8)temp0;                                                      \
-    in2 = (v16u8)temp1;                                                      \
-    in4 = (v16u8)temp2;                                                      \
-    in6 = (v16u8)temp3;                                                      \
-    in8 = (v16u8)temp6;                                                      \
-    in10 = (v16u8)temp7;                                                     \
-    in1 = (v16u8)__msa_ilvl_d((v2i64)temp0, (v2i64)temp0);                   \
-    in3 = (v16u8)__msa_ilvl_d((v2i64)temp1, (v2i64)temp1);                   \
-    in5 = (v16u8)__msa_ilvl_d((v2i64)temp2, (v2i64)temp2);                   \
-    in7 = (v16u8)__msa_ilvl_d((v2i64)temp3, (v2i64)temp3);                   \
-    in9 = (v16u8)__msa_ilvl_d((v2i64)temp6, (v2i64)temp6);                   \
-    in11 = (v16u8)__msa_ilvl_d((v2i64)temp7, (v2i64)temp7);                  \
-  }
-
-static void postproc_down_across_chroma_msa(uint8_t *src_ptr, uint8_t *dst_ptr,
-                                            int32_t src_stride,
-                                            int32_t dst_stride, int32_t cols,
-                                            uint8_t *f) {
-  uint8_t *p_src = src_ptr;
-  uint8_t *p_dst = dst_ptr;
-  uint8_t *f_orig = f;
-  uint8_t *p_dst_st = dst_ptr;
-  uint16_t col;
-  uint64_t out0, out1, out2, out3;
-  v16u8 above2, above1, below2, below1, src, ref, ref_temp;
-  v16u8 inter0, inter1, inter2, inter3, inter4, inter5;
-  v16u8 inter6, inter7, inter8, inter9, inter10, inter11;
-
-  for (col = (cols / 16); col--;) {
-    ref = LD_UB(f);
-    LD_UB2(p_src - 2 * src_stride, src_stride, above2, above1);
-    src = LD_UB(p_src);
-    LD_UB2(p_src + 1 * src_stride, src_stride, below1, below2);
-    AOM_AVER_IF_RETAIN(above2, above1, src, below1, below2, ref, inter0);
-    above2 = LD_UB(p_src + 3 * src_stride);
-    AOM_AVER_IF_RETAIN(above1, src, below1, below2, above2, ref, inter1);
-    above1 = LD_UB(p_src + 4 * src_stride);
-    AOM_AVER_IF_RETAIN(src, below1, below2, above2, above1, ref, inter2);
-    src = LD_UB(p_src + 5 * src_stride);
-    AOM_AVER_IF_RETAIN(below1, below2, above2, above1, src, ref, inter3);
-    below1 = LD_UB(p_src + 6 * src_stride);
-    AOM_AVER_IF_RETAIN(below2, above2, above1, src, below1, ref, inter4);
-    below2 = LD_UB(p_src + 7 * src_stride);
-    AOM_AVER_IF_RETAIN(above2, above1, src, below1, below2, ref, inter5);
-    above2 = LD_UB(p_src + 8 * src_stride);
-    AOM_AVER_IF_RETAIN(above1, src, below1, below2, above2, ref, inter6);
-    above1 = LD_UB(p_src + 9 * src_stride);
-    AOM_AVER_IF_RETAIN(src, below1, below2, above2, above1, ref, inter7);
-    ST_UB8(inter0, inter1, inter2, inter3, inter4, inter5, inter6, inter7,
-           p_dst, dst_stride);
-
-    p_dst += 16;
-    p_src += 16;
-    f += 16;
-  }
-
-  if (0 != (cols / 16)) {
-    ref = LD_UB(f);
-    LD_UB2(p_src - 2 * src_stride, src_stride, above2, above1);
-    src = LD_UB(p_src);
-    LD_UB2(p_src + 1 * src_stride, src_stride, below1, below2);
-    AOM_AVER_IF_RETAIN(above2, above1, src, below1, below2, ref, inter0);
-    above2 = LD_UB(p_src + 3 * src_stride);
-    AOM_AVER_IF_RETAIN(above1, src, below1, below2, above2, ref, inter1);
-    above1 = LD_UB(p_src + 4 * src_stride);
-    AOM_AVER_IF_RETAIN(src, below1, below2, above2, above1, ref, inter2);
-    src = LD_UB(p_src + 5 * src_stride);
-    AOM_AVER_IF_RETAIN(below1, below2, above2, above1, src, ref, inter3);
-    below1 = LD_UB(p_src + 6 * src_stride);
-    AOM_AVER_IF_RETAIN(below2, above2, above1, src, below1, ref, inter4);
-    below2 = LD_UB(p_src + 7 * src_stride);
-    AOM_AVER_IF_RETAIN(above2, above1, src, below1, below2, ref, inter5);
-    above2 = LD_UB(p_src + 8 * src_stride);
-    AOM_AVER_IF_RETAIN(above1, src, below1, below2, above2, ref, inter6);
-    above1 = LD_UB(p_src + 9 * src_stride);
-    AOM_AVER_IF_RETAIN(src, below1, below2, above2, above1, ref, inter7);
-    out0 = __msa_copy_u_d((v2i64)inter0, 0);
-    out1 = __msa_copy_u_d((v2i64)inter1, 0);
-    out2 = __msa_copy_u_d((v2i64)inter2, 0);
-    out3 = __msa_copy_u_d((v2i64)inter3, 0);
-    SD4(out0, out1, out2, out3, p_dst, dst_stride);
-
-    out0 = __msa_copy_u_d((v2i64)inter4, 0);
-    out1 = __msa_copy_u_d((v2i64)inter5, 0);
-    out2 = __msa_copy_u_d((v2i64)inter6, 0);
-    out3 = __msa_copy_u_d((v2i64)inter7, 0);
-    SD4(out0, out1, out2, out3, p_dst + 4 * dst_stride, dst_stride);
-  }
-
-  f = f_orig;
-  p_dst = dst_ptr - 2;
-  LD_UB8(p_dst, dst_stride, inter0, inter1, inter2, inter3, inter4, inter5,
-         inter6, inter7);
-
-  for (col = 0; col < (cols / 8); ++col) {
-    ref = LD_UB(f);
-    f += 8;
-    AOM_TRANSPOSE12x8_UB_UB(inter0, inter1, inter2, inter3, inter4, inter5,
-                            inter6, inter7, inter8, inter9, inter10, inter11);
-    if (0 == col) {
-      above2 = inter2;
-      above1 = inter2;
-    } else {
-      above2 = inter0;
-      above1 = inter1;
-    }
-    src = inter2;
-    below1 = inter3;
-    below2 = inter4;
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 0);
-    AOM_AVER_IF_RETAIN(above2, above1, src, below1, below2, ref_temp, inter2);
-    above2 = inter5;
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 1);
-    AOM_AVER_IF_RETAIN(above1, src, below1, below2, above2, ref_temp, inter3);
-    above1 = inter6;
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 2);
-    AOM_AVER_IF_RETAIN(src, below1, below2, above2, above1, ref_temp, inter4);
-    src = inter7;
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 3);
-    AOM_AVER_IF_RETAIN(below1, below2, above2, above1, src, ref_temp, inter5);
-    below1 = inter8;
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 4);
-    AOM_AVER_IF_RETAIN(below2, above2, above1, src, below1, ref_temp, inter6);
-    below2 = inter9;
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 5);
-    AOM_AVER_IF_RETAIN(above2, above1, src, below1, below2, ref_temp, inter7);
-    if (col == (cols / 8 - 1)) {
-      above2 = inter9;
-    } else {
-      above2 = inter10;
-    }
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 6);
-    AOM_AVER_IF_RETAIN(above1, src, below1, below2, above2, ref_temp, inter8);
-    if (col == (cols / 8 - 1)) {
-      above1 = inter9;
-    } else {
-      above1 = inter11;
-    }
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 7);
-    AOM_AVER_IF_RETAIN(src, below1, below2, above2, above1, ref_temp, inter9);
-    TRANSPOSE8x8_UB_UB(inter2, inter3, inter4, inter5, inter6, inter7, inter8,
-                       inter9, inter2, inter3, inter4, inter5, inter6, inter7,
-                       inter8, inter9);
-    p_dst += 8;
-    LD_UB2(p_dst, dst_stride, inter0, inter1);
-    ST8x1_UB(inter2, p_dst_st);
-    ST8x1_UB(inter3, (p_dst_st + 1 * dst_stride));
-    LD_UB2(p_dst + 2 * dst_stride, dst_stride, inter2, inter3);
-    ST8x1_UB(inter4, (p_dst_st + 2 * dst_stride));
-    ST8x1_UB(inter5, (p_dst_st + 3 * dst_stride));
-    LD_UB2(p_dst + 4 * dst_stride, dst_stride, inter4, inter5);
-    ST8x1_UB(inter6, (p_dst_st + 4 * dst_stride));
-    ST8x1_UB(inter7, (p_dst_st + 5 * dst_stride));
-    LD_UB2(p_dst + 6 * dst_stride, dst_stride, inter6, inter7);
-    ST8x1_UB(inter8, (p_dst_st + 6 * dst_stride));
-    ST8x1_UB(inter9, (p_dst_st + 7 * dst_stride));
-    p_dst_st += 8;
-  }
-}
-
-static void postproc_down_across_luma_msa(uint8_t *src_ptr, uint8_t *dst_ptr,
-                                          int32_t src_stride,
-                                          int32_t dst_stride, int32_t cols,
-                                          uint8_t *f) {
-  uint8_t *p_src = src_ptr;
-  uint8_t *p_dst = dst_ptr;
-  uint8_t *p_dst_st = dst_ptr;
-  uint8_t *f_orig = f;
-  uint16_t col;
-  v16u8 above2, above1, below2, below1;
-  v16u8 src, ref, ref_temp;
-  v16u8 inter0, inter1, inter2, inter3, inter4, inter5, inter6;
-  v16u8 inter7, inter8, inter9, inter10, inter11;
-  v16u8 inter12, inter13, inter14, inter15;
-
-  for (col = (cols / 16); col--;) {
-    ref = LD_UB(f);
-    LD_UB2(p_src - 2 * src_stride, src_stride, above2, above1);
-    src = LD_UB(p_src);
-    LD_UB2(p_src + 1 * src_stride, src_stride, below1, below2);
-    AOM_AVER_IF_RETAIN(above2, above1, src, below1, below2, ref, inter0);
-    above2 = LD_UB(p_src + 3 * src_stride);
-    AOM_AVER_IF_RETAIN(above1, src, below1, below2, above2, ref, inter1);
-    above1 = LD_UB(p_src + 4 * src_stride);
-    AOM_AVER_IF_RETAIN(src, below1, below2, above2, above1, ref, inter2);
-    src = LD_UB(p_src + 5 * src_stride);
-    AOM_AVER_IF_RETAIN(below1, below2, above2, above1, src, ref, inter3);
-    below1 = LD_UB(p_src + 6 * src_stride);
-    AOM_AVER_IF_RETAIN(below2, above2, above1, src, below1, ref, inter4);
-    below2 = LD_UB(p_src + 7 * src_stride);
-    AOM_AVER_IF_RETAIN(above2, above1, src, below1, below2, ref, inter5);
-    above2 = LD_UB(p_src + 8 * src_stride);
-    AOM_AVER_IF_RETAIN(above1, src, below1, below2, above2, ref, inter6);
-    above1 = LD_UB(p_src + 9 * src_stride);
-    AOM_AVER_IF_RETAIN(src, below1, below2, above2, above1, ref, inter7);
-    src = LD_UB(p_src + 10 * src_stride);
-    AOM_AVER_IF_RETAIN(below1, below2, above2, above1, src, ref, inter8);
-    below1 = LD_UB(p_src + 11 * src_stride);
-    AOM_AVER_IF_RETAIN(below2, above2, above1, src, below1, ref, inter9);
-    below2 = LD_UB(p_src + 12 * src_stride);
-    AOM_AVER_IF_RETAIN(above2, above1, src, below1, below2, ref, inter10);
-    above2 = LD_UB(p_src + 13 * src_stride);
-    AOM_AVER_IF_RETAIN(above1, src, below1, below2, above2, ref, inter11);
-    above1 = LD_UB(p_src + 14 * src_stride);
-    AOM_AVER_IF_RETAIN(src, below1, below2, above2, above1, ref, inter12);
-    src = LD_UB(p_src + 15 * src_stride);
-    AOM_AVER_IF_RETAIN(below1, below2, above2, above1, src, ref, inter13);
-    below1 = LD_UB(p_src + 16 * src_stride);
-    AOM_AVER_IF_RETAIN(below2, above2, above1, src, below1, ref, inter14);
-    below2 = LD_UB(p_src + 17 * src_stride);
-    AOM_AVER_IF_RETAIN(above2, above1, src, below1, below2, ref, inter15);
-    ST_UB8(inter0, inter1, inter2, inter3, inter4, inter5, inter6, inter7,
-           p_dst, dst_stride);
-    ST_UB8(inter8, inter9, inter10, inter11, inter12, inter13, inter14, inter15,
-           p_dst + 8 * dst_stride, dst_stride);
-    p_src += 16;
-    p_dst += 16;
-    f += 16;
-  }
-
-  f = f_orig;
-  p_dst = dst_ptr - 2;
-  LD_UB8(p_dst, dst_stride, inter0, inter1, inter2, inter3, inter4, inter5,
-         inter6, inter7);
-  LD_UB8(p_dst + 8 * dst_stride, dst_stride, inter8, inter9, inter10, inter11,
-         inter12, inter13, inter14, inter15);
-
-  for (col = 0; col < cols / 8; ++col) {
-    ref = LD_UB(f);
-    f += 8;
-    TRANSPOSE12x16_B(inter0, inter1, inter2, inter3, inter4, inter5, inter6,
-                     inter7, inter8, inter9, inter10, inter11, inter12, inter13,
-                     inter14, inter15);
-    if (0 == col) {
-      above2 = inter2;
-      above1 = inter2;
-    } else {
-      above2 = inter0;
-      above1 = inter1;
-    }
-
-    src = inter2;
-    below1 = inter3;
-    below2 = inter4;
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 0);
-    AOM_AVER_IF_RETAIN(above2, above1, src, below1, below2, ref_temp, inter2);
-    above2 = inter5;
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 1);
-    AOM_AVER_IF_RETAIN(above1, src, below1, below2, above2, ref_temp, inter3);
-    above1 = inter6;
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 2);
-    AOM_AVER_IF_RETAIN(src, below1, below2, above2, above1, ref_temp, inter4);
-    src = inter7;
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 3);
-    AOM_AVER_IF_RETAIN(below1, below2, above2, above1, src, ref_temp, inter5);
-    below1 = inter8;
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 4);
-    AOM_AVER_IF_RETAIN(below2, above2, above1, src, below1, ref_temp, inter6);
-    below2 = inter9;
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 5);
-    AOM_AVER_IF_RETAIN(above2, above1, src, below1, below2, ref_temp, inter7);
-    if (col == (cols / 8 - 1)) {
-      above2 = inter9;
-    } else {
-      above2 = inter10;
-    }
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 6);
-    AOM_AVER_IF_RETAIN(above1, src, below1, below2, above2, ref_temp, inter8);
-    if (col == (cols / 8 - 1)) {
-      above1 = inter9;
-    } else {
-      above1 = inter11;
-    }
-    ref_temp = (v16u8)__msa_splati_b((v16i8)ref, 7);
-    AOM_AVER_IF_RETAIN(src, below1, below2, above2, above1, ref_temp, inter9);
-    AOM_TRANSPOSE8x16_UB_UB(inter2, inter3, inter4, inter5, inter6, inter7,
-                            inter8, inter9, inter2, inter3, inter4, inter5,
-                            inter6, inter7, inter8, inter9, inter10, inter11,
-                            inter12, inter13, inter14, inter15, above2, above1);
-
-    p_dst += 8;
-    LD_UB2(p_dst, dst_stride, inter0, inter1);
-    ST8x1_UB(inter2, p_dst_st);
-    ST8x1_UB(inter3, (p_dst_st + 1 * dst_stride));
-    LD_UB2(p_dst + 2 * dst_stride, dst_stride, inter2, inter3);
-    ST8x1_UB(inter4, (p_dst_st + 2 * dst_stride));
-    ST8x1_UB(inter5, (p_dst_st + 3 * dst_stride));
-    LD_UB2(p_dst + 4 * dst_stride, dst_stride, inter4, inter5);
-    ST8x1_UB(inter6, (p_dst_st + 4 * dst_stride));
-    ST8x1_UB(inter7, (p_dst_st + 5 * dst_stride));
-    LD_UB2(p_dst + 6 * dst_stride, dst_stride, inter6, inter7);
-    ST8x1_UB(inter8, (p_dst_st + 6 * dst_stride));
-    ST8x1_UB(inter9, (p_dst_st + 7 * dst_stride));
-    LD_UB2(p_dst + 8 * dst_stride, dst_stride, inter8, inter9);
-    ST8x1_UB(inter10, (p_dst_st + 8 * dst_stride));
-    ST8x1_UB(inter11, (p_dst_st + 9 * dst_stride));
-    LD_UB2(p_dst + 10 * dst_stride, dst_stride, inter10, inter11);
-    ST8x1_UB(inter12, (p_dst_st + 10 * dst_stride));
-    ST8x1_UB(inter13, (p_dst_st + 11 * dst_stride));
-    LD_UB2(p_dst + 12 * dst_stride, dst_stride, inter12, inter13);
-    ST8x1_UB(inter14, (p_dst_st + 12 * dst_stride));
-    ST8x1_UB(inter15, (p_dst_st + 13 * dst_stride));
-    LD_UB2(p_dst + 14 * dst_stride, dst_stride, inter14, inter15);
-    ST8x1_UB(above2, (p_dst_st + 14 * dst_stride));
-    ST8x1_UB(above1, (p_dst_st + 15 * dst_stride));
-    p_dst_st += 8;
-  }
-}
-
-void aom_post_proc_down_and_across_mb_row_msa(uint8_t *src, uint8_t *dst,
-                                              int32_t src_stride,
-                                              int32_t dst_stride, int32_t cols,
-                                              uint8_t *f, int32_t size) {
-  if (8 == size) {
-    postproc_down_across_chroma_msa(src, dst, src_stride, dst_stride, cols, f);
-  } else if (16 == size) {
-    postproc_down_across_luma_msa(src, dst, src_stride, dst_stride, cols, f);
-  }
-}
-
-void aom_mbpost_proc_across_ip_msa(uint8_t *src_ptr, int32_t pitch,
-                                   int32_t rows, int32_t cols, int32_t flimit) {
-  int32_t row, col, cnt;
-  uint8_t *src_dup = src_ptr;
-  v16u8 src0, src, tmp_orig;
-  v16u8 tmp = { 0 };
-  v16i8 zero = { 0 };
-  v8u16 sum_h, src_r_h, src_l_h;
-  v4u32 src_r_w, src_l_w;
-  v4i32 flimit_vec;
-
-  flimit_vec = __msa_fill_w(flimit);
-  for (row = rows; row--;) {
-    int32_t sum_sq = 0;
-    int32_t sum = 0;
-    src0 = (v16u8)__msa_fill_b(src_dup[0]);
-    ST8x1_UB(src0, (src_dup - 8));
-
-    src0 = (v16u8)__msa_fill_b(src_dup[cols - 1]);
-    ST_UB(src0, src_dup + cols);
-    src_dup[cols + 16] = src_dup[cols - 1];
-    tmp_orig = (v16u8)__msa_ldi_b(0);
-    tmp_orig[15] = tmp[15];
-    src = LD_UB(src_dup - 8);
-    src[15] = 0;
-    ILVRL_B2_UH(zero, src, src_r_h, src_l_h);
-    src_r_w = __msa_dotp_u_w(src_r_h, src_r_h);
-    src_l_w = __msa_dotp_u_w(src_l_h, src_l_h);
-    sum_sq = HADD_SW_S32(src_r_w);
-    sum_sq += HADD_SW_S32(src_l_w);
-    sum_h = __msa_hadd_u_h(src, src);
-    sum = HADD_UH_U32(sum_h);
-    {
-      v16u8 src7, src8, src_r, src_l;
-      v16i8 mask;
-      v8u16 add_r, add_l;
-      v8i16 sub_r, sub_l, sum_r, sum_l, mask0, mask1;
-      v4i32 sum_sq0, sum_sq1, sum_sq2, sum_sq3;
-      v4i32 sub0, sub1, sub2, sub3;
-      v4i32 sum0_w, sum1_w, sum2_w, sum3_w;
-      v4i32 mul0, mul1, mul2, mul3;
-      v4i32 total0, total1, total2, total3;
-      v8i16 const8 = __msa_fill_h(8);
-
-      src7 = LD_UB(src_dup + 7);
-      src8 = LD_UB(src_dup - 8);
-      for (col = 0; col < (cols >> 4); ++col) {
-        ILVRL_B2_UB(src7, src8, src_r, src_l);
-        HSUB_UB2_SH(src_r, src_l, sub_r, sub_l);
-
-        sum_r[0] = sum + sub_r[0];
-        for (cnt = 0; cnt < 7; ++cnt) {
-          sum_r[cnt + 1] = sum_r[cnt] + sub_r[cnt + 1];
-        }
-        sum_l[0] = sum_r[7] + sub_l[0];
-        for (cnt = 0; cnt < 7; ++cnt) {
-          sum_l[cnt + 1] = sum_l[cnt] + sub_l[cnt + 1];
-        }
-        sum = sum_l[7];
-        src = LD_UB(src_dup + 16 * col);
-        ILVRL_B2_UH(zero, src, src_r_h, src_l_h);
-        src7 = (v16u8)((const8 + sum_r + (v8i16)src_r_h) >> 4);
-        src8 = (v16u8)((const8 + sum_l + (v8i16)src_l_h) >> 4);
-        tmp = (v16u8)__msa_pckev_b((v16i8)src8, (v16i8)src7);
-
-        HADD_UB2_UH(src_r, src_l, add_r, add_l);
-        UNPCK_SH_SW(sub_r, sub0, sub1);
-        UNPCK_SH_SW(sub_l, sub2, sub3);
-        ILVR_H2_SW(zero, add_r, zero, add_l, sum0_w, sum2_w);
-        ILVL_H2_SW(zero, add_r, zero, add_l, sum1_w, sum3_w);
-        MUL4(sum0_w, sub0, sum1_w, sub1, sum2_w, sub2, sum3_w, sub3, mul0, mul1,
-             mul2, mul3);
-        sum_sq0[0] = sum_sq + mul0[0];
-        for (cnt = 0; cnt < 3; ++cnt) {
-          sum_sq0[cnt + 1] = sum_sq0[cnt] + mul0[cnt + 1];
-        }
-        sum_sq1[0] = sum_sq0[3] + mul1[0];
-        for (cnt = 0; cnt < 3; ++cnt) {
-          sum_sq1[cnt + 1] = sum_sq1[cnt] + mul1[cnt + 1];
-        }
-        sum_sq2[0] = sum_sq1[3] + mul2[0];
-        for (cnt = 0; cnt < 3; ++cnt) {
-          sum_sq2[cnt + 1] = sum_sq2[cnt] + mul2[cnt + 1];
-        }
-        sum_sq3[0] = sum_sq2[3] + mul3[0];
-        for (cnt = 0; cnt < 3; ++cnt) {
-          sum_sq3[cnt + 1] = sum_sq3[cnt] + mul3[cnt + 1];
-        }
-        sum_sq = sum_sq3[3];
-
-        UNPCK_SH_SW(sum_r, sum0_w, sum1_w);
-        UNPCK_SH_SW(sum_l, sum2_w, sum3_w);
-        total0 = sum_sq0 * __msa_ldi_w(15);
-        total0 -= sum0_w * sum0_w;
-        total1 = sum_sq1 * __msa_ldi_w(15);
-        total1 -= sum1_w * sum1_w;
-        total2 = sum_sq2 * __msa_ldi_w(15);
-        total2 -= sum2_w * sum2_w;
-        total3 = sum_sq3 * __msa_ldi_w(15);
-        total3 -= sum3_w * sum3_w;
-        total0 = (total0 < flimit_vec);
-        total1 = (total1 < flimit_vec);
-        total2 = (total2 < flimit_vec);
-        total3 = (total3 < flimit_vec);
-        PCKEV_H2_SH(total1, total0, total3, total2, mask0, mask1);
-        mask = __msa_pckev_b((v16i8)mask1, (v16i8)mask0);
-        tmp = __msa_bmz_v(tmp, src, (v16u8)mask);
-
-        if (col == 0) {
-          uint64_t src_d;
-
-          src_d = __msa_copy_u_d((v2i64)tmp_orig, 1);
-          SD(src_d, (src_dup - 8));
-        }
-
-        src7 = LD_UB(src_dup + 16 * (col + 1) + 7);
-        src8 = LD_UB(src_dup + 16 * (col + 1) - 8);
-        ST_UB(tmp, (src_dup + (16 * col)));
-      }
-
-      src_dup += pitch;
-    }
-  }
-}
-
-void aom_mbpost_proc_down_msa(uint8_t *dst_ptr, int32_t pitch, int32_t rows,
-                              int32_t cols, int32_t flimit) {
-  int32_t row, col, cnt, i;
-  const int16_t *rv3 = &aom_rv[63 & rand()];
-  v4i32 flimit_vec;
-  v16u8 dst7, dst8, dst_r_b, dst_l_b;
-  v16i8 mask;
-  v8u16 add_r, add_l;
-  v8i16 dst_r_h, dst_l_h, sub_r, sub_l, mask0, mask1;
-  v4i32 sub0, sub1, sub2, sub3, total0, total1, total2, total3;
-
-  flimit_vec = __msa_fill_w(flimit);
-
-  for (col = 0; col < (cols >> 4); ++col) {
-    uint8_t *dst_tmp = &dst_ptr[col << 4];
-    v16u8 dst;
-    v16i8 zero = { 0 };
-    v16u8 tmp[16];
-    v8i16 mult0, mult1, rv2_0, rv2_1;
-    v8i16 sum0_h = { 0 };
-    v8i16 sum1_h = { 0 };
-    v4i32 mul0 = { 0 };
-    v4i32 mul1 = { 0 };
-    v4i32 mul2 = { 0 };
-    v4i32 mul3 = { 0 };
-    v4i32 sum0_w, sum1_w, sum2_w, sum3_w;
-    v4i32 add0, add1, add2, add3;
-    const int16_t *rv2[16];
-
-    dst = LD_UB(dst_tmp);
-    for (cnt = (col << 4), i = 0; i < 16; ++cnt) {
-      rv2[i] = rv3 + ((cnt * 17) & 127);
-      ++i;
-    }
-    for (cnt = -8; cnt < 0; ++cnt) {
-      ST_UB(dst, dst_tmp + cnt * pitch);
-    }
-
-    dst = LD_UB((dst_tmp + (rows - 1) * pitch));
-    for (cnt = rows; cnt < rows + 17; ++cnt) {
-      ST_UB(dst, dst_tmp + cnt * pitch);
-    }
-    for (cnt = -8; cnt <= 6; ++cnt) {
-      dst = LD_UB(dst_tmp + (cnt * pitch));
-      UNPCK_UB_SH(dst, dst_r_h, dst_l_h);
-      MUL2(dst_r_h, dst_r_h, dst_l_h, dst_l_h, mult0, mult1);
-      mul0 += (v4i32)__msa_ilvr_h((v8i16)zero, (v8i16)mult0);
-      mul1 += (v4i32)__msa_ilvl_h((v8i16)zero, (v8i16)mult0);
-      mul2 += (v4i32)__msa_ilvr_h((v8i16)zero, (v8i16)mult1);
-      mul3 += (v4i32)__msa_ilvl_h((v8i16)zero, (v8i16)mult1);
-      ADD2(sum0_h, dst_r_h, sum1_h, dst_l_h, sum0_h, sum1_h);
-    }
-
-    for (row = 0; row < (rows + 8); ++row) {
-      for (i = 0; i < 8; ++i) {
-        rv2_0[i] = *(rv2[i] + (row & 127));
-        rv2_1[i] = *(rv2[i + 8] + (row & 127));
-      }
-      dst7 = LD_UB(dst_tmp + (7 * pitch));
-      dst8 = LD_UB(dst_tmp - (8 * pitch));
-      ILVRL_B2_UB(dst7, dst8, dst_r_b, dst_l_b);
-
-      HSUB_UB2_SH(dst_r_b, dst_l_b, sub_r, sub_l);
-      UNPCK_SH_SW(sub_r, sub0, sub1);
-      UNPCK_SH_SW(sub_l, sub2, sub3);
-      sum0_h += sub_r;
-      sum1_h += sub_l;
-
-      HADD_UB2_UH(dst_r_b, dst_l_b, add_r, add_l);
-
-      ILVRL_H2_SW(zero, add_r, add0, add1);
-      ILVRL_H2_SW(zero, add_l, add2, add3);
-      mul0 += add0 * sub0;
-      mul1 += add1 * sub1;
-      mul2 += add2 * sub2;
-      mul3 += add3 * sub3;
-      dst = LD_UB(dst_tmp);
-      ILVRL_B2_SH(zero, dst, dst_r_h, dst_l_h);
-      dst7 = (v16u8)((rv2_0 + sum0_h + dst_r_h) >> 4);
-      dst8 = (v16u8)((rv2_1 + sum1_h + dst_l_h) >> 4);
-      tmp[row & 15] = (v16u8)__msa_pckev_b((v16i8)dst8, (v16i8)dst7);
-
-      UNPCK_SH_SW(sum0_h, sum0_w, sum1_w);
-      UNPCK_SH_SW(sum1_h, sum2_w, sum3_w);
-      total0 = mul0 * __msa_ldi_w(15);
-      total0 -= sum0_w * sum0_w;
-      total1 = mul1 * __msa_ldi_w(15);
-      total1 -= sum1_w * sum1_w;
-      total2 = mul2 * __msa_ldi_w(15);
-      total2 -= sum2_w * sum2_w;
-      total3 = mul3 * __msa_ldi_w(15);
-      total3 -= sum3_w * sum3_w;
-      total0 = (total0 < flimit_vec);
-      total1 = (total1 < flimit_vec);
-      total2 = (total2 < flimit_vec);
-      total3 = (total3 < flimit_vec);
-      PCKEV_H2_SH(total1, total0, total3, total2, mask0, mask1);
-      mask = __msa_pckev_b((v16i8)mask1, (v16i8)mask0);
-      tmp[row & 15] = __msa_bmz_v(tmp[row & 15], dst, (v16u8)mask);
-
-      if (row >= 8) {
-        ST_UB(tmp[(row - 8) & 15], (dst_tmp - 8 * pitch));
-      }
-
-      dst_tmp += pitch;
-    }
-  }
-}
diff --git a/aom_dsp/x86/add_noise_sse2.asm b/aom_dsp/x86/add_noise_sse2.asm
deleted file mode 100644
index 4f161a5..0000000
--- a/aom_dsp/x86/add_noise_sse2.asm
+++ /dev/null
@@ -1,83 +0,0 @@
-;
-; Copyright (c) 2016, Alliance for Open Media. All rights reserved
-;
-; This source code is subject to the terms of the BSD 2 Clause License and
-; the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-; was not distributed with this source code in the LICENSE file, you can
-; obtain it at www.aomedia.org/license/software. If the Alliance for Open
-; Media Patent License 1.0 was not distributed with this source code in the
-; PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-;
-
-%include "aom_ports/x86_abi_support.asm"
-
-;void aom_plane_add_noise_sse2(unsigned char *start, unsigned char *noise,
-;                              unsigned char blackclamp[16],
-;                              unsigned char whiteclamp[16],
-;                              unsigned char bothclamp[16],
-;                              unsigned int width, unsigned int height,
-;                              int pitch)
-global sym(aom_plane_add_noise_sse2) PRIVATE
-sym(aom_plane_add_noise_sse2):
-    push        rbp
-    mov         rbp, rsp
-    SHADOW_ARGS_TO_STACK 8
-    GET_GOT     rbx
-    push        rsi
-    push        rdi
-    ; end prolog
-
-    ; get the clamps in registers
-    mov     rdx, arg(2) ; blackclamp
-    movdqu  xmm3, [rdx]
-    mov     rdx, arg(3) ; whiteclamp
-    movdqu  xmm4, [rdx]
-    mov     rdx, arg(4) ; bothclamp
-    movdqu  xmm5, [rdx]
-
-.addnoise_loop:
-    call sym(LIBAOM_RAND) WRT_PLT
-    mov     rcx, arg(1) ;noise
-    and     rax, 0xff
-    add     rcx, rax
-
-    mov     rdi, rcx
-    movsxd  rcx, dword arg(5) ;[Width]
-    mov     rsi, arg(0) ;Pos
-    xor         rax,rax
-
-.addnoise_nextset:
-      movdqu      xmm1,[rsi+rax]         ; get the source
-
-      psubusb     xmm1, xmm3 ; subtract black clamp
-      paddusb     xmm1, xmm5 ; add both clamp
-      psubusb     xmm1, xmm4 ; subtract whiteclamp
-
-      movdqu      xmm2,[rdi+rax]         ; get the noise for this line
-      paddb       xmm1,xmm2              ; add it in
-      movdqu      [rsi+rax],xmm1         ; store the result
-
-      add         rax,16                 ; move to the next line
-
-      cmp         rax, rcx
-      jl          .addnoise_nextset
-
-    movsxd  rax, dword arg(7) ; Pitch
-    add     arg(0), rax ; Start += Pitch
-    sub     dword arg(6), 1   ; Height -= 1
-    jg      .addnoise_loop
-
-    ; begin epilog
-    pop rdi
-    pop rsi
-    RESTORE_GOT
-    UNSHADOW_ARGS
-    pop         rbp
-    ret
-
-SECTION_RODATA
-align 16
-rd42:
-    times 8 dw 0x04
-four8s:
-    times 4 dd 8
diff --git a/aom_dsp/x86/deblock_sse2.asm b/aom_dsp/x86/deblock_sse2.asm
deleted file mode 100644
index 7598a82..0000000
--- a/aom_dsp/x86/deblock_sse2.asm
+++ /dev/null
@@ -1,661 +0,0 @@
-;
-; Copyright (c) 2016, Alliance for Open Media. All rights reserved
-;
-; This source code is subject to the terms of the BSD 2 Clause License and
-; the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-; was not distributed with this source code in the LICENSE file, you can
-; obtain it at www.aomedia.org/license/software. If the Alliance for Open
-; Media Patent License 1.0 was not distributed with this source code in the
-; PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-;
-
-%include "aom_ports/x86_abi_support.asm"
-
-;macro in deblock functions
-%macro FIRST_2_ROWS 0
-        movdqa      xmm4,       xmm0
-        movdqa      xmm6,       xmm0
-        movdqa      xmm5,       xmm1
-        pavgb       xmm5,       xmm3
-
-        ;calculate absolute value
-        psubusb     xmm4,       xmm1
-        psubusb     xmm1,       xmm0
-        psubusb     xmm6,       xmm3
-        psubusb     xmm3,       xmm0
-        paddusb     xmm4,       xmm1
-        paddusb     xmm6,       xmm3
-
-        ;get threshold
-        movdqa      xmm2,       flimit
-        pxor        xmm1,       xmm1
-        movdqa      xmm7,       xmm2
-
-        ;get mask
-        psubusb     xmm2,       xmm4
-        psubusb     xmm7,       xmm6
-        pcmpeqb     xmm2,       xmm1
-        pcmpeqb     xmm7,       xmm1
-        por         xmm7,       xmm2
-%endmacro
-
-%macro SECOND_2_ROWS 0
-        movdqa      xmm6,       xmm0
-        movdqa      xmm4,       xmm0
-        movdqa      xmm2,       xmm1
-        pavgb       xmm1,       xmm3
-
-        ;calculate absolute value
-        psubusb     xmm6,       xmm2
-        psubusb     xmm2,       xmm0
-        psubusb     xmm4,       xmm3
-        psubusb     xmm3,       xmm0
-        paddusb     xmm6,       xmm2
-        paddusb     xmm4,       xmm3
-
-        pavgb       xmm5,       xmm1
-
-        ;get threshold
-        movdqa      xmm2,       flimit
-        pxor        xmm1,       xmm1
-        movdqa      xmm3,       xmm2
-
-        ;get mask
-        psubusb     xmm2,       xmm6
-        psubusb     xmm3,       xmm4
-        pcmpeqb     xmm2,       xmm1
-        pcmpeqb     xmm3,       xmm1
-
-        por         xmm7,       xmm2
-        por         xmm7,       xmm3
-
-        pavgb       xmm5,       xmm0
-
-        ;decide if or not to use filtered value
-        pand        xmm0,       xmm7
-        pandn       xmm7,       xmm5
-        paddusb     xmm0,       xmm7
-%endmacro
-
-%macro UPDATE_FLIMIT 0
-        movdqa      xmm2,       XMMWORD PTR [rbx]
-        movdqa      [rsp],      xmm2
-        add         rbx,        16
-%endmacro
-
-;void aom_post_proc_down_and_across_mb_row_sse2
-;(
-;    unsigned char *src_ptr,
-;    unsigned char *dst_ptr,
-;    int src_pixels_per_line,
-;    int dst_pixels_per_line,
-;    int cols,
-;    int *flimits,
-;    int size
-;)
-global sym(aom_post_proc_down_and_across_mb_row_sse2) PRIVATE
-sym(aom_post_proc_down_and_across_mb_row_sse2):
-    push        rbp
-    mov         rbp, rsp
-    SHADOW_ARGS_TO_STACK 7
-    SAVE_XMM 7
-    push        rbx
-    push        rsi
-    push        rdi
-    ; end prolog
-    ALIGN_STACK 16, rax
-    sub         rsp, 16
-
-        ; put flimit on stack
-        mov         rbx,        arg(5)           ;flimits ptr
-        UPDATE_FLIMIT
-
-%define flimit [rsp]
-
-        mov         rsi,        arg(0)           ;src_ptr
-        mov         rdi,        arg(1)           ;dst_ptr
-
-        movsxd      rax,        DWORD PTR arg(2) ;src_pixels_per_line
-        movsxd      rcx,        DWORD PTR arg(6) ;rows in a macroblock
-.nextrow:
-        xor         rdx,        rdx              ;col
-.nextcol:
-        ;load current and next 2 rows
-        movdqu      xmm0,       XMMWORD PTR [rsi]
-        movdqu      xmm1,       XMMWORD PTR [rsi + rax]
-        movdqu      xmm3,       XMMWORD PTR [rsi + 2*rax]
-
-        FIRST_2_ROWS
-
-        ;load above 2 rows
-        neg         rax
-        movdqu      xmm1,       XMMWORD PTR [rsi + 2*rax]
-        movdqu      xmm3,       XMMWORD PTR [rsi + rax]
-
-        SECOND_2_ROWS
-
-        movdqu      XMMWORD PTR [rdi], xmm0
-
-        neg         rax                          ; positive stride
-        add         rsi,        16
-        add         rdi,        16
-
-        add         rdx,        16
-        cmp         edx,        dword arg(4)     ;cols
-        jge         .downdone
-        UPDATE_FLIMIT
-        jmp         .nextcol
-
-.downdone:
-        ; done with the all cols, start the across filtering in place
-        sub         rsi,        rdx
-        sub         rdi,        rdx
-
-        mov         rbx,        arg(5) ; flimits
-        UPDATE_FLIMIT
-
-        ; dup the first byte into the left border 8 times
-        movq        mm1,   [rdi]
-        punpcklbw   mm1,   mm1
-        punpcklwd   mm1,   mm1
-        punpckldq   mm1,   mm1
-        mov         rdx,    -8
-        movq        [rdi+rdx], mm1
-
-        ; dup the last byte into the right border
-        movsxd      rdx,    dword arg(4)
-        movq        mm1,   [rdi + rdx + -1]
-        punpcklbw   mm1,   mm1
-        punpcklwd   mm1,   mm1
-        punpckldq   mm1,   mm1
-        movq        [rdi+rdx], mm1
-
-        xor         rdx,        rdx
-        movq        mm0,        QWORD PTR [rdi-16];
-        movq        mm1,        QWORD PTR [rdi-8];
-
-.acrossnextcol:
-        movdqu      xmm0,       XMMWORD PTR [rdi + rdx]
-        movdqu      xmm1,       XMMWORD PTR [rdi + rdx -2]
-        movdqu      xmm3,       XMMWORD PTR [rdi + rdx -1]
-
-        FIRST_2_ROWS
-
-        movdqu      xmm1,       XMMWORD PTR [rdi + rdx +1]
-        movdqu      xmm3,       XMMWORD PTR [rdi + rdx +2]
-
-        SECOND_2_ROWS
-
-        movq        QWORD PTR [rdi+rdx-16], mm0  ; store previous 8 bytes
-        movq        QWORD PTR [rdi+rdx-8], mm1   ; store previous 8 bytes
-        movdq2q     mm0,        xmm0
-        psrldq      xmm0,       8
-        movdq2q     mm1,        xmm0
-
-        add         rdx,        16
-        cmp         edx,        dword arg(4)     ;cols
-        jge         .acrossdone
-        UPDATE_FLIMIT
-        jmp         .acrossnextcol
-
-.acrossdone:
-        ; last 16 pixels
-        movq        QWORD PTR [rdi+rdx-16], mm0
-
-        cmp         edx,        dword arg(4)
-        jne         .throw_last_8
-        movq        QWORD PTR [rdi+rdx-8], mm1
-.throw_last_8:
-        ; done with this rwo
-        add         rsi,rax                      ;next src line
-        mov         eax, dword arg(3)            ;dst_pixels_per_line
-        add         rdi,rax                      ;next destination
-        mov         eax, dword arg(2)            ;src_pixels_per_line
-
-        mov         rbx,        arg(5)           ;flimits
-        UPDATE_FLIMIT
-
-        dec         rcx                          ;decrement count
-        jnz         .nextrow                     ;next row
-
-    add rsp, 16
-    pop rsp
-    ; begin epilog
-    pop rdi
-    pop rsi
-    pop rbx
-    RESTORE_XMM
-    UNSHADOW_ARGS
-    pop         rbp
-    ret
-%undef flimit
-
-;void aom_mbpost_proc_down_xmm(unsigned char *dst,
-;                            int pitch, int rows, int cols,int flimit)
-extern sym(aom_rv)
-global sym(aom_mbpost_proc_down_xmm) PRIVATE
-sym(aom_mbpost_proc_down_xmm):
-    push        rbp
-    mov         rbp, rsp
-    SHADOW_ARGS_TO_STACK 5
-    SAVE_XMM 7
-    GET_GOT     rbx
-    push        rsi
-    push        rdi
-    ; end prolog
-
-    ALIGN_STACK 16, rax
-    sub         rsp, 128+16
-
-    ; unsigned char d[16][8] at [rsp]
-    ; create flimit2 at [rsp+128]
-    mov         eax, dword ptr arg(4) ;flimit
-    mov         [rsp+128], eax
-    mov         [rsp+128+4], eax
-    mov         [rsp+128+8], eax
-    mov         [rsp+128+12], eax
-%define flimit4 [rsp+128]
-
-%if ABI_IS_32BIT=0
-    lea         r8,       [GLOBAL(sym(aom_rv))]
-%endif
-
-    ;rows +=8;
-    add         dword arg(2), 8
-
-    ;for(c=0; c<cols; c+=8)
-.loop_col:
-            mov         rsi,        arg(0) ; s
-            pxor        xmm0,       xmm0        ;
-
-            movsxd      rax,        dword ptr arg(1) ;pitch       ;
-
-            ; this copies the last row down into the border 8 rows
-            mov         rdi,        rsi
-            mov         rdx,        arg(2)
-            sub         rdx,        9
-            imul        rdx,        rax
-            lea         rdi,        [rdi+rdx]
-            movq        xmm1,       QWORD ptr[rdi]              ; first row
-            mov         rcx,        8
-.init_borderd:                                                  ; initialize borders
-            lea         rdi,        [rdi + rax]
-            movq        [rdi],      xmm1
-
-            dec         rcx
-            jne         .init_borderd
-
-            neg         rax                                     ; rax = -pitch
-
-            ; this copies the first row up into the border 8 rows
-            mov         rdi,        rsi
-            movq        xmm1,       QWORD ptr[rdi]              ; first row
-            mov         rcx,        8
-.init_border:                                                   ; initialize borders
-            lea         rdi,        [rdi + rax]
-            movq        [rdi],      xmm1
-
-            dec         rcx
-            jne         .init_border
-
-
-
-            lea         rsi,        [rsi + rax*8];              ; rdi = s[-pitch*8]
-            neg         rax
-
-            pxor        xmm5,       xmm5
-            pxor        xmm6,       xmm6        ;
-
-            pxor        xmm7,       xmm7        ;
-            mov         rdi,        rsi
-
-            mov         rcx,        15          ;
-
-.loop_initvar:
-            movq        xmm1,       QWORD PTR [rdi];
-            punpcklbw   xmm1,       xmm0        ;
-
-            paddw       xmm5,       xmm1        ;
-            pmullw      xmm1,       xmm1        ;
-
-            movdqa      xmm2,       xmm1        ;
-            punpcklwd   xmm1,       xmm0        ;
-
-            punpckhwd   xmm2,       xmm0        ;
-            paddd       xmm6,       xmm1        ;
-
-            paddd       xmm7,       xmm2        ;
-            lea         rdi,        [rdi+rax]   ;
-
-            dec         rcx
-            jne         .loop_initvar
-            ;save the var and sum
-            xor         rdx,        rdx
-.loop_row:
-            movq        xmm1,       QWORD PTR [rsi]     ; [s-pitch*8]
-            movq        xmm2,       QWORD PTR [rdi]     ; [s+pitch*7]
-
-            punpcklbw   xmm1,       xmm0
-            punpcklbw   xmm2,       xmm0
-
-            paddw       xmm5,       xmm2
-            psubw       xmm5,       xmm1
-
-            pmullw      xmm2,       xmm2
-            movdqa      xmm4,       xmm2
-
-            punpcklwd   xmm2,       xmm0
-            punpckhwd   xmm4,       xmm0
-
-            paddd       xmm6,       xmm2
-            paddd       xmm7,       xmm4
-
-            pmullw      xmm1,       xmm1
-            movdqa      xmm2,       xmm1
-
-            punpcklwd   xmm1,       xmm0
-            psubd       xmm6,       xmm1
-
-            punpckhwd   xmm2,       xmm0
-            psubd       xmm7,       xmm2
-
-
-            movdqa      xmm3,       xmm6
-            pslld       xmm3,       4
-
-            psubd       xmm3,       xmm6
-            movdqa      xmm1,       xmm5
-
-            movdqa      xmm4,       xmm5
-            pmullw      xmm1,       xmm1
-
-            pmulhw      xmm4,       xmm4
-            movdqa      xmm2,       xmm1
-
-            punpcklwd   xmm1,       xmm4
-            punpckhwd   xmm2,       xmm4
-
-            movdqa      xmm4,       xmm7
-            pslld       xmm4,       4
-
-            psubd       xmm4,       xmm7
-
-            psubd       xmm3,       xmm1
-            psubd       xmm4,       xmm2
-
-            psubd       xmm3,       flimit4
-            psubd       xmm4,       flimit4
-
-            psrad       xmm3,       31
-            psrad       xmm4,       31
-
-            packssdw    xmm3,       xmm4
-            packsswb    xmm3,       xmm0
-
-            movq        xmm1,       QWORD PTR [rsi+rax*8]
-
-            movq        xmm2,       xmm1
-            punpcklbw   xmm1,       xmm0
-
-            paddw       xmm1,       xmm5
-            mov         rcx,        rdx
-
-            and         rcx,        127
-%if ABI_IS_32BIT=1 && CONFIG_PIC=1
-            push        rax
-            lea         rax,        [GLOBAL(sym(aom_rv))]
-            movdqu      xmm4,       [rax + rcx*2] ;aom_rv[rcx*2]
-            pop         rax
-%elif ABI_IS_32BIT=0
-            movdqu      xmm4,       [r8 + rcx*2] ;aom_rv[rcx*2]
-%else
-            movdqu      xmm4,       [sym(aom_rv) + rcx*2]
-%endif
-
-            paddw       xmm1,       xmm4
-            ;paddw     xmm1,       eight8s
-            psraw       xmm1,       4
-
-            packuswb    xmm1,       xmm0
-            pand        xmm1,       xmm3
-
-            pandn       xmm3,       xmm2
-            por         xmm1,       xmm3
-
-            and         rcx,        15
-            movq        QWORD PTR   [rsp + rcx*8], xmm1 ;d[rcx*8]
-
-            cmp         edx,        8
-            jl          .skip_assignment
-
-            mov         rcx,        rdx
-            sub         rcx,        8
-            and         rcx,        15
-            movq        mm0,        [rsp + rcx*8] ;d[rcx*8]
-            movq        [rsi],      mm0
-
-.skip_assignment:
-            lea         rsi,        [rsi+rax]
-
-            lea         rdi,        [rdi+rax]
-            add         rdx,        1
-
-            cmp         edx,        dword arg(2) ;rows
-            jl          .loop_row
-
-        add         dword arg(0), 8 ; s += 8
-        sub         dword arg(3), 8 ; cols -= 8
-        cmp         dword arg(3), 0
-        jg          .loop_col
-
-    add         rsp, 128+16
-    pop         rsp
-
-    ; begin epilog
-    pop rdi
-    pop rsi
-    RESTORE_GOT
-    RESTORE_XMM
-    UNSHADOW_ARGS
-    pop         rbp
-    ret
-%undef flimit4
-
-
-;void aom_mbpost_proc_across_ip_xmm(unsigned char *src,
-;                                int pitch, int rows, int cols,int flimit)
-global sym(aom_mbpost_proc_across_ip_xmm) PRIVATE
-sym(aom_mbpost_proc_across_ip_xmm):
-    push        rbp
-    mov         rbp, rsp
-    SHADOW_ARGS_TO_STACK 5
-    SAVE_XMM 7
-    GET_GOT     rbx
-    push        rsi
-    push        rdi
-    ; end prolog
-
-    ALIGN_STACK 16, rax
-    sub         rsp, 16
-
-    ; create flimit4 at [rsp]
-    mov         eax, dword ptr arg(4) ;flimit
-    mov         [rsp], eax
-    mov         [rsp+4], eax
-    mov         [rsp+8], eax
-    mov         [rsp+12], eax
-%define flimit4 [rsp]
-
-
-    ;for(r=0;r<rows;r++)
-.ip_row_loop:
-
-        xor         rdx,    rdx ;sumsq=0;
-        xor         rcx,    rcx ;sum=0;
-        mov         rsi,    arg(0); s
-
-
-        ; dup the first byte into the left border 8 times
-        movq        mm1,   [rsi]
-        punpcklbw   mm1,   mm1
-        punpcklwd   mm1,   mm1
-        punpckldq   mm1,   mm1
-
-        mov         rdi,    -8
-        movq        [rsi+rdi], mm1
-
-        ; dup the last byte into the right border
-        movsxd      rdx,    dword arg(3)
-        movq        mm1,   [rsi + rdx + -1]
-        punpcklbw   mm1,   mm1
-        punpcklwd   mm1,   mm1
-        punpckldq   mm1,   mm1
-        movq        [rsi+rdx], mm1
-
-.ip_var_loop:
-        ;for(i=-8;i<=6;i++)
-        ;{
-        ;    sumsq += s[i]*s[i];
-        ;    sum   += s[i];
-        ;}
-        movzx       eax, byte [rsi+rdi]
-        add         ecx, eax
-        mul         al
-        add         edx, eax
-        add         rdi, 1
-        cmp         rdi, 6
-        jle         .ip_var_loop
-
-
-            ;mov         rax,    sumsq
-            ;movd        xmm7,   rax
-            movd        xmm7,   edx
-
-            ;mov         rax,    sum
-            ;movd        xmm6,   rax
-            movd        xmm6,   ecx
-
-            mov         rsi,    arg(0) ;s
-            xor         rcx,    rcx
-
-            movsxd      rdx,    dword arg(3) ;cols
-            add         rdx,    8
-            pxor        mm0,    mm0
-            pxor        mm1,    mm1
-
-            pxor        xmm0,   xmm0
-.nextcol4:
-
-            movd        xmm1,   DWORD PTR [rsi+rcx-8]   ; -8 -7 -6 -5
-            movd        xmm2,   DWORD PTR [rsi+rcx+7]   ; +7 +8 +9 +10
-
-            punpcklbw   xmm1,   xmm0                    ; expanding
-            punpcklbw   xmm2,   xmm0                    ; expanding
-
-            punpcklwd   xmm1,   xmm0                    ; expanding to dwords
-            punpcklwd   xmm2,   xmm0                    ; expanding to dwords
-
-            psubd       xmm2,   xmm1                    ; 7--8   8--7   9--6 10--5
-            paddd       xmm1,   xmm1                    ; -8*2   -7*2   -6*2 -5*2
-
-            paddd       xmm1,   xmm2                    ; 7+-8   8+-7   9+-6 10+-5
-            pmaddwd     xmm1,   xmm2                    ; squared of 7+-8   8+-7   9+-6 10+-5
-
-            paddd       xmm6,   xmm2
-            paddd       xmm7,   xmm1
-
-            pshufd      xmm6,   xmm6,   0               ; duplicate the last ones
-            pshufd      xmm7,   xmm7,   0               ; duplicate the last ones
-
-            psrldq      xmm1,       4                   ; 8--7   9--6 10--5  0000
-            psrldq      xmm2,       4                   ; 8--7   9--6 10--5  0000
-
-            pshufd      xmm3,   xmm1,   3               ; 0000  8--7   8--7   8--7 squared
-            pshufd      xmm4,   xmm2,   3               ; 0000  8--7   8--7   8--7 squared
-
-            paddd       xmm6,   xmm4
-            paddd       xmm7,   xmm3
-
-            pshufd      xmm3,   xmm1,   01011111b       ; 0000  0000   9--6   9--6 squared
-            pshufd      xmm4,   xmm2,   01011111b       ; 0000  0000   9--6   9--6 squared
-
-            paddd       xmm7,   xmm3
-            paddd       xmm6,   xmm4
-
-            pshufd      xmm3,   xmm1,   10111111b       ; 0000  0000   8--7   8--7 squared
-            pshufd      xmm4,   xmm2,   10111111b       ; 0000  0000   8--7   8--7 squared
-
-            paddd       xmm7,   xmm3
-            paddd       xmm6,   xmm4
-
-            movdqa      xmm3,   xmm6
-            pmaddwd     xmm3,   xmm3
-
-            movdqa      xmm5,   xmm7
-            pslld       xmm5,   4
-
-            psubd       xmm5,   xmm7
-            psubd       xmm5,   xmm3
-
-            psubd       xmm5,   flimit4
-            psrad       xmm5,   31
-
-            packssdw    xmm5,   xmm0
-            packsswb    xmm5,   xmm0
-
-            movd        xmm1,   DWORD PTR [rsi+rcx]
-            movq        xmm2,   xmm1
-
-            punpcklbw   xmm1,   xmm0
-            punpcklwd   xmm1,   xmm0
-
-            paddd       xmm1,   xmm6
-            paddd       xmm1,   [GLOBAL(four8s)]
-
-            psrad       xmm1,   4
-            packssdw    xmm1,   xmm0
-
-            packuswb    xmm1,   xmm0
-            pand        xmm1,   xmm5
-
-            pandn       xmm5,   xmm2
-            por         xmm5,   xmm1
-
-            movd        [rsi+rcx-8],  mm0
-            movq        mm0,    mm1
-
-            movdq2q     mm1,    xmm5
-            psrldq      xmm7,   12
-
-            psrldq      xmm6,   12
-            add         rcx,    4
-
-            cmp         rcx,    rdx
-            jl          .nextcol4
-
-        ;s+=pitch;
-        movsxd rax, dword arg(1)
-        add    arg(0), rax
-
-        sub dword arg(2), 1 ;rows-=1
-        cmp dword arg(2), 0
-        jg .ip_row_loop
-
-    add         rsp, 16
-    pop         rsp
-
-    ; begin epilog
-    pop rdi
-    pop rsi
-    RESTORE_GOT
-    RESTORE_XMM
-    UNSHADOW_ARGS
-    pop         rbp
-    ret
-%undef flimit4
-
-
-SECTION_RODATA
-align 16
-four8s:
-    times 4 dd 8
diff --git a/test/add_noise_test.cc b/test/add_noise_test.cc
deleted file mode 100644
index d1b22d2..0000000
--- a/test/add_noise_test.cc
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "third_party/googletest/src/include/gtest/gtest.h"
-#include "./aom_dsp_rtcd.h"
-#include "aom/aom_integer.h"
-#include "aom_dsp/postproc.h"
-#include "aom_mem/aom_mem.h"
-
-namespace {
-
-// TODO(jimbankoski): make width and height integers not unsigned.
-typedef void (*AddNoiseFunc)(unsigned char *start, char *noise,
-                             char blackclamp[16], char whiteclamp[16],
-                             char bothclamp[16], unsigned int width,
-                             unsigned int height, int pitch);
-
-class AddNoiseTest : public ::testing::TestWithParam<AddNoiseFunc> {
- public:
-  virtual void TearDown() { libaom_test::ClearSystemState(); }
-  virtual ~AddNoiseTest() {}
-};
-
-double stddev6(char a, char b, char c, char d, char e, char f) {
-  const double n = (a + b + c + d + e + f) / 6.0;
-  const double v = ((a - n) * (a - n) + (b - n) * (b - n) + (c - n) * (c - n) +
-                    (d - n) * (d - n) + (e - n) * (e - n) + (f - n) * (f - n)) /
-                   6.0;
-  return sqrt(v);
-}
-
-TEST_P(AddNoiseTest, CheckNoiseAdded) {
-  DECLARE_ALIGNED(16, char, blackclamp[16]);
-  DECLARE_ALIGNED(16, char, whiteclamp[16]);
-  DECLARE_ALIGNED(16, char, bothclamp[16]);
-  const int width = 64;
-  const int height = 64;
-  const int image_size = width * height;
-  char noise[3072];
-  const int clamp = aom_setup_noise(4.4, sizeof(noise), noise);
-
-  for (int i = 0; i < 16; i++) {
-    blackclamp[i] = clamp;
-    whiteclamp[i] = clamp;
-    bothclamp[i] = 2 * clamp;
-  }
-
-  uint8_t *const s = reinterpret_cast<uint8_t *>(aom_calloc(image_size, 1));
-  memset(s, 99, image_size);
-
-  ASM_REGISTER_STATE_CHECK(GetParam()(s, noise, blackclamp, whiteclamp,
-                                      bothclamp, width, height, width));
-
-  // Check to make sure we don't end up having either the same or no added
-  // noise either vertically or horizontally.
-  for (int i = 0; i < image_size - 6 * width - 6; ++i) {
-    const double hd = stddev6(s[i] - 99, s[i + 1] - 99, s[i + 2] - 99,
-                              s[i + 3] - 99, s[i + 4] - 99, s[i + 5] - 99);
-    const double vd = stddev6(s[i] - 99, s[i + width] - 99,
-                              s[i + 2 * width] - 99, s[i + 3 * width] - 99,
-                              s[i + 4 * width] - 99, s[i + 5 * width] - 99);
-
-    EXPECT_NE(hd, 0);
-    EXPECT_NE(vd, 0);
-  }
-
-  // Initialize pixels in the image to 255 and check for roll over.
-  memset(s, 255, image_size);
-
-  ASM_REGISTER_STATE_CHECK(GetParam()(s, noise, blackclamp, whiteclamp,
-                                      bothclamp, width, height, width));
-
-  // Check to make sure don't roll over.
-  for (int i = 0; i < image_size; ++i) {
-    EXPECT_GT(static_cast<int>(s[i]), clamp) << "i = " << i;
-  }
-
-  // Initialize pixels in the image to 0 and check for roll under.
-  memset(s, 0, image_size);
-
-  ASM_REGISTER_STATE_CHECK(GetParam()(s, noise, blackclamp, whiteclamp,
-                                      bothclamp, width, height, width));
-
-  // Check to make sure don't roll under.
-  for (int i = 0; i < image_size; ++i) {
-    EXPECT_LT(static_cast<int>(s[i]), 255 - clamp) << "i = " << i;
-  }
-
-  aom_free(s);
-}
-
-TEST_P(AddNoiseTest, CheckCvsAssembly) {
-  DECLARE_ALIGNED(16, char, blackclamp[16]);
-  DECLARE_ALIGNED(16, char, whiteclamp[16]);
-  DECLARE_ALIGNED(16, char, bothclamp[16]);
-  const int width = 64;
-  const int height = 64;
-  const int image_size = width * height;
-  char noise[3072];
-
-  const int clamp = aom_setup_noise(4.4, sizeof(noise), noise);
-
-  for (int i = 0; i < 16; i++) {
-    blackclamp[i] = clamp;
-    whiteclamp[i] = clamp;
-    bothclamp[i] = 2 * clamp;
-  }
-
-  uint8_t *const s = reinterpret_cast<uint8_t *>(aom_calloc(image_size, 1));
-  uint8_t *const d = reinterpret_cast<uint8_t *>(aom_calloc(image_size, 1));
-
-  memset(s, 99, image_size);
-  memset(d, 99, image_size);
-
-  srand(0);
-  ASM_REGISTER_STATE_CHECK(GetParam()(s, noise, blackclamp, whiteclamp,
-                                      bothclamp, width, height, width));
-  srand(0);
-  ASM_REGISTER_STATE_CHECK(aom_plane_add_noise_c(
-      d, noise, blackclamp, whiteclamp, bothclamp, width, height, width));
-
-  for (int i = 0; i < image_size; ++i) {
-    EXPECT_EQ(static_cast<int>(s[i]), static_cast<int>(d[i])) << "i = " << i;
-  }
-
-  aom_free(d);
-  aom_free(s);
-}
-
-INSTANTIATE_TEST_CASE_P(C, AddNoiseTest,
-                        ::testing::Values(aom_plane_add_noise_c));
-
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(SSE2, AddNoiseTest,
-                        ::testing::Values(aom_plane_add_noise_sse2));
-#endif
-
-#if HAVE_MSA
-INSTANTIATE_TEST_CASE_P(MSA, AddNoiseTest,
-                        ::testing::Values(aom_plane_add_noise_msa));
-#endif
-}  // namespace
