188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org/* 288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org * Copyright (c) 2014 The WebM project authors. All Rights Reserved. 388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org * 488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org * Use of this source code is governed by a BSD-style license 588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org * that can be found in the LICENSE file in the root of the source 688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org * tree. An additional intellectual property rights grant can be found 788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org * in the file PATENTS. All contributing project authors may 888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org * be found in the AUTHORS file in the root of the source tree. 988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org */ 1088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 1188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#include <assert.h> 1288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#include <emmintrin.h> // SSE2 1388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#include "./vpx_config.h" 1488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#include "vpx/vpx_integer.h" 1588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#include "vp9/common/vp9_common.h" 1688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#include "vp9/common/vp9_idct.h" 1788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 1888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// perform 8x8 transpose 1988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic INLINE void array_transpose_8x8(__m128i *in, __m128i *res) { 2088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr0_0 = _mm_unpacklo_epi16(in[0], in[1]); 2188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr0_1 = _mm_unpacklo_epi16(in[2], in[3]); 2288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr0_2 = _mm_unpackhi_epi16(in[0], in[1]); 2388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr0_3 = _mm_unpackhi_epi16(in[2], in[3]); 2488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr0_4 = _mm_unpacklo_epi16(in[4], in[5]); 2588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr0_5 = _mm_unpacklo_epi16(in[6], in[7]); 2688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr0_6 = _mm_unpackhi_epi16(in[4], in[5]); 2788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr0_7 = _mm_unpackhi_epi16(in[6], in[7]); 2888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 2988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr1_0 = _mm_unpacklo_epi32(tr0_0, tr0_1); 3088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr1_1 = _mm_unpacklo_epi32(tr0_4, tr0_5); 3188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr1_2 = _mm_unpackhi_epi32(tr0_0, tr0_1); 3288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr1_3 = _mm_unpackhi_epi32(tr0_4, tr0_5); 3388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr1_4 = _mm_unpacklo_epi32(tr0_2, tr0_3); 3488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr1_5 = _mm_unpacklo_epi32(tr0_6, tr0_7); 3588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr1_6 = _mm_unpackhi_epi32(tr0_2, tr0_3); 3688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr1_7 = _mm_unpackhi_epi32(tr0_6, tr0_7); 3788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 3888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res[0] = _mm_unpacklo_epi64(tr1_0, tr1_1); 3988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res[1] = _mm_unpackhi_epi64(tr1_0, tr1_1); 4088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res[2] = _mm_unpacklo_epi64(tr1_2, tr1_3); 4188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res[3] = _mm_unpackhi_epi64(tr1_2, tr1_3); 4288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res[4] = _mm_unpacklo_epi64(tr1_4, tr1_5); 4388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res[5] = _mm_unpackhi_epi64(tr1_4, tr1_5); 4488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res[6] = _mm_unpacklo_epi64(tr1_6, tr1_7); 4588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res[7] = _mm_unpackhi_epi64(tr1_6, tr1_7); 4688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org} 4788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 4888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define TRANSPOSE_8X4(in0, in1, in2, in3, out0, out1) \ 4988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org { \ 5088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr0_0 = _mm_unpacklo_epi16(in0, in1); \ 5188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr0_1 = _mm_unpacklo_epi16(in2, in3); \ 5288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org \ 5388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in0 = _mm_unpacklo_epi32(tr0_0, tr0_1); /* i1 i0 */ \ 5488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in1 = _mm_unpackhi_epi32(tr0_0, tr0_1); /* i3 i2 */ \ 5588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org } 5688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 5788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic INLINE void array_transpose_4X8(__m128i *in, __m128i * out) { 5888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr0_0 = _mm_unpacklo_epi16(in[0], in[1]); 5988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr0_1 = _mm_unpacklo_epi16(in[2], in[3]); 6088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr0_4 = _mm_unpacklo_epi16(in[4], in[5]); 6188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr0_5 = _mm_unpacklo_epi16(in[6], in[7]); 6288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 6388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr1_0 = _mm_unpacklo_epi32(tr0_0, tr0_1); 6488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr1_2 = _mm_unpackhi_epi32(tr0_0, tr0_1); 6588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr1_4 = _mm_unpacklo_epi32(tr0_4, tr0_5); 6688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i tr1_6 = _mm_unpackhi_epi32(tr0_4, tr0_5); 6788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 6888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org out[0] = _mm_unpacklo_epi64(tr1_0, tr1_4); 6988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org out[1] = _mm_unpackhi_epi64(tr1_0, tr1_4); 7088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org out[2] = _mm_unpacklo_epi64(tr1_2, tr1_6); 7188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org out[3] = _mm_unpackhi_epi64(tr1_2, tr1_6); 7288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org} 7388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 7488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic INLINE void array_transpose_16x16(__m128i *res0, __m128i *res1) { 7588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org __m128i tbuf[8]; 7688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org array_transpose_8x8(res0, res0); 7788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org array_transpose_8x8(res1, tbuf); 7888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org array_transpose_8x8(res0 + 8, res1); 7988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org array_transpose_8x8(res1 + 8, res1 + 8); 8088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 8188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res0[8] = tbuf[0]; 8288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res0[9] = tbuf[1]; 8388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res0[10] = tbuf[2]; 8488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res0[11] = tbuf[3]; 8588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res0[12] = tbuf[4]; 8688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res0[13] = tbuf[5]; 8788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res0[14] = tbuf[6]; 8888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org res0[15] = tbuf[7]; 8988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org} 9088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 9188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic INLINE void load_buffer_8x16(const int16_t *input, __m128i *in) { 9288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[0] = _mm_load_si128((const __m128i *)(input + 0 * 16)); 9388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[1] = _mm_load_si128((const __m128i *)(input + 1 * 16)); 9488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[2] = _mm_load_si128((const __m128i *)(input + 2 * 16)); 9588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[3] = _mm_load_si128((const __m128i *)(input + 3 * 16)); 9688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[4] = _mm_load_si128((const __m128i *)(input + 4 * 16)); 9788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[5] = _mm_load_si128((const __m128i *)(input + 5 * 16)); 9888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[6] = _mm_load_si128((const __m128i *)(input + 6 * 16)); 9988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[7] = _mm_load_si128((const __m128i *)(input + 7 * 16)); 10088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 10188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[8] = _mm_load_si128((const __m128i *)(input + 8 * 16)); 10288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[9] = _mm_load_si128((const __m128i *)(input + 9 * 16)); 10388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[10] = _mm_load_si128((const __m128i *)(input + 10 * 16)); 10488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[11] = _mm_load_si128((const __m128i *)(input + 11 * 16)); 10588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[12] = _mm_load_si128((const __m128i *)(input + 12 * 16)); 10688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[13] = _mm_load_si128((const __m128i *)(input + 13 * 16)); 10788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[14] = _mm_load_si128((const __m128i *)(input + 14 * 16)); 10888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[15] = _mm_load_si128((const __m128i *)(input + 15 * 16)); 10988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org} 11088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 11188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define RECON_AND_STORE(dest, in_x) \ 11288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org { \ 11388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org __m128i d0 = _mm_loadl_epi64((__m128i *)(dest)); \ 11488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org d0 = _mm_unpacklo_epi8(d0, zero); \ 11588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org d0 = _mm_add_epi16(in_x, d0); \ 11688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org d0 = _mm_packus_epi16(d0, d0); \ 11788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org _mm_storel_epi64((__m128i *)(dest), d0); \ 11888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org dest += stride; \ 11988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org } 12088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 12188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic INLINE void write_buffer_8x16(uint8_t *dest, __m128i *in, int stride) { 12288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i final_rounding = _mm_set1_epi16(1<<5); 12388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const __m128i zero = _mm_setzero_si128(); 12488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org // Final rounding and shift 12588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[0] = _mm_adds_epi16(in[0], final_rounding); 12688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[1] = _mm_adds_epi16(in[1], final_rounding); 12788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[2] = _mm_adds_epi16(in[2], final_rounding); 12888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[3] = _mm_adds_epi16(in[3], final_rounding); 12988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[4] = _mm_adds_epi16(in[4], final_rounding); 13088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[5] = _mm_adds_epi16(in[5], final_rounding); 13188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[6] = _mm_adds_epi16(in[6], final_rounding); 13288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[7] = _mm_adds_epi16(in[7], final_rounding); 13388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[8] = _mm_adds_epi16(in[8], final_rounding); 13488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[9] = _mm_adds_epi16(in[9], final_rounding); 13588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[10] = _mm_adds_epi16(in[10], final_rounding); 13688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[11] = _mm_adds_epi16(in[11], final_rounding); 13788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[12] = _mm_adds_epi16(in[12], final_rounding); 13888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[13] = _mm_adds_epi16(in[13], final_rounding); 13988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[14] = _mm_adds_epi16(in[14], final_rounding); 14088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[15] = _mm_adds_epi16(in[15], final_rounding); 14188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 14288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[0] = _mm_srai_epi16(in[0], 6); 14388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[1] = _mm_srai_epi16(in[1], 6); 14488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[2] = _mm_srai_epi16(in[2], 6); 14588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[3] = _mm_srai_epi16(in[3], 6); 14688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[4] = _mm_srai_epi16(in[4], 6); 14788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[5] = _mm_srai_epi16(in[5], 6); 14888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[6] = _mm_srai_epi16(in[6], 6); 14988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[7] = _mm_srai_epi16(in[7], 6); 15088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[8] = _mm_srai_epi16(in[8], 6); 15188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[9] = _mm_srai_epi16(in[9], 6); 15288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[10] = _mm_srai_epi16(in[10], 6); 15388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[11] = _mm_srai_epi16(in[11], 6); 15488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[12] = _mm_srai_epi16(in[12], 6); 15588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[13] = _mm_srai_epi16(in[13], 6); 15688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[14] = _mm_srai_epi16(in[14], 6); 15788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org in[15] = _mm_srai_epi16(in[15], 6); 15888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 15988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[0]); 16088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[1]); 16188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[2]); 16288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[3]); 16388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[4]); 16488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[5]); 16588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[6]); 16688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[7]); 16788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[8]); 16888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[9]); 16988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[10]); 17088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[11]); 17188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[12]); 17288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[13]); 17388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[14]); 17488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECON_AND_STORE(dest, in[15]); 17588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org} 176