1411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org/* 2411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org * Copyright (c) 2014 The WebM project authors. All Rights Reserved. 3411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org * 4411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org * Use of this source code is governed by a BSD-style license 5411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org * that can be found in the LICENSE file in the root of the source 6411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org * tree. An additional intellectual property rights grant can be found 7411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org * in the file PATENTS. All contributing project authors may 8411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org * be found in the AUTHORS file in the root of the source tree. 9411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org */ 10411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org 11411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org#include <arm_neon.h> 12411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org 13411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.orgvoid vp8_dc_only_idct_add_neon( 14411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org int16_t input_dc, 15411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org unsigned char *pred_ptr, 16411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org int pred_stride, 17411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org unsigned char *dst_ptr, 18411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org int dst_stride) { 19411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org int i; 20411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org uint16_t a1 = ((input_dc + 4) >> 3); 21411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org uint32x2_t d2u32 = vdup_n_u32(0); 22411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org uint8x8_t d2u8; 23411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org uint16x8_t q1u16; 24411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org uint16x8_t qAdd; 25411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org 26411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org qAdd = vdupq_n_u16(a1); 27411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org 28411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org for (i = 0; i < 2; i++) { 29411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org d2u32 = vld1_lane_u32((const uint32_t *)pred_ptr, d2u32, 0); 30411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org pred_ptr += pred_stride; 31411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org d2u32 = vld1_lane_u32((const uint32_t *)pred_ptr, d2u32, 1); 32411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org pred_ptr += pred_stride; 33411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org 34411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org q1u16 = vaddw_u8(qAdd, vreinterpret_u8_u32(d2u32)); 35411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org d2u8 = vqmovun_s16(vreinterpretq_s16_u16(q1u16)); 36411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org 37411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org vst1_lane_u32((uint32_t *)dst_ptr, vreinterpret_u32_u8(d2u8), 0); 38411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org dst_ptr += dst_stride; 39411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org vst1_lane_u32((uint32_t *)dst_ptr, vreinterpret_u32_u8(d2u8), 1); 40411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org dst_ptr += dst_stride; 41411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org } 42411971f94253c85e1866c281860d6344f6aa0c78fgalligan@chromium.org} 43