Fix highbd DCT and ADST data overwriting issue

Exposed by Change-Id: I048c6e9cc790520247cc21ae9b92a9c8d84d00a7

BUG=aomedia:525

Change-Id: Ia83f8a8efcf0eac4912f247f38887c0dd533da85
diff --git a/av1/common/av1_inv_txfm1d.c b/av1/common/av1_inv_txfm1d.c
index e9f04d3..3399b7c 100644
--- a/av1/common/av1_inv_txfm1d.c
+++ b/av1/common/av1_inv_txfm1d.c
@@ -67,6 +67,7 @@
 
   // stage 1;
   stage++;
+  assert(output != input);
   bf1 = output;
   bf1[0] = input[0];
   bf1[1] = input[2];
@@ -110,6 +111,7 @@
 
   // stage 1;
   stage++;
+  assert(output != input);
   bf1 = output;
   bf1[0] = input[0];
   bf1[1] = input[4];
@@ -195,6 +197,7 @@
 
   // stage 1;
   stage++;
+  assert(output != input);
   bf1 = output;
   bf1[0] = input[0];
   bf1[1] = input[8];
@@ -366,6 +369,7 @@
 
   // stage 1;
   stage++;
+  assert(output != input);
   bf1 = output;
   bf1[0] = input[0];
   bf1[1] = input[16];
@@ -727,6 +731,7 @@
 
   // stage 1;
   stage++;
+  assert(output != input);
   bf1 = output;
   bf1[0] = input[0];
   bf1[1] = -input[3];
@@ -791,6 +796,7 @@
 
   // stage 1;
   stage++;
+  assert(output != input);
   bf1 = output;
   bf1[0] = input[0];
   bf1[1] = -input[7];
@@ -904,6 +910,7 @@
 
   // stage 1;
   stage++;
+  assert(output != input);
   bf1 = output;
   bf1[0] = input[0];
   bf1[1] = -input[15];
@@ -1118,6 +1125,7 @@
 
   // stage 1;
   stage++;
+  assert(output != input);
   bf1 = output;
   bf1[0] = input[0];
   bf1[1] = -input[31];
@@ -1587,6 +1595,7 @@
   // stage 1;
   stage++;
   cospi = cospi_arr(cos_bit[stage]);
+  assert(output != input);
   bf1 = output;
   bf1[0] = input[0];
   bf1[1] = input[32];
diff --git a/av1/common/idct.c b/av1/common/idct.c
index e3aad5a..6cf99c9 100644
--- a/av1/common/idct.c
+++ b/av1/common/idct.c
@@ -359,7 +359,7 @@
   };
 
   int i, j;
-  tran_low_t tmp;
+  tran_low_t tmp[4][4];
   tran_low_t out[4][4];
   tran_low_t *outp = &out[0][0];
   int outstride = 4;
@@ -371,17 +371,15 @@
   }
 
   // transpose
-  for (i = 1; i < 4; i++) {
-    for (j = 0; j < i; j++) {
-      tmp = out[i][j];
-      out[i][j] = out[j][i];
-      out[j][i] = tmp;
+  for (i = 0; i < 4; i++) {
+    for (j = 0; j < 4; j++) {
+      tmp[j][i] = out[i][j];
     }
   }
 
   // inverse transform column vectors
   for (i = 0; i < 4; ++i) {
-    IHT_4[tx_type].cols(out[i], out[i]);
+    IHT_4[tx_type].cols(tmp[i], out[i]);
   }
 
 #if CONFIG_EXT_TX
@@ -424,7 +422,7 @@
   const int n = 4;
   const int n2 = 8;
   int i, j;
-  tran_low_t out[4][8], outtmp[4];
+  tran_low_t out[4][8], tmp[4][8], outtmp[4];
   tran_low_t *outp = &out[0][0];
   int outstride = n2;
 
@@ -432,13 +430,13 @@
   for (i = 0; i < n2; ++i) {
     IHT_4x8[tx_type].rows(input, outtmp);
     for (j = 0; j < n; ++j)
-      out[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
+      tmp[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
     input += n;
   }
 
   // inverse transform column vectors
   for (i = 0; i < n; ++i) {
-    IHT_4x8[tx_type].cols(out[i], out[i]);
+    IHT_4x8[tx_type].cols(tmp[i], out[i]);
   }
 
 #if CONFIG_EXT_TX
@@ -481,7 +479,7 @@
   const int n2 = 8;
 
   int i, j;
-  tran_low_t out[8][4], outtmp[8];
+  tran_low_t out[8][4], tmp[8][4], outtmp[8];
   tran_low_t *outp = &out[0][0];
   int outstride = n;
 
@@ -489,13 +487,13 @@
   for (i = 0; i < n; ++i) {
     IHT_8x4[tx_type].rows(input, outtmp);
     for (j = 0; j < n2; ++j)
-      out[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
+      tmp[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
     input += n2;
   }
 
   // inverse transform column vectors
   for (i = 0; i < n2; ++i) {
-    IHT_8x4[tx_type].cols(out[i], out[i]);
+    IHT_8x4[tx_type].cols(tmp[i], out[i]);
   }
 
 #if CONFIG_EXT_TX
@@ -538,19 +536,19 @@
   const int n = 4;
   const int n4 = 16;
   int i, j;
-  tran_low_t out[4][16], outtmp[4];
+  tran_low_t out[4][16], tmp[4][16], outtmp[4];
   tran_low_t *outp = &out[0][0];
   int outstride = n4;
 
   // inverse transform row vectors and transpose
   for (i = 0; i < n4; ++i) {
     IHT_4x16[tx_type].rows(input, outtmp);
-    for (j = 0; j < n; ++j) out[j][i] = outtmp[j];
+    for (j = 0; j < n; ++j) tmp[j][i] = outtmp[j];
     input += n;
   }
 
   // inverse transform column vectors
-  for (i = 0; i < n; ++i) IHT_4x16[tx_type].cols(out[i], out[i]);
+  for (i = 0; i < n; ++i) IHT_4x16[tx_type].cols(tmp[i], out[i]);
 
 #if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n4, n);
@@ -592,19 +590,19 @@
   const int n4 = 16;
 
   int i, j;
-  tran_low_t out[16][4], outtmp[16];
+  tran_low_t out[16][4], tmp[16][4], outtmp[16];
   tran_low_t *outp = &out[0][0];
   int outstride = n;
 
   // inverse transform row vectors and transpose
   for (i = 0; i < n; ++i) {
     IHT_16x4[tx_type].rows(input, outtmp);
-    for (j = 0; j < n4; ++j) out[j][i] = outtmp[j];
+    for (j = 0; j < n4; ++j) tmp[j][i] = outtmp[j];
     input += n4;
   }
 
   // inverse transform column vectors
-  for (i = 0; i < n4; ++i) IHT_16x4[tx_type].cols(out[i], out[i]);
+  for (i = 0; i < n4; ++i) IHT_16x4[tx_type].cols(tmp[i], out[i]);
 
 #if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n, n4);
@@ -646,7 +644,7 @@
   const int n = 8;
   const int n2 = 16;
   int i, j;
-  tran_low_t out[8][16], outtmp[8];
+  tran_low_t out[8][16], tmp[8][16], outtmp[8];
   tran_low_t *outp = &out[0][0];
   int outstride = n2;
 
@@ -654,13 +652,13 @@
   for (i = 0; i < n2; ++i) {
     IHT_8x16[tx_type].rows(input, outtmp);
     for (j = 0; j < n; ++j)
-      out[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
+      tmp[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
     input += n;
   }
 
   // inverse transform column vectors
   for (i = 0; i < n; ++i) {
-    IHT_8x16[tx_type].cols(out[i], out[i]);
+    IHT_8x16[tx_type].cols(tmp[i], out[i]);
   }
 
 #if CONFIG_EXT_TX
@@ -703,7 +701,7 @@
   const int n2 = 16;
 
   int i, j;
-  tran_low_t out[16][8], outtmp[16];
+  tran_low_t out[16][8], tmp[16][8], outtmp[16];
   tran_low_t *outp = &out[0][0];
   int outstride = n;
 
@@ -711,13 +709,13 @@
   for (i = 0; i < n; ++i) {
     IHT_16x8[tx_type].rows(input, outtmp);
     for (j = 0; j < n2; ++j)
-      out[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
+      tmp[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
     input += n2;
   }
 
   // inverse transform column vectors
   for (i = 0; i < n2; ++i) {
-    IHT_16x8[tx_type].cols(out[i], out[i]);
+    IHT_16x8[tx_type].cols(tmp[i], out[i]);
   }
 
 #if CONFIG_EXT_TX
@@ -760,19 +758,19 @@
   const int n = 8;
   const int n4 = 32;
   int i, j;
-  tran_low_t out[8][32], outtmp[8];
+  tran_low_t out[8][32], tmp[8][32], outtmp[8];
   tran_low_t *outp = &out[0][0];
   int outstride = n4;
 
   // inverse transform row vectors and transpose
   for (i = 0; i < n4; ++i) {
     IHT_8x32[tx_type].rows(input, outtmp);
-    for (j = 0; j < n; ++j) out[j][i] = outtmp[j];
+    for (j = 0; j < n; ++j) tmp[j][i] = outtmp[j];
     input += n;
   }
 
   // inverse transform column vectors
-  for (i = 0; i < n; ++i) IHT_8x32[tx_type].cols(out[i], out[i]);
+  for (i = 0; i < n; ++i) IHT_8x32[tx_type].cols(tmp[i], out[i]);
 
 #if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n4, n);
@@ -814,19 +812,19 @@
   const int n4 = 32;
 
   int i, j;
-  tran_low_t out[32][8], outtmp[32];
+  tran_low_t out[32][8], tmp[32][8], outtmp[32];
   tran_low_t *outp = &out[0][0];
   int outstride = n;
 
   // inverse transform row vectors and transpose
   for (i = 0; i < n; ++i) {
     IHT_32x8[tx_type].rows(input, outtmp);
-    for (j = 0; j < n4; ++j) out[j][i] = outtmp[j];
+    for (j = 0; j < n4; ++j) tmp[j][i] = outtmp[j];
     input += n4;
   }
 
   // inverse transform column vectors
-  for (i = 0; i < n4; ++i) IHT_32x8[tx_type].cols(out[i], out[i]);
+  for (i = 0; i < n4; ++i) IHT_32x8[tx_type].cols(tmp[i], out[i]);
 
 #if CONFIG_EXT_TX
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, n, n4);
@@ -868,7 +866,7 @@
   const int n = 16;
   const int n2 = 32;
   int i, j;
-  tran_low_t out[16][32], outtmp[16];
+  tran_low_t out[16][32], tmp[16][32], outtmp[16];
   tran_low_t *outp = &out[0][0];
   int outstride = n2;
 
@@ -876,13 +874,13 @@
   for (i = 0; i < n2; ++i) {
     IHT_16x32[tx_type].rows(input, outtmp);
     for (j = 0; j < n; ++j)
-      out[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
+      tmp[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
     input += n;
   }
 
   // inverse transform column vectors
   for (i = 0; i < n; ++i) {
-    IHT_16x32[tx_type].cols(out[i], out[i]);
+    IHT_16x32[tx_type].cols(tmp[i], out[i]);
   }
 
 #if CONFIG_EXT_TX
@@ -925,7 +923,7 @@
   const int n2 = 32;
 
   int i, j;
-  tran_low_t out[32][16], outtmp[32];
+  tran_low_t out[32][16], tmp[32][16], outtmp[32];
   tran_low_t *outp = &out[0][0];
   int outstride = n;
 
@@ -933,13 +931,13 @@
   for (i = 0; i < n; ++i) {
     IHT_32x16[tx_type].rows(input, outtmp);
     for (j = 0; j < n2; ++j)
-      out[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
+      tmp[j][i] = (tran_low_t)dct_const_round_shift(outtmp[j] * Sqrt2);
     input += n2;
   }
 
   // inverse transform column vectors
   for (i = 0; i < n2; ++i) {
-    IHT_32x16[tx_type].cols(out[i], out[i]);
+    IHT_32x16[tx_type].cols(tmp[i], out[i]);
   }
 
 #if CONFIG_EXT_TX
@@ -980,7 +978,7 @@
   };
 
   int i, j;
-  tran_low_t tmp;
+  tran_low_t tmp[8][8];
   tran_low_t out[8][8];
   tran_low_t *outp = &out[0][0];
   int outstride = 8;
@@ -992,17 +990,15 @@
   }
 
   // transpose
-  for (i = 1; i < 8; i++) {
-    for (j = 0; j < i; j++) {
-      tmp = out[i][j];
-      out[i][j] = out[j][i];
-      out[j][i] = tmp;
+  for (i = 0; i < 8; i++) {
+    for (j = 0; j < 8; j++) {
+      tmp[j][i] = out[i][j];
     }
   }
 
   // inverse transform column vectors
   for (i = 0; i < 8; ++i) {
-    IHT_8[tx_type].cols(out[i], out[i]);
+    IHT_8[tx_type].cols(tmp[i], out[i]);
   }
 
 #if CONFIG_EXT_TX
@@ -1043,7 +1039,7 @@
   };
 
   int i, j;
-  tran_low_t tmp;
+  tran_low_t tmp[16][16];
   tran_low_t out[16][16];
   tran_low_t *outp = &out[0][0];
   int outstride = 16;
@@ -1055,17 +1051,15 @@
   }
 
   // transpose
-  for (i = 1; i < 16; i++) {
-    for (j = 0; j < i; j++) {
-      tmp = out[i][j];
-      out[i][j] = out[j][i];
-      out[j][i] = tmp;
+  for (i = 0; i < 16; i++) {
+    for (j = 0; j < 16; j++) {
+      tmp[j][i] = out[i][j];
     }
   }
 
   // inverse transform column vectors
   for (i = 0; i < 16; ++i) {
-    IHT_16[tx_type].cols(out[i], out[i]);
+    IHT_16[tx_type].cols(tmp[i], out[i]);
   }
 
 #if CONFIG_EXT_TX
@@ -1105,7 +1099,7 @@
   };
 
   int i, j;
-  tran_low_t tmp;
+  tran_low_t tmp[32][32];
   tran_low_t out[32][32];
   tran_low_t *outp = &out[0][0];
   int outstride = 32;
@@ -1117,17 +1111,15 @@
   }
 
   // transpose
-  for (i = 1; i < 32; i++) {
-    for (j = 0; j < i; j++) {
-      tmp = out[i][j];
-      out[i][j] = out[j][i];
-      out[j][i] = tmp;
+  for (i = 0; i < 32; i++) {
+    for (j = 0; j < 32; j++) {
+      tmp[j][i] = out[i][j];
     }
   }
 
   // inverse transform column vectors
   for (i = 0; i < 32; ++i) {
-    IHT_32[tx_type].cols(out[i], out[i]);
+    IHT_32[tx_type].cols(tmp[i], out[i]);
   }
 
   maybe_flip_strides(&dest, &stride, &outp, &outstride, tx_type, 32, 32);
@@ -1168,7 +1160,7 @@
   };
 
   int i, j;
-  tran_low_t tmp;
+  tran_low_t tmp[64][64];
   tran_low_t out[64][64];
   tran_low_t *outp = &out[0][0];
   int outstride = 64;
@@ -1181,17 +1173,15 @@
   }
 
   // transpose
-  for (i = 1; i < 64; i++) {
-    for (j = 0; j < i; j++) {
-      tmp = out[i][j];
-      out[i][j] = out[j][i];
-      out[j][i] = tmp;
+  for (i = 0; i < 64; i++) {
+    for (j = 0; j < 64; j++) {
+      tmp[j][i] = out[i][j];
     }
   }
 
   // inverse transform column vectors
   for (i = 0; i < 64; ++i) {
-    IHT_64[tx_type].cols(out[i], out[i]);
+    IHT_64[tx_type].cols(tmp[i], out[i]);
   }
 
 #if CONFIG_EXT_TX
@@ -1571,7 +1561,7 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t tmp;
+  tran_low_t tmp[4][4];
   tran_low_t out[4][4];
   tran_low_t *outp = &out[0][0];
   int outstride = 4;
@@ -1583,17 +1573,15 @@
   }
 
   // transpose
-  for (i = 1; i < 4; i++) {
-    for (j = 0; j < i; j++) {
-      tmp = out[i][j];
-      out[i][j] = out[j][i];
-      out[j][i] = tmp;
+  for (i = 0; i < 4; i++) {
+    for (j = 0; j < 4; j++) {
+      tmp[j][i] = out[i][j];
     }
   }
 
   // inverse transform column vectors
   for (i = 0; i < 4; ++i) {
-    HIGH_IHT_4[tx_type].cols(out[i], out[i], bd);
+    HIGH_IHT_4[tx_type].cols(tmp[i], out[i], bd);
   }
 
 #if CONFIG_EXT_TX
@@ -1639,7 +1627,7 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t out[4][8], outtmp[4];
+  tran_low_t out[4][8], tmp[4][8], outtmp[4];
   tran_low_t *outp = &out[0][0];
   int outstride = n2;
 
@@ -1647,14 +1635,14 @@
   for (i = 0; i < n2; ++i) {
     HIGH_IHT_4x8[tx_type].rows(input, outtmp, bd);
     for (j = 0; j < n; ++j) {
-      out[j][i] = HIGHBD_WRAPLOW(dct_const_round_shift(outtmp[j] * Sqrt2), bd);
+      tmp[j][i] = HIGHBD_WRAPLOW(dct_const_round_shift(outtmp[j] * Sqrt2), bd);
     }
     input += n;
   }
 
   // inverse transform column vectors
   for (i = 0; i < n; ++i) {
-    HIGH_IHT_4x8[tx_type].cols(out[i], out[i], bd);
+    HIGH_IHT_4x8[tx_type].cols(tmp[i], out[i], bd);
   }
 
 #if CONFIG_EXT_TX
@@ -1700,7 +1688,7 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t out[8][4], outtmp[8];
+  tran_low_t out[8][4], tmp[8][4], outtmp[8];
   tran_low_t *outp = &out[0][0];
   int outstride = n;
 
@@ -1708,14 +1696,14 @@
   for (i = 0; i < n; ++i) {
     HIGH_IHT_8x4[tx_type].rows(input, outtmp, bd);
     for (j = 0; j < n2; ++j) {
-      out[j][i] = HIGHBD_WRAPLOW(dct_const_round_shift(outtmp[j] * Sqrt2), bd);
+      tmp[j][i] = HIGHBD_WRAPLOW(dct_const_round_shift(outtmp[j] * Sqrt2), bd);
     }
     input += n2;
   }
 
   // inverse transform column vectors
   for (i = 0; i < n2; ++i) {
-    HIGH_IHT_8x4[tx_type].cols(out[i], out[i], bd);
+    HIGH_IHT_8x4[tx_type].cols(tmp[i], out[i], bd);
   }
 
 #if CONFIG_EXT_TX
@@ -1761,19 +1749,19 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t out[4][16], outtmp[4];
+  tran_low_t out[4][16], tmp[4][16], outtmp[4];
   tran_low_t *outp = &out[0][0];
   int outstride = n4;
 
   // inverse transform row vectors, and transpose
   for (i = 0; i < n4; ++i) {
     HIGH_IHT_4x16[tx_type].rows(input, outtmp, bd);
-    for (j = 0; j < n; ++j) out[j][i] = outtmp[j];
+    for (j = 0; j < n; ++j) tmp[j][i] = outtmp[j];
     input += n;
   }
 
   // inverse transform column vectors
-  for (i = 0; i < n; ++i) HIGH_IHT_4x16[tx_type].cols(out[i], out[i], bd);
+  for (i = 0; i < n; ++i) HIGH_IHT_4x16[tx_type].cols(tmp[i], out[i], bd);
 
 #if CONFIG_EXT_TX
   maybe_flip_strides16(&dest, &stride, &outp, &outstride, tx_type, n4, n);
@@ -1818,20 +1806,20 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t out[16][4], outtmp[16];
+  tran_low_t out[16][4], tmp[16][4], outtmp[16];
   tran_low_t *outp = &out[0][0];
   int outstride = n;
 
   // inverse transform row vectors, and transpose
   for (i = 0; i < n; ++i) {
     HIGH_IHT_16x4[tx_type].rows(input, outtmp, bd);
-    for (j = 0; j < n4; ++j) out[j][i] = outtmp[j];
+    for (j = 0; j < n4; ++j) tmp[j][i] = outtmp[j];
     input += n4;
   }
 
   // inverse transform column vectors
   for (i = 0; i < n4; ++i) {
-    HIGH_IHT_16x4[tx_type].cols(out[i], out[i], bd);
+    HIGH_IHT_16x4[tx_type].cols(tmp[i], out[i], bd);
   }
 
 #if CONFIG_EXT_TX
@@ -1877,7 +1865,7 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t out[8][16], outtmp[8];
+  tran_low_t out[8][16], tmp[8][16], outtmp[8];
   tran_low_t *outp = &out[0][0];
   int outstride = n2;
 
@@ -1885,13 +1873,13 @@
   for (i = 0; i < n2; ++i) {
     HIGH_IHT_8x16[tx_type].rows(input, outtmp, bd);
     for (j = 0; j < n; ++j)
-      out[j][i] = HIGHBD_WRAPLOW(dct_const_round_shift(outtmp[j] * Sqrt2), bd);
+      tmp[j][i] = HIGHBD_WRAPLOW(dct_const_round_shift(outtmp[j] * Sqrt2), bd);
     input += n;
   }
 
   // inverse transform column vectors
   for (i = 0; i < n; ++i) {
-    HIGH_IHT_8x16[tx_type].cols(out[i], out[i], bd);
+    HIGH_IHT_8x16[tx_type].cols(tmp[i], out[i], bd);
   }
 
 #if CONFIG_EXT_TX
@@ -1937,7 +1925,7 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t out[16][8], outtmp[16];
+  tran_low_t out[16][8], tmp[16][8], outtmp[16];
   tran_low_t *outp = &out[0][0];
   int outstride = n;
 
@@ -1945,13 +1933,13 @@
   for (i = 0; i < n; ++i) {
     HIGH_IHT_16x8[tx_type].rows(input, outtmp, bd);
     for (j = 0; j < n2; ++j)
-      out[j][i] = HIGHBD_WRAPLOW(dct_const_round_shift(outtmp[j] * Sqrt2), bd);
+      tmp[j][i] = HIGHBD_WRAPLOW(dct_const_round_shift(outtmp[j] * Sqrt2), bd);
     input += n2;
   }
 
   // inverse transform column vectors
   for (i = 0; i < n2; ++i) {
-    HIGH_IHT_16x8[tx_type].cols(out[i], out[i], bd);
+    HIGH_IHT_16x8[tx_type].cols(tmp[i], out[i], bd);
   }
 
 #if CONFIG_EXT_TX
@@ -1997,19 +1985,19 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t out[8][32], outtmp[8];
+  tran_low_t out[8][32], tmp[8][32], outtmp[8];
   tran_low_t *outp = &out[0][0];
   int outstride = n4;
 
   // inverse transform row vectors, and transpose
   for (i = 0; i < n4; ++i) {
     HIGH_IHT_8x32[tx_type].rows(input, outtmp, bd);
-    for (j = 0; j < n; ++j) out[j][i] = outtmp[j];
+    for (j = 0; j < n; ++j) tmp[j][i] = outtmp[j];
     input += n;
   }
 
   // inverse transform column vectors
-  for (i = 0; i < n; ++i) HIGH_IHT_8x32[tx_type].cols(out[i], out[i], bd);
+  for (i = 0; i < n; ++i) HIGH_IHT_8x32[tx_type].cols(tmp[i], out[i], bd);
 
 #if CONFIG_EXT_TX
   maybe_flip_strides16(&dest, &stride, &outp, &outstride, tx_type, n4, n);
@@ -2054,19 +2042,19 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t out[32][8], outtmp[32];
+  tran_low_t out[32][8], tmp[32][8], outtmp[32];
   tran_low_t *outp = &out[0][0];
   int outstride = n;
 
   // inverse transform row vectors, and transpose
   for (i = 0; i < n; ++i) {
     HIGH_IHT_32x8[tx_type].rows(input, outtmp, bd);
-    for (j = 0; j < n4; ++j) out[j][i] = outtmp[j];
+    for (j = 0; j < n4; ++j) tmp[j][i] = outtmp[j];
     input += n4;
   }
 
   // inverse transform column vectors
-  for (i = 0; i < n4; ++i) HIGH_IHT_32x8[tx_type].cols(out[i], out[i], bd);
+  for (i = 0; i < n4; ++i) HIGH_IHT_32x8[tx_type].cols(tmp[i], out[i], bd);
 
 #if CONFIG_EXT_TX
   maybe_flip_strides16(&dest, &stride, &outp, &outstride, tx_type, n, n4);
@@ -2111,7 +2099,7 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t out[16][32], outtmp[16];
+  tran_low_t out[16][32], tmp[16][32], outtmp[16];
   tran_low_t *outp = &out[0][0];
   int outstride = n2;
 
@@ -2119,13 +2107,13 @@
   for (i = 0; i < n2; ++i) {
     HIGH_IHT_16x32[tx_type].rows(input, outtmp, bd);
     for (j = 0; j < n; ++j)
-      out[j][i] = HIGHBD_WRAPLOW(dct_const_round_shift(outtmp[j] * Sqrt2), bd);
+      tmp[j][i] = HIGHBD_WRAPLOW(dct_const_round_shift(outtmp[j] * Sqrt2), bd);
     input += n;
   }
 
   // inverse transform column vectors
   for (i = 0; i < n; ++i) {
-    HIGH_IHT_16x32[tx_type].cols(out[i], out[i], bd);
+    HIGH_IHT_16x32[tx_type].cols(tmp[i], out[i], bd);
   }
 
 #if CONFIG_EXT_TX
@@ -2171,7 +2159,7 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t out[32][16], outtmp[32];
+  tran_low_t out[32][16], tmp[32][16], outtmp[32];
   tran_low_t *outp = &out[0][0];
   int outstride = n;
 
@@ -2179,13 +2167,13 @@
   for (i = 0; i < n; ++i) {
     HIGH_IHT_32x16[tx_type].rows(input, outtmp, bd);
     for (j = 0; j < n2; ++j)
-      out[j][i] = HIGHBD_WRAPLOW(dct_const_round_shift(outtmp[j] * Sqrt2), bd);
+      tmp[j][i] = HIGHBD_WRAPLOW(dct_const_round_shift(outtmp[j] * Sqrt2), bd);
     input += n2;
   }
 
   // inverse transform column vectors
   for (i = 0; i < n2; ++i) {
-    HIGH_IHT_32x16[tx_type].cols(out[i], out[i], bd);
+    HIGH_IHT_32x16[tx_type].cols(tmp[i], out[i], bd);
   }
 
 #if CONFIG_EXT_TX
@@ -2229,7 +2217,7 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t tmp;
+  tran_low_t tmp[8][8];
   tran_low_t out[8][8];
   tran_low_t *outp = &out[0][0];
   int outstride = 8;
@@ -2241,17 +2229,15 @@
   }
 
   // transpose
-  for (i = 1; i < 8; i++) {
-    for (j = 0; j < i; j++) {
-      tmp = out[i][j];
-      out[i][j] = out[j][i];
-      out[j][i] = tmp;
+  for (i = 0; i < 8; i++) {
+    for (j = 0; j < 8; j++) {
+      tmp[j][i] = out[i][j];
     }
   }
 
   // inverse transform column vectors
   for (i = 0; i < 8; ++i) {
-    HIGH_IHT_8[tx_type].cols(out[i], out[i], bd);
+    HIGH_IHT_8[tx_type].cols(tmp[i], out[i], bd);
   }
 
 #if CONFIG_EXT_TX
@@ -2295,7 +2281,7 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t tmp;
+  tran_low_t tmp[16][16];
   tran_low_t out[16][16];
   tran_low_t *outp = &out[0][0];
   int outstride = 16;
@@ -2307,17 +2293,15 @@
   }
 
   // transpose
-  for (i = 1; i < 16; i++) {
-    for (j = 0; j < i; j++) {
-      tmp = out[i][j];
-      out[i][j] = out[j][i];
-      out[j][i] = tmp;
+  for (i = 0; i < 16; i++) {
+    for (j = 0; j < 16; j++) {
+      tmp[j][i] = out[i][j];
     }
   }
 
   // inverse transform column vectors
   for (i = 0; i < 16; ++i) {
-    HIGH_IHT_16[tx_type].cols(out[i], out[i], bd);
+    HIGH_IHT_16[tx_type].cols(tmp[i], out[i], bd);
   }
 
 #if CONFIG_EXT_TX
@@ -2360,7 +2344,7 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t tmp;
+  tran_low_t tmp[32][32];
   tran_low_t out[32][32];
   tran_low_t *outp = &out[0][0];
   int outstride = 32;
@@ -2372,17 +2356,15 @@
   }
 
   // transpose
-  for (i = 1; i < 32; i++) {
-    for (j = 0; j < i; j++) {
-      tmp = out[i][j];
-      out[i][j] = out[j][i];
-      out[j][i] = tmp;
+  for (i = 0; i < 32; i++) {
+    for (j = 0; j < 32; j++) {
+      tmp[j][i] = out[i][j];
     }
   }
 
   // inverse transform column vectors
   for (i = 0; i < 32; ++i) {
-    HIGH_IHT_32[tx_type].cols(out[i], out[i], bd);
+    HIGH_IHT_32[tx_type].cols(tmp[i], out[i], bd);
   }
 
   maybe_flip_strides16(&dest, &stride, &outp, &outstride, tx_type, 32, 32);
@@ -2426,7 +2408,7 @@
   uint16_t *dest = CONVERT_TO_SHORTPTR(dest8);
 
   int i, j;
-  tran_low_t tmp;
+  tran_low_t tmp[64][64];
   tran_low_t out[64][64];
   tran_low_t *outp = &out[0][0];
   int outstride = 64;
@@ -2439,17 +2421,15 @@
   }
 
   // transpose
-  for (i = 1; i < 64; i++) {
-    for (j = 0; j < i; j++) {
-      tmp = out[i][j];
-      out[i][j] = out[j][i];
-      out[j][i] = tmp;
+  for (i = 0; i < 64; i++) {
+    for (j = 0; j < 64; j++) {
+      tmp[j][i] = out[i][j];
     }
   }
 
   // inverse transform column vectors
   for (i = 0; i < 64; ++i) {
-    HIGH_IHT_64[tx_type].cols(out[i], out[i], bd);
+    HIGH_IHT_64[tx_type].cols(tmp[i], out[i], bd);
   }
 
 #if CONFIG_EXT_TX