15c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org/* 25c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org * Copyright (c) 2012 The WebM project authors. All Rights Reserved. 35c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org * 45c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org * Use of this source code is governed by a BSD-style license 55c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org * that can be found in the LICENSE file in the root of the source 65c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org * tree. An additional intellectual property rights grant can be found 75c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org * in the file PATENTS. All contributing project authors may 85c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org * be found in the AUTHORS file in the root of the source tree. 95c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org */ 105c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 115c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 125c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#include "vpx_config.h" 136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "vp8_rtcd.h" 145c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#include "vpx_ports/x86.h" 155c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#include "vp8/encoder/block.h" 165c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 175c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgint vp8_mbblock_error_xmm_impl(short *coeff_ptr, short *dcoef_ptr, int dc); 185c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgint vp8_mbblock_error_xmm(MACROBLOCK *mb, int dc) 195c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org{ 205c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org short *coeff_ptr = mb->block[0].coeff; 215c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org short *dcoef_ptr = mb->e_mbd.block[0].dqcoeff; 225c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org return vp8_mbblock_error_xmm_impl(coeff_ptr, dcoef_ptr, dc); 235c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org} 245c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 255c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgint vp8_mbuverror_xmm_impl(short *s_ptr, short *d_ptr); 265c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgint vp8_mbuverror_xmm(MACROBLOCK *mb) 275c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org{ 285c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org short *s_ptr = &mb->coeff[256]; 295c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org short *d_ptr = &mb->e_mbd.dqcoeff[256]; 305c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org return vp8_mbuverror_xmm_impl(s_ptr, d_ptr); 315c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org} 325c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 335c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgvoid vp8_subtract_b_sse2_impl(unsigned char *z, int src_stride, 345c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org short *diff, unsigned char *predictor, 355c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org int pitch); 365c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgvoid vp8_subtract_b_sse2(BLOCK *be, BLOCKD *bd, int pitch) 375c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org{ 385c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org unsigned char *z = *(be->base_src) + be->src; 395c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org unsigned int src_stride = be->src_stride; 405c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org short *diff = &be->src_diff[0]; 415c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org unsigned char *predictor = &bd->predictor[0]; 425c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org vp8_subtract_b_sse2_impl(z, src_stride, diff, predictor, pitch); 435c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org} 44