1ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org/* 2ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * Copyright (c) 2012 The WebM project authors. All Rights Reserved. 3ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * 4ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * Use of this source code is governed by a BSD-style license 5ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * that can be found in the LICENSE file in the root of the source 6ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * tree. An additional intellectual property rights grant can be found 7ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * in the file PATENTS. All contributing project authors may 8ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * be found in the AUTHORS file in the root of the source tree. 9ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org */ 10ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 11ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 12ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#include <stdlib.h> 136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "vp8_rtcd.h" 14ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#include "vpx_ports/mem.h" 15ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 16ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#if HAVE_DSPR2 17ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#define CROP_WIDTH 256 18ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgunsigned char ff_cropTbl[256 + 2 * CROP_WIDTH]; 19ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 20ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgstatic const unsigned short sub_pel_filterss[8][3] = 21ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 22ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0, 0}, 23ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0x0601, 0x7b0c}, 24ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0x0201, 0x0b08, 0x6c24}, 25ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0x0906, 0x5d32}, 26ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0x0303, 0x1010, 0x4d4d}, 27ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0x0609, 0x325d}, 28ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0x0102, 0x080b, 0x246c}, 29ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0x0106, 0x0c7b}, 30ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org}; 31ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 32ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 33ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgstatic const int sub_pel_filters_int[8][3] = 34ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 35ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0, 0}, 36ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0x0000fffa, 0x007b000c, 0xffff0000}, 37ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0x0002fff5, 0x006c0024, 0xfff80001}, 38ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0x0000fff7, 0x005d0032, 0xfffa0000}, 39ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0x0003fff0, 0x004d004d, 0xfff00003}, 40ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0x0000fffa, 0x0032005d, 0xfff70000}, 41ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0x0001fff8, 0x0024006c, 0xfff50002}, 42ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0x0000ffff, 0x000c007b, 0xfffa0000}, 43ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org}; 44ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 45ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 46ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgstatic const int sub_pel_filters_inv[8][3] = 47ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 48ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0, 0}, 49ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0xfffa0000, 0x000c007b, 0x0000ffff}, 50ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0xfff50002, 0x0024006c, 0x0001fff8}, 51ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0xfff70000, 0x0032005d, 0x0000fffa}, 52ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0xfff00003, 0x004d004d, 0x0003fff0}, 53ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0xfffa0000, 0x005d0032, 0x0000fff7}, 54ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0xfff80001, 0x006c0024, 0x0002fff5}, 55ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0xffff0000, 0x007b000c, 0x0000fffa}, 56ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org}; 57ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 58ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 59ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgstatic const int sub_pel_filters_int_tap_4[8][2] = 60ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 61ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0}, 62ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0xfffa007b, 0x000cffff}, 63ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0}, 64ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0xfff7005d, 0x0032fffa}, 65ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0}, 66ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0xfffa0032, 0x005dfff7}, 67ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0}, 68ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0xffff000c, 0x007bfffa}, 69ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org}; 70ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 71ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 72ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgstatic const int sub_pel_filters_inv_tap_4[8][2] = 73ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 74ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0}, 75ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0x007bfffa, 0xffff000c}, 76ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0}, 77ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0x005dfff7, 0xfffa0032}, 78ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0}, 79ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0x0032fffa, 0xfff7005d}, 80ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0, 0}, 81ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 0x000cffff, 0xfffa007b}, 82ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org}; 83ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 84ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orginline void prefetch_load(unsigned char *src) 85ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 86ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 87ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "pref 0, 0(%[src]) \n\t" 88ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : 89ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [src] "r" (src) 90ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 91ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 92ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 93ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 94ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orginline void prefetch_store(unsigned char *dst) 95ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 96ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 97ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "pref 1, 0(%[dst]) \n\t" 98ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : 99ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [dst] "r" (dst) 100ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 101ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 102ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 103ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid dsputil_static_init(void) 104ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 105ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int i; 106ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 107ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = 0; i < 256; i++) ff_cropTbl[i + CROP_WIDTH] = i; 108ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 109ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = 0; i < CROP_WIDTH; i++) 110ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 111ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ff_cropTbl[i] = 0; 112ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ff_cropTbl[i + CROP_WIDTH + 256] = 255; 113ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 114ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 115ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 116ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_filter_block2d_first_pass_4 117ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org( 118ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT src_ptr, 119ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT dst_ptr, 120ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int src_pixels_per_line, 121ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int output_height, 122ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int xoffset, 123ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int pitch 124ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) 125ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 126ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int i; 127ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int Temp1, Temp2, Temp3, Temp4; 128ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 129ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int vector4a = 64; 130ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int vector1b, vector2b, vector3b; 131ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int tp1, tp2, tn1, tn2; 132ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int p1, p2, p3; 133ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int n1, n2, n3; 134ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *cm = ff_cropTbl + CROP_WIDTH; 135ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 136ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector3b = sub_pel_filters_inv[xoffset][2]; 137ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 138ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* if (xoffset == 0) we don't need any filtering */ 139ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (vector3b == 0) 140ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 141ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = 0; i < output_height; i++) 142ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 143ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 144ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_load(src_ptr + src_pixels_per_line); 145ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[0] = src_ptr[0]; 146ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[1] = src_ptr[1]; 147ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[2] = src_ptr[2]; 148ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[3] = src_ptr[3]; 149ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 150ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* next row... */ 151ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += src_pixels_per_line; 152ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr += 4; 153ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 154ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 155ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 156ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 157ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (vector3b > 65536) 158ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 159ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 6 tap filter */ 160ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 161ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector1b = sub_pel_filters_inv[xoffset][0]; 162ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector2b = sub_pel_filters_inv[xoffset][1]; 163ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 164ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 165ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_load(src_ptr + src_pixels_per_line); 166ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 167ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = output_height; i--;) 168ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 169ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 170ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 171ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp1], -2(%[src_ptr]) \n\t" 172ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp2], 2(%[src_ptr]) \n\t" 173ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 174ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 1. pixel */ 175ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 176ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p1], %[tp1] \n\t" 177ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p2], %[tp1] \n\t" 178ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p3], %[tp2] \n\t" 179ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p1], %[vector1b] \n\t" 180ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p2], %[vector2b] \n\t" 181ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p3], %[vector3b] \n\t" 182ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 183ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 2. pixel */ 184ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 185ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p1], %[tp2] \n\t" 186ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "balign %[tp2], %[tp1], 3 \n\t" 187ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac3, 9 \n\t" 188ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p2], %[vector1b] \n\t" 189ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p3], %[vector2b] \n\t" 190ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p1], %[vector3b] \n\t" 191ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 192ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 1. pixel */ 193ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tn2], 3(%[src_ptr]) \n\t" 194ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 195ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n1], %[tp2] \n\t" 196ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n2], %[tp2] \n\t" 197ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n3], %[tn2] \n\t" 198ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac2, 9 \n\t" 199ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n1], %[vector1b] \n\t" 200ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n2], %[vector2b] \n\t" 201ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n3], %[vector3b] \n\t" 202ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 203ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 2. pixel */ 204ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 205ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n1], %[tn2] \n\t" 206ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 207ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n2], %[vector1b] \n\t" 208ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n3], %[vector2b] \n\t" 209ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n1], %[vector3b] \n\t" 210ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac2, 9 \n\t" 211ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 212ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp */ 213ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[tp1], %[Temp1](%[cm]) \n\t" 214ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[tn1], %[Temp2](%[cm]) \n\t" 215ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[tp2], %[Temp3](%[cm]) \n\t" 216ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[n2], %[Temp4](%[cm]) \n\t" 217ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 218ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* store bytes */ 219ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[tp1], 0(%[dst_ptr]) \n\t" 220ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[tn1], 1(%[dst_ptr]) \n\t" 221ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[tp2], 2(%[dst_ptr]) \n\t" 222ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[n2], 3(%[dst_ptr]) \n\t" 223ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 224ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tp1] "=&r" (tp1), [tp2] "=&r" (tp2), [tn1] "=&r" (tn1), 225ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [tn2] "=&r" (tn2), [p1] "=&r" (p1), [p2] "=&r" (p2), 226ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [p3] "=&r" (p3), [n1] "=&r" (n1), [n2] "=&r" (n2), 227ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [n3] "=&r" (n3), [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 228ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=&r" (Temp4) 229ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 230ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [cm] "r" (cm), [dst_ptr] "r" (dst_ptr), 231ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector3b] "r" (vector3b), [src_ptr] "r" (src_ptr) 232ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 233ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 234ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Next row... */ 235ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += src_pixels_per_line; 236ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr += pitch; 237ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 238ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 239ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 240ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 241ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 4 tap filter */ 242ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 243ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector1b = sub_pel_filters_inv_tap_4[xoffset][0]; 244ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector2b = sub_pel_filters_inv_tap_4[xoffset][1]; 245ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 246ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = output_height; i--;) 247ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 248ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 249ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 250ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp1], -1(%[src_ptr]) \n\t" 251ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp2], 3(%[src_ptr]) \n\t" 252ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 253ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 1. pixel */ 254ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 255ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p1], %[tp1] \n\t" 256ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p2], %[tp1] \n\t" 257ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p3], %[tp2] \n\t" 258ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p1], %[vector1b] \n\t" 259ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p2], %[vector2b] \n\t" 260ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 261ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 2. pixel */ 262ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 263ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p2], %[vector1b] \n\t" 264ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p3], %[vector2b] \n\t" 265ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac3, 9 \n\t" 266ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 267ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 1. pixel */ 268ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "srl %[tn1], %[tp2], 8 \n\t" 269ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "balign %[tp2], %[tp1], 3 \n\t" 270ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 271ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n1], %[tp2] \n\t" 272ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n2], %[tp2] \n\t" 273ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n3], %[tn1] \n\t" 274ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac2, 9 \n\t" 275ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n1], %[vector1b] \n\t" 276ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n2], %[vector2b] \n\t" 277ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 278ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 2. pixel */ 279ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 280ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 281ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n2], %[vector1b] \n\t" 282ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n3], %[vector2b] \n\t" 283ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac2, 9 \n\t" 284ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 285ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 286ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[tp1], %[Temp1](%[cm]) \n\t" 287ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[tn1], %[Temp2](%[cm]) \n\t" 288ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[tp2], %[Temp3](%[cm]) \n\t" 289ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[tp1], 0(%[dst_ptr]) \n\t" 290ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[tn1], 1(%[dst_ptr]) \n\t" 291ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[n2], %[Temp4](%[cm]) \n\t" 292ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[tp2], 2(%[dst_ptr]) \n\t" 293ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[n2], 3(%[dst_ptr]) \n\t" 294ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 295ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tp1] "=&r" (tp1), [tp2] "=&r" (tp2), [tn1] "=&r" (tn1), 296ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [p1] "=&r" (p1), [p2] "=&r" (p2), [p3] "=&r" (p3), 297ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [n1] "=&r" (n1), [n2] "=&r" (n2), [n3] "=&r" (n3), 298ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 299ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=&r" (Temp4) 300ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 301ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [cm] "r" (cm), [dst_ptr] "r" (dst_ptr), 302ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr] "r" (src_ptr) 303ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 304ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Next row... */ 305ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += src_pixels_per_line; 306ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr += pitch; 307ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 308ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 309ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 310ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 311ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 312ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_filter_block2d_first_pass_8_all 313ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org( 314ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT src_ptr, 315ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT dst_ptr, 316ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int src_pixels_per_line, 317ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int output_height, 318ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int xoffset, 319ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int pitch 320ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) 321ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 322ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int i; 323ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int Temp1, Temp2, Temp3, Temp4; 324ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 325ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int vector4a = 64; 326ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int vector1b, vector2b, vector3b; 327ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int tp1, tp2, tn1, tn2; 328ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int p1, p2, p3, p4; 329ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int n1, n2, n3, n4; 330ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 331ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *cm = ff_cropTbl + CROP_WIDTH; 332ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 333ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* if (xoffset == 0) we don't need any filtering */ 334ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (xoffset == 0) 335ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 336ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = 0; i < output_height; i++) 337ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 338ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 339ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_load(src_ptr + src_pixels_per_line); 340ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 341ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[0] = src_ptr[0]; 342ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[1] = src_ptr[1]; 343ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[2] = src_ptr[2]; 344ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[3] = src_ptr[3]; 345ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[4] = src_ptr[4]; 346ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[5] = src_ptr[5]; 347ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[6] = src_ptr[6]; 348ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[7] = src_ptr[7]; 349ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 350ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* next row... */ 351ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += src_pixels_per_line; 352ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr += 8; 353ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 354ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 355ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 356ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 357ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector3b = sub_pel_filters_inv[xoffset][2]; 358ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 359ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (vector3b > 65536) 360ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 361ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 6 tap filter */ 362ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 363ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector1b = sub_pel_filters_inv[xoffset][0]; 364ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector2b = sub_pel_filters_inv[xoffset][1]; 365ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 366ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = output_height; i--;) 367ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 368ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 369ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_load(src_ptr + src_pixels_per_line); 370ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 371ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 372ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 373ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp1], -2(%[src_ptr]) \n\t" 374ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp2], 2(%[src_ptr]) \n\t" 375ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 376ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 1. pixel */ 377ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 378ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p1], %[tp1] \n\t" 379ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p2], %[tp1] \n\t" 380ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p3], %[tp2] \n\t" 381ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p1], %[vector1b] \n\t" 382ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p2], %[vector2b] \n\t" 383ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p3], %[vector3b] \n\t" 384ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 385ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 2. pixel */ 386ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 387ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p1], %[tp2] \n\t" 388ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p2], %[vector1b] \n\t" 389ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p3], %[vector2b] \n\t" 390ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p1], %[vector3b] \n\t" 391ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 392ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "balign %[tp2], %[tp1], 3 \n\t" 393ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac3, 9 \n\t" 394ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tn2], 3(%[src_ptr]) \n\t" 395ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 396ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 1. pixel */ 397ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 398ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n1], %[tp2] \n\t" 399ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n2], %[tp2] \n\t" 400ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n3], %[tn2] \n\t" 401ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac2, 9 \n\t" 402ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n1], %[vector1b] \n\t" 403ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n2], %[vector2b] \n\t" 404ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n3], %[vector3b] \n\t" 405ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 406ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 2. pixel */ 407ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 408ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n1], %[tn2] \n\t" 409ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n2], %[vector1b] \n\t" 410ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n3], %[vector2b] \n\t" 411ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n1], %[vector3b] \n\t" 412ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp1], 6(%[src_ptr]) \n\t" 413ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 414ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 415ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p2], %[tp1] \n\t" 416ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac2, 9 \n\t" 417ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 418ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tp1] "=&r" (tp1), [tp2] "=&r" (tp2), [tn2] "=&r" (tn2), 419ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [p1] "=&r" (p1), [p2] "=&r" (p2), [p3] "=&r" (p3), 420ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [n1] "=&r" (n1), [n2] "=&r" (n2), [n3] "=&r" (n3), 421ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 422ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=r" (Temp4) 423ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 424ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [vector3b] "r" (vector3b), 425ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr] "r" (src_ptr) 426ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 427ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 428ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 429ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[0] = cm[Temp1]; 430ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[1] = cm[Temp2]; 431ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[2] = cm[Temp3]; 432ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[3] = cm[Temp4]; 433ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 434ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* next 4 pixels */ 435ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 436ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 3. pixel */ 437ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p3], %[vector1b] \n\t" 438ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p1], %[vector2b] \n\t" 439ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p2], %[vector3b] \n\t" 440ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 441ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 4. pixel */ 442ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 443ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p4], %[tp1] \n\t" 444ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p1], %[vector1b] \n\t" 445ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p2], %[vector2b] \n\t" 446ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p4], %[vector3b] \n\t" 447ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 448ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tn1], 7(%[src_ptr]) \n\t" 449ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac3, 9 \n\t" 450ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 451ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 3. pixel */ 452ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 453ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n2], %[tn1] \n\t" 454ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n3], %[vector1b] \n\t" 455ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n1], %[vector2b] \n\t" 456ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n2], %[vector3b] \n\t" 457ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac2, 9 \n\t" 458ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 459ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 4. pixel */ 460ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 461ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n4], %[tn1] \n\t" 462ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n1], %[vector1b] \n\t" 463ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n2], %[vector2b] \n\t" 464ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n4], %[vector3b] \n\t" 465ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 466ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac2, 9 \n\t" 467ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 468ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tn1] "=&r" (tn1), [n2] "=&r" (n2), 469ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [p4] "=&r" (p4), [n4] "=&r" (n4), 470ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 471ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=r" (Temp4) 472ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tp1] "r" (tp1), [vector1b] "r" (vector1b), [p2] "r" (p2), 473ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector2b] "r" (vector2b), [n1] "r" (n1), [p1] "r" (p1), 474ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [vector3b] "r" (vector3b), 475ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [p3] "r" (p3), [n3] "r" (n3), [src_ptr] "r" (src_ptr) 476ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 477ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 478ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 479ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[4] = cm[Temp1]; 480ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[5] = cm[Temp2]; 481ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[6] = cm[Temp3]; 482ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[7] = cm[Temp4]; 483ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 484ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += src_pixels_per_line; 485ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr += pitch; 486ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 487ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 488ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 489ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 490ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 4 tap filter */ 491ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 492ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector1b = sub_pel_filters_inv_tap_4[xoffset][0]; 493ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector2b = sub_pel_filters_inv_tap_4[xoffset][1]; 494ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 495ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = output_height; i--;) 496ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 497ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 498ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_load(src_ptr + src_pixels_per_line); 499ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 500ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 501ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 502ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp1], -1(%[src_ptr]) \n\t" 503ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 504ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 1. pixel */ 505ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 506ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p1], %[tp1] \n\t" 507ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p2], %[tp1] \n\t" 508ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p1], %[vector1b] \n\t" 509ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p2], %[vector2b] \n\t" 510ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 511ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp2], 3(%[src_ptr]) \n\t" 512ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 513ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 2. pixel */ 514ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 515ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p3], %[tp2] \n\t" 516ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p4], %[tp2] \n\t" 517ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p2], %[vector1b] \n\t" 518ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p3], %[vector2b] \n\t" 519ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac3, 9 \n\t" 520ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 521ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "balign %[tp2], %[tp1], 3 \n\t" 522ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 523ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 1. pixel */ 524ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 525ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n1], %[tp2] \n\t" 526ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n2], %[tp2] \n\t" 527ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n1], %[vector1b] \n\t" 528ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n2], %[vector2b] \n\t" 529ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac2, 9 \n\t" 530ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 531ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tn2], 4(%[src_ptr]) \n\t" 532ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 533ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 2. pixel */ 534ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 535ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n3], %[tn2] \n\t" 536ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n4], %[tn2] \n\t" 537ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n2], %[vector1b] \n\t" 538ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n3], %[vector2b] \n\t" 539ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp1], 7(%[src_ptr]) \n\t" 540ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 541ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 542ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac2, 9 \n\t" 543ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 544ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tp1] "=&r" (tp1), [tp2] "=&r" (tp2), 545ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [tn2] "=&r" (tn2), [p1] "=&r" (p1), [p2] "=&r" (p2), 546ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [p3] "=&r" (p3), [p4] "=&r" (p4), [n1] "=&r" (n1), 547ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [n2] "=&r" (n2), [n3] "=&r" (n3), [n4] "=&r" (n4), 548ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 549ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=r" (Temp4) 550ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 551ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [src_ptr] "r" (src_ptr) 552ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 553ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 554ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 555ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[0] = cm[Temp1]; 556ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[1] = cm[Temp2]; 557ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[2] = cm[Temp3]; 558ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[3] = cm[Temp4]; 559ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 560ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* next 4 pixels */ 561ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 562ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 3. pixel */ 563ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p3], %[vector1b] \n\t" 564ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p4], %[vector2b] \n\t" 565ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 566ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 4. pixel */ 567ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 568ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p2], %[tp1] \n\t" 569ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p4], %[vector1b] \n\t" 570ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p2], %[vector2b] \n\t" 571ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac3, 9 \n\t" 572ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 573ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 3. pixel */ 574ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 575ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n3], %[vector1b] \n\t" 576ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n4], %[vector2b] \n\t" 577ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tn1], 8(%[src_ptr]) \n\t" 578ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac2, 9 \n\t" 579ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 580ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 4. pixel */ 581ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 582ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n2], %[tn1] \n\t" 583ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n4], %[vector1b] \n\t" 584ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n2], %[vector2b] \n\t" 585ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 586ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac2, 9 \n\t" 587ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 588ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tn1] "=&r" (tn1), [p2] "=&r" (p2), [n2] "=&r" (n2), 589ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 590ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=r" (Temp4) 591ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tp1] "r" (tp1), [p3] "r" (p3), [p4] "r" (p4), 592ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 593ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [src_ptr] "r" (src_ptr), 594ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [n3] "r" (n3), [n4] "r" (n4) 595ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 596ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 597ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 598ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[4] = cm[Temp1]; 599ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[5] = cm[Temp2]; 600ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[6] = cm[Temp3]; 601ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[7] = cm[Temp4]; 602ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 603ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* next row... */ 604ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += src_pixels_per_line; 605ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr += pitch; 606ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 607ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 608ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 609ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 610ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 611ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 612ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_filter_block2d_first_pass16_6tap 613ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org( 614ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT src_ptr, 615ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT dst_ptr, 616ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int src_pixels_per_line, 617ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int output_height, 618ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int xoffset, 619ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int pitch 620ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) 621ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 622ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int i; 623ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int Temp1, Temp2, Temp3, Temp4; 624ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 625ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int vector4a; 626ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int vector1b, vector2b, vector3b; 627ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int tp1, tp2, tn1, tn2; 628ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int p1, p2, p3, p4; 629ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int n1, n2, n3, n4; 630ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *cm = ff_cropTbl + CROP_WIDTH; 631ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 632ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector1b = sub_pel_filters_inv[xoffset][0]; 633ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector2b = sub_pel_filters_inv[xoffset][1]; 634ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector3b = sub_pel_filters_inv[xoffset][2]; 635ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector4a = 64; 636ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 637ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = output_height; i--;) 638ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 639ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 640ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_load(src_ptr + src_pixels_per_line); 641ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 642ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 643ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 644ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp1], -2(%[src_ptr]) \n\t" 645ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp2], 2(%[src_ptr]) \n\t" 646ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 647ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 1. pixel */ 648ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 649ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p1], %[tp1] \n\t" 650ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p2], %[tp1] \n\t" 651ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p3], %[tp2] \n\t" 652ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p1], %[vector1b] \n\t" 653ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p2], %[vector2b] \n\t" 654ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p3], %[vector3b] \n\t" 655ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 656ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 2. pixel */ 657ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 658ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p1], %[tp2] \n\t" 659ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p2], %[vector1b] \n\t" 660ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p3], %[vector2b] \n\t" 661ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p1], %[vector3b] \n\t" 662ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 663ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "balign %[tp2], %[tp1], 3 \n\t" 664ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tn2], 3(%[src_ptr]) \n\t" 665ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac3, 9 \n\t" 666ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 667ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 1. pixel */ 668ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 669ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n1], %[tp2] \n\t" 670ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n2], %[tp2] \n\t" 671ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n3], %[tn2] \n\t" 672ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac2, 9 \n\t" 673ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n1], %[vector1b] \n\t" 674ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n2], %[vector2b] \n\t" 675ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n3], %[vector3b] \n\t" 676ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 677ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 2. pixel */ 678ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 679ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n1], %[tn2] \n\t" 680ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n2], %[vector1b] \n\t" 681ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n3], %[vector2b] \n\t" 682ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n1], %[vector3b] \n\t" 683ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp1], 6(%[src_ptr]) \n\t" 684ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 685ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 686ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p2], %[tp1] \n\t" 687ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac2, 9 \n\t" 688ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 689ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tp1] "=&r" (tp1), [tp2] "=&r" (tp2), [tn2] "=&r" (tn2), 690ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [p1] "=&r" (p1), [p2] "=&r" (p2), [p3] "=&r" (p3), 691ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [n1] "=&r" (n1), [n2] "=&r" (n2), [n3] "=&r" (n3), 692ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 693ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=r" (Temp4) 694ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 695ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [vector3b] "r" (vector3b), 696ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr] "r" (src_ptr) 697ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 698ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 699ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 700ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[0] = cm[Temp1]; 701ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[1] = cm[Temp2]; 702ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[2] = cm[Temp3]; 703ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[3] = cm[Temp4]; 704ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 705ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* next 4 pixels */ 706ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 707ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 3. pixel */ 708ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p3], %[vector1b] \n\t" 709ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p1], %[vector2b] \n\t" 710ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p2], %[vector3b] \n\t" 711ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 712ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 4. pixel */ 713ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 714ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p4], %[tp1] \n\t" 715ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p1], %[vector1b] \n\t" 716ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p2], %[vector2b] \n\t" 717ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p4], %[vector3b] \n\t" 718ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tn1], 7(%[src_ptr]) \n\t" 719ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac3, 9 \n\t" 720ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 721ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 3. pixel */ 722ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 723ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n2], %[tn1] \n\t" 724ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n3], %[vector1b] \n\t" 725ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n1], %[vector2b] \n\t" 726ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n2], %[vector3b] \n\t" 727ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac2, 9 \n\t" 728ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 729ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 4. pixel */ 730ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 731ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n4], %[tn1] \n\t" 732ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n1], %[vector1b] \n\t" 733ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n2], %[vector2b] \n\t" 734ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n4], %[vector3b] \n\t" 735ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp2], 10(%[src_ptr]) \n\t" 736ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 737ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 738ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p1], %[tp2] \n\t" 739ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac2, 9 \n\t" 740ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 741ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tn1] "=&r" (tn1), [tp2] "=&r" (tp2), [n2] "=&r" (n2), 742ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [p4] "=&r" (p4), [n4] "=&r" (n4), 743ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 744ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=r" (Temp4) 745ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 746ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [tp1] "r" (tp1), [n1] "r" (n1), [p1] "r" (p1), 747ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [p2] "r" (p2), [vector3b] "r" (vector3b), 748ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [p3] "r" (p3), [n3] "r" (n3), [src_ptr] "r" (src_ptr) 749ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 750ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 751ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 752ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[4] = cm[Temp1]; 753ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[5] = cm[Temp2]; 754ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[6] = cm[Temp3]; 755ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[7] = cm[Temp4]; 756ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 757ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* next 4 pixels */ 758ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 759ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 5. pixel */ 760ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p2], %[vector1b] \n\t" 761ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p4], %[vector2b] \n\t" 762ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p1], %[vector3b] \n\t" 763ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 764ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 6. pixel */ 765ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 766ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p3], %[tp2] \n\t" 767ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p4], %[vector1b] \n\t" 768ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p1], %[vector2b] \n\t" 769ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p3], %[vector3b] \n\t" 770ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 771ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tn1], 11(%[src_ptr]) \n\t" 772ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac3, 9 \n\t" 773ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 774ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 5. pixel */ 775ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 776ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n1], %[tn1] \n\t" 777ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n2], %[vector1b] \n\t" 778ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n4], %[vector2b] \n\t" 779ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n1], %[vector3b] \n\t" 780ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac2, 9 \n\t" 781ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 782ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 6. pixel */ 783ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 784ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n3], %[tn1] \n\t" 785ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n4], %[vector1b] \n\t" 786ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n1], %[vector2b] \n\t" 787ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n3], %[vector3b] \n\t" 788ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp1], 14(%[src_ptr]) \n\t" 789ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 790ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 791ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p4], %[tp1] \n\t" 792ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac2, 9 \n\t" 793ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 794ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tn1] "=&r" (tn1), [tp1] "=&r" (tp1), 795ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [n1] "=&r" (n1), [p3] "=&r" (p3), [n3] "=&r" (n3), 796ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 797ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=r" (Temp4) 798ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 799ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [tp2] "r" (tp2), [p2] "r" (p2), [n2] "r" (n2), 800ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [p4] "r" (p4), [n4] "r" (n4), [p1] "r" (p1), [src_ptr] "r" (src_ptr), 801ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [vector3b] "r" (vector3b) 802ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 803ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 804ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 805ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[8] = cm[Temp1]; 806ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[9] = cm[Temp2]; 807ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[10] = cm[Temp3]; 808ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr[11] = cm[Temp4]; 809ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 810ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* next 4 pixels */ 811ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 812ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 7. pixel */ 813ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p1], %[vector1b] \n\t" 814ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p3], %[vector2b] \n\t" 815ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p4], %[vector3b] \n\t" 816ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 817ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 8. pixel */ 818ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 819ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p2], %[tp1] \n\t" 820ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p3], %[vector1b] \n\t" 821ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p4], %[vector2b] \n\t" 822ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p2], %[vector3b] \n\t" 823ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tn1], 15(%[src_ptr]) \n\t" 824ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac3, 9 \n\t" 825ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 826ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 7. pixel */ 827ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 828ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n4], %[tn1] \n\t" 829ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n1], %[vector1b] \n\t" 830ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n3], %[vector2b] \n\t" 831ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n4], %[vector3b] \n\t" 832ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac2, 9 \n\t" 833ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 834ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 8. pixel */ 835ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 836ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n2], %[tn1] \n\t" 837ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n3], %[vector1b] \n\t" 838ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n4], %[vector2b] \n\t" 839ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n2], %[vector3b] \n\t" 840ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 841ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac2, 9 \n\t" 842ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 843ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 844ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[tp1], %[Temp1](%[cm]) \n\t" 845ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[tn1], %[Temp2](%[cm]) \n\t" 846ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[p2], %[Temp3](%[cm]) \n\t" 847ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[tp1], 12(%[dst_ptr]) \n\t" 848ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[tn1], 13(%[dst_ptr]) \n\t" 849ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[n2], %[Temp4](%[cm]) \n\t" 850ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[p2], 14(%[dst_ptr]) \n\t" 851ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[n2], 15(%[dst_ptr]) \n\t" 852ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 853ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tn1] "=&r" (tn1), [p2] "=&r" (p2), [n2] "=&r" (n2), [n4] "=&r" (n4), 854ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 855ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=r" (Temp4) 856ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 857ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [tp1] "r" (tp1), [p4] "r" (p4), [n1] "r" (n1), [p1] "r" (p1), 858ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [vector3b] "r" (vector3b), [p3] "r" (p3), 859ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [n3] "r" (n3), [src_ptr] "r" (src_ptr), 860ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [cm] "r" (cm), [dst_ptr] "r" (dst_ptr) 861ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 862ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 863ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += src_pixels_per_line; 864ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr += pitch; 865ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 866ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 867ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 868ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 869ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_filter_block2d_first_pass16_0 870ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org( 871ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT src_ptr, 872ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT output_ptr, 873ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int src_pixels_per_line 874ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) 875ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 876ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int Temp1, Temp2, Temp3, Temp4; 877ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int i; 878ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 879ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 880ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_store(output_ptr + 32); 881ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 882ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* copy memory from src buffer to dst buffer */ 883ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = 0; i < 7; i++) 884ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 885ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 886ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 887ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 888ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp3], 8(%[src_ptr]) \n\t" 889ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp4], 12(%[src_ptr]) \n\t" 890ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 0(%[output_ptr]) \n\t" 891ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 4(%[output_ptr]) \n\t" 892ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp3], 8(%[output_ptr]) \n\t" 893ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp4], 12(%[output_ptr]) \n\t" 894ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 895ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 896ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), [Temp3] "=&r" (Temp3), 897ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp4] "=&r" (Temp4), [src_ptr] "+r" (src_ptr) 898ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [src_pixels_per_line] "r" (src_pixels_per_line), 899ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [output_ptr] "r" (output_ptr) 900ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 901ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 902ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 903ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 904ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 905ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp3], 8(%[src_ptr]) \n\t" 906ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp4], 12(%[src_ptr]) \n\t" 907ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 16(%[output_ptr]) \n\t" 908ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 20(%[output_ptr]) \n\t" 909ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp3], 24(%[output_ptr]) \n\t" 910ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp4], 28(%[output_ptr]) \n\t" 911ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 912ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 913ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), [Temp3] "=&r" (Temp3), 914ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp4] "=&r" (Temp4), [src_ptr] "+r" (src_ptr) 915ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [src_pixels_per_line] "r" (src_pixels_per_line), 916ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [output_ptr] "r" (output_ptr) 917ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 918ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 919ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 920ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 921ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 922ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp3], 8(%[src_ptr]) \n\t" 923ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp4], 12(%[src_ptr]) \n\t" 924ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 32(%[output_ptr]) \n\t" 925ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 36(%[output_ptr]) \n\t" 926ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp3], 40(%[output_ptr]) \n\t" 927ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp4], 44(%[output_ptr]) \n\t" 928ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 929ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 930ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), [Temp3] "=&r" (Temp3), 931ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp4] "=&r" (Temp4), [src_ptr] "+r" (src_ptr) 932ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [src_pixels_per_line] "r" (src_pixels_per_line), 933ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [output_ptr] "r" (output_ptr) 934ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 935ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 936ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr += 48; 937ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 938ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 939ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 940ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 941ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_filter_block2d_first_pass16_4tap 942ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org( 943ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT src_ptr, 944ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT output_ptr, 945ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int src_pixels_per_line, 946ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int output_width, 947ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int output_height, 948ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int xoffset, 949ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int yoffset, 950ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT dst_ptr, 951ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int pitch 952ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) 953ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 954ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int i, j; 955ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int Temp1, Temp2, Temp3, Temp4; 956ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 957ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int vector4a; 958ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int vector1b, vector2b; 959ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int tp1, tp2, tp3, tn1; 960ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int p1, p2, p3; 961ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int n1, n2, n3; 962ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *cm = ff_cropTbl + CROP_WIDTH; 963ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 964ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector4a = 64; 965ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 966ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector1b = sub_pel_filters_inv_tap_4[xoffset][0]; 967ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector2b = sub_pel_filters_inv_tap_4[xoffset][1]; 968ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 969ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* if (yoffset == 0) don't need temp buffer, data will be stored in dst_ptr */ 970ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (yoffset == 0) 971ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 972ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_height -= 5; 973ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += (src_pixels_per_line + src_pixels_per_line); 974ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 975ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = output_height; i--;) 976ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 977ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 978ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp3], -1(%[src_ptr]) \n\t" 979ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tp3] "=&r" (tp3) 980ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [src_ptr] "r" (src_ptr) 981ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 982ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 983ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* processing 4 adjacent pixels */ 984ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (j = 0; j < 16; j += 4) 985ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 986ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 987ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 988ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp2], 3(%[src_ptr]) \n\t" 989ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "move %[tp1], %[tp3] \n\t" 990ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 991ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 1. pixel */ 992ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 993ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mthi $0, $ac3 \n\t" 994ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "move %[tp3], %[tp2] \n\t" 995ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p1], %[tp1] \n\t" 996ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p2], %[tp1] \n\t" 997ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p3], %[tp2] \n\t" 998ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p1], %[vector1b] \n\t" 999ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p2], %[vector2b] \n\t" 1000ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1001ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 2. pixel */ 1002ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 1003ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mthi $0, $ac2 \n\t" 1004ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p2], %[vector1b] \n\t" 1005ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p3], %[vector2b] \n\t" 1006ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extr.w %[Temp1], $ac3, 7 \n\t" 1007ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1008ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 1. pixel */ 1009ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tn1], 4(%[src_ptr]) \n\t" 1010ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "balign %[tp2], %[tp1], 3 \n\t" 1011ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 1012ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mthi $0, $ac3 \n\t" 1013ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n1], %[tp2] \n\t" 1014ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n2], %[tp2] \n\t" 1015ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n3], %[tn1] \n\t" 1016ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extr.w %[Temp3], $ac2, 7 \n\t" 1017ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n1], %[vector1b] \n\t" 1018ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n2], %[vector2b] \n\t" 1019ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1020ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 2. pixel */ 1021ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 1022ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mthi $0, $ac2 \n\t" 1023ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extr.w %[Temp2], $ac3, 7 \n\t" 1024ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n2], %[vector1b] \n\t" 1025ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n3], %[vector2b] \n\t" 1026ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extr.w %[Temp4], $ac2, 7 \n\t" 1027ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1028ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 1029ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[tp1], %[Temp1](%[cm]) \n\t" 1030ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[tn1], %[Temp2](%[cm]) \n\t" 1031ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[tp2], %[Temp3](%[cm]) \n\t" 1032ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[tp1], 0(%[dst_ptr]) \n\t" 1033ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[tn1], 1(%[dst_ptr]) \n\t" 1034ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[n2], %[Temp4](%[cm]) \n\t" 1035ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[tp2], 2(%[dst_ptr]) \n\t" 1036ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[n2], 3(%[dst_ptr]) \n\t" 1037ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1038ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tp1] "=&r" (tp1), [tp2] "=&r" (tp2), [tp3] "=&r" (tp3), 1039ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [tn1] "=&r" (tn1), [p1] "=&r" (p1), [p2] "=&r" (p2), 1040ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [n1] "=&r" (n1), [n2] "=&r" (n2), [n3] "=&r" (n3), 1041ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), [p3] "=&r" (p3), 1042ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=&r" (Temp4) 1043ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 1044ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [cm] "r" (cm), [dst_ptr] "r" (dst_ptr), 1045ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr] "r" (src_ptr) 1046ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1047ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1048ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += 4; 1049ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 1050ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1051ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Next row... */ 1052ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += src_pixels_per_line - 16; 1053ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org dst_ptr += pitch; 1054ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 1055ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 1056ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 1057ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 1058ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = output_height; i--;) 1059ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 1060ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* processing 4 adjacent pixels */ 1061ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (j = 0; j < 16; j += 4) 1062ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 1063ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 1064ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1065ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp1], -1(%[src_ptr]) \n\t" 1066ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tp2], 3(%[src_ptr]) \n\t" 1067ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1068ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 1. pixel */ 1069ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 1070ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mthi $0, $ac3 \n\t" 1071ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p1], %[tp1] \n\t" 1072ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[p2], %[tp1] \n\t" 1073ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[p3], %[tp2] \n\t" 1074ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p1], %[vector1b] \n\t" 1075ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[p2], %[vector2b] \n\t" 1076ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1077ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* even 2. pixel */ 1078ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 1079ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mthi $0, $ac2 \n\t" 1080ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p2], %[vector1b] \n\t" 1081ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[p3], %[vector2b] \n\t" 1082ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extr.w %[Temp1], $ac3, 7 \n\t" 1083ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1084ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 1. pixel */ 1085ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[tn1], 4(%[src_ptr]) \n\t" 1086ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "balign %[tp2], %[tp1], 3 \n\t" 1087ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 1088ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mthi $0, $ac3 \n\t" 1089ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n1], %[tp2] \n\t" 1090ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbl %[n2], %[tp2] \n\t" 1091ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "preceu.ph.qbr %[n3], %[tn1] \n\t" 1092ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extr.w %[Temp3], $ac2, 7 \n\t" 1093ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n1], %[vector1b] \n\t" 1094ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac3, %[n2], %[vector2b] \n\t" 1095ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1096ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* odd 2. pixel */ 1097ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 1098ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mthi $0, $ac2 \n\t" 1099ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extr.w %[Temp2], $ac3, 7 \n\t" 1100ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n2], %[vector1b] \n\t" 1101ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpa.w.ph $ac2, %[n3], %[vector2b] \n\t" 1102ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extr.w %[Temp4], $ac2, 7 \n\t" 1103ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1104ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 1105ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[tp1], %[Temp1](%[cm]) \n\t" 1106ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[tn1], %[Temp2](%[cm]) \n\t" 1107ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[tp2], %[Temp3](%[cm]) \n\t" 1108ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[tp1], 0(%[output_ptr]) \n\t" 1109ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[tn1], 1(%[output_ptr]) \n\t" 1110ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbux %[n2], %[Temp4](%[cm]) \n\t" 1111ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[tp2], 2(%[output_ptr]) \n\t" 1112ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sb %[n2], 3(%[output_ptr]) \n\t" 1113ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1114ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [tp1] "=&r" (tp1), [tp2] "=&r" (tp2), [tn1] "=&r" (tn1), 1115ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [p1] "=&r" (p1), [p2] "=&r" (p2), [p3] "=&r" (p3), 1116ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [n1] "=&r" (n1), [n2] "=&r" (n2), [n3] "=&r" (n3), 1117ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 1118ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=&r" (Temp4) 1119ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 1120ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [cm] "r" (cm), 1121ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [output_ptr] "r" (output_ptr), [src_ptr] "r" (src_ptr) 1122ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1123ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1124ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += 4; 1125ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 1126ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1127ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* next row... */ 1128ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += src_pixels_per_line; 1129ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr += output_width; 1130ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 1131ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 1132ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 1133ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1134ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1135ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_filter_block2d_second_pass4 1136ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org( 1137ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT src_ptr, 1138ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT output_ptr, 1139ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int output_pitch, 1140ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int yoffset 1141ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) 1142ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 1143ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int i; 1144ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1145ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int Temp1, Temp2, Temp3, Temp4; 1146ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int vector1b, vector2b, vector3b, vector4a; 1147ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1148ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_l2; 1149ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_l1; 1150ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_0; 1151ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_r1; 1152ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_r2; 1153ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_r3; 1154ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1155ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *cm = ff_cropTbl + CROP_WIDTH; 1156ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1157ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector4a = 64; 1158ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1159ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* load filter coefficients */ 1160ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector1b = sub_pel_filterss[yoffset][0]; 1161ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector2b = sub_pel_filterss[yoffset][2]; 1162ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector3b = sub_pel_filterss[yoffset][1]; 1163ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1164ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (vector1b) 1165ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 1166ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 6 tap filter */ 1167ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1168ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = 2; i--;) 1169ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 1170ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 1171ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_load(src_ptr); 1172ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1173ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* do not allow compiler to reorder instructions */ 1174ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1175ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ".set noreorder \n\t" 1176ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : 1177ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : 1178ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1179ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1180ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 1181ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1182ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -8(%[src_ptr]) \n\t" 1183ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -4(%[src_ptr]) \n\t" 1184ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 0(%[src_ptr]) \n\t" 1185ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 4(%[src_ptr]) \n\t" 1186ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 8(%[src_ptr]) \n\t" 1187ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 12(%[src_ptr]) \n\t" 1188ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 1189ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1190ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1191ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1192ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1193ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_l2], %[vector1b] \n\t" 1194ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_0], %[vector2b] \n\t" 1195ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac2, %[src_ptr_l1], %[vector3b] \n\t" 1196ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1197ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -7(%[src_ptr]) \n\t" 1198ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -3(%[src_ptr]) \n\t" 1199ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 1(%[src_ptr]) \n\t" 1200ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 5(%[src_ptr]) \n\t" 1201ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 9(%[src_ptr]) \n\t" 1202ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 13(%[src_ptr]) \n\t" 1203ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 1204ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac2, 9 \n\t" 1205ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1206ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1207ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1208ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1209ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_l2], %[vector1b] \n\t" 1210ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 1211ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 1212ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1213ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -6(%[src_ptr]) \n\t" 1214ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -2(%[src_ptr]) \n\t" 1215ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 2(%[src_ptr]) \n\t" 1216ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 6(%[src_ptr]) \n\t" 1217ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 10(%[src_ptr]) \n\t" 1218ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 14(%[src_ptr]) \n\t" 1219ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac0 \n\t" 1220ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 1221ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1222ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1223ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1224ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1225ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_l2], %[vector1b] \n\t" 1226ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_0], %[vector2b] \n\t" 1227ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac0, %[src_ptr_l1], %[vector3b] \n\t" 1228ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1229ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -5(%[src_ptr]) \n\t" 1230ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -1(%[src_ptr]) \n\t" 1231ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 3(%[src_ptr]) \n\t" 1232ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 7(%[src_ptr]) \n\t" 1233ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 11(%[src_ptr]) \n\t" 1234ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 15(%[src_ptr]) \n\t" 1235ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac1 \n\t" 1236ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac0, 9 \n\t" 1237ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1238ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1239ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1240ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1241ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_l2], %[vector1b] \n\t" 1242ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_0], %[vector2b] \n\t" 1243ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac1, %[src_ptr_l1], %[vector3b] \n\t" 1244ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac1, 9 \n\t" 1245ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1246ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 1247ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=r" (Temp4), 1248ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "=&r" (src_ptr_l1), [src_ptr_0] "=&r" (src_ptr_0), 1249ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "=&r" (src_ptr_r1), [src_ptr_r2] "=&r" (src_ptr_r2), 1250ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l2] "=&r" (src_ptr_l2), [src_ptr_r3] "=&r" (src_ptr_r3) 1251ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 1252ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector3b] "r" (vector3b), [vector4a] "r" (vector4a), 1253ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr] "r" (src_ptr) 1254ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1255ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1256ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 1257ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[0] = cm[Temp1]; 1258ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[1] = cm[Temp2]; 1259ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[2] = cm[Temp3]; 1260ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[3] = cm[Temp4]; 1261ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1262ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr += output_pitch; 1263ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1264ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 1265ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1266ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -4(%[src_ptr]) \n\t" 1267ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], 0(%[src_ptr]) \n\t" 1268ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 4(%[src_ptr]) \n\t" 1269ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 8(%[src_ptr]) \n\t" 1270ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 12(%[src_ptr]) \n\t" 1271ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 16(%[src_ptr]) \n\t" 1272ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 1273ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1274ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1275ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1276ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_l2], %[vector1b] \n\t" 1277ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_0], %[vector2b] \n\t" 1278ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac2, %[src_ptr_l1], %[vector3b] \n\t" 1279ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1280ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -3(%[src_ptr]) \n\t" 1281ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], 1(%[src_ptr]) \n\t" 1282ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 5(%[src_ptr]) \n\t" 1283ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 9(%[src_ptr]) \n\t" 1284ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 13(%[src_ptr]) \n\t" 1285ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 17(%[src_ptr]) \n\t" 1286ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 1287ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac2, 9 \n\t" 1288ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1289ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1290ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1291ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1292ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_l2], %[vector1b] \n\t" 1293ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 1294ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 1295ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1296ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -2(%[src_ptr]) \n\t" 1297ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], 2(%[src_ptr]) \n\t" 1298ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 6(%[src_ptr]) \n\t" 1299ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 10(%[src_ptr]) \n\t" 1300ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 14(%[src_ptr]) \n\t" 1301ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 18(%[src_ptr]) \n\t" 1302ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac0 \n\t" 1303ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 1304ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1305ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1306ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1307ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1308ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_l2], %[vector1b] \n\t" 1309ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_0], %[vector2b] \n\t" 1310ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac0, %[src_ptr_l1], %[vector3b] \n\t" 1311ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1312ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -1(%[src_ptr]) \n\t" 1313ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], 3(%[src_ptr]) \n\t" 1314ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 7(%[src_ptr]) \n\t" 1315ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 11(%[src_ptr]) \n\t" 1316ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 15(%[src_ptr]) \n\t" 1317ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 19(%[src_ptr]) \n\t" 1318ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac1 \n\t" 1319ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac0, 9 \n\t" 1320ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1321ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1322ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1323ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1324ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_l2], %[vector1b] \n\t" 1325ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_0], %[vector2b] \n\t" 1326ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac1, %[src_ptr_l1], %[vector3b] \n\t" 1327ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac1, 9 \n\t" 1328ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1329ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 1330ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=r" (Temp4), 1331ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "=&r" (src_ptr_l1), [src_ptr_0] "=&r" (src_ptr_0), 1332ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "=&r" (src_ptr_r1), [src_ptr_r2] "=&r" (src_ptr_r2), 1333ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l2] "=&r" (src_ptr_l2), [src_ptr_r3] "=&r" (src_ptr_r3) 1334ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 1335ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector3b] "r" (vector3b), [vector4a] "r" (vector4a), 1336ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr] "r" (src_ptr) 1337ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1338ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1339ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 1340ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[0] = cm[Temp1]; 1341ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[1] = cm[Temp2]; 1342ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[2] = cm[Temp3]; 1343ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[3] = cm[Temp4]; 1344ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1345ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += 8; 1346ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr += output_pitch; 1347ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 1348ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 1349ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 1350ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 1351ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 4 tap filter */ 1352ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1353ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 1354ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_load(src_ptr); 1355ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1356ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = 2; i--;) 1357ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 1358ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* do not allow compiler to reorder instructions */ 1359ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1360ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ".set noreorder \n\t" 1361ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : 1362ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : 1363ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1364ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1365ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 1366ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1367ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -4(%[src_ptr]) \n\t" 1368ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 0(%[src_ptr]) \n\t" 1369ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 4(%[src_ptr]) \n\t" 1370ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 8(%[src_ptr]) \n\t" 1371ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 1372ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1373ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1374ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_0], %[vector2b] \n\t" 1375ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac2, %[src_ptr_l1], %[vector3b] \n\t" 1376ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1377ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -3(%[src_ptr]) \n\t" 1378ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 1(%[src_ptr]) \n\t" 1379ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 5(%[src_ptr]) \n\t" 1380ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 9(%[src_ptr]) \n\t" 1381ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 1382ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac2, 9 \n\t" 1383ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1384ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1385ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1386ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 1387ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 1388ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1389ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -2(%[src_ptr]) \n\t" 1390ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 2(%[src_ptr]) \n\t" 1391ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 6(%[src_ptr]) \n\t" 1392ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 10(%[src_ptr]) \n\t" 1393ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac0 \n\t" 1394ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 1395ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1396ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1397ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1398ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_0], %[vector2b] \n\t" 1399ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac0, %[src_ptr_l1], %[vector3b] \n\t" 1400ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1401ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -1(%[src_ptr]) \n\t" 1402ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 3(%[src_ptr]) \n\t" 1403ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 7(%[src_ptr]) \n\t" 1404ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 11(%[src_ptr]) \n\t" 1405ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac1 \n\t" 1406ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac0, 9 \n\t" 1407ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1408ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1409ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_0], %[vector2b] \n\t" 1410ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac1, %[src_ptr_l1], %[vector3b] \n\t" 1411ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac1, 9 \n\t" 1412ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1413ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 1414ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=r" (Temp4), 1415ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "=&r" (src_ptr_l1), [src_ptr_0] "=&r" (src_ptr_0), 1416ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "=&r" (src_ptr_r1), [src_ptr_r2] "=&r" (src_ptr_r2) 1417ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector2b] "r" (vector2b), [vector3b] "r" (vector3b), 1418ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [src_ptr] "r" (src_ptr) 1419ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1420ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1421ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 1422ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[0] = cm[Temp1]; 1423ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[1] = cm[Temp2]; 1424ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[2] = cm[Temp3]; 1425ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[3] = cm[Temp4]; 1426ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1427ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr += output_pitch; 1428ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1429ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 1430ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1431ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], 0(%[src_ptr]) \n\t" 1432ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 4(%[src_ptr]) \n\t" 1433ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 8(%[src_ptr]) \n\t" 1434ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 12(%[src_ptr]) \n\t" 1435ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 1436ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1437ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1438ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_0], %[vector2b] \n\t" 1439ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac2, %[src_ptr_l1], %[vector3b] \n\t" 1440ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1441ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], 1(%[src_ptr]) \n\t" 1442ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 5(%[src_ptr]) \n\t" 1443ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 9(%[src_ptr]) \n\t" 1444ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 13(%[src_ptr]) \n\t" 1445ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 1446ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac2, 9 \n\t" 1447ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1448ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1449ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1450ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 1451ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 1452ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1453ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], 2(%[src_ptr]) \n\t" 1454ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 6(%[src_ptr]) \n\t" 1455ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 10(%[src_ptr]) \n\t" 1456ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 14(%[src_ptr]) \n\t" 1457ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac0 \n\t" 1458ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 1459ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1460ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1461ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1462ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_0], %[vector2b] \n\t" 1463ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac0, %[src_ptr_l1], %[vector3b] \n\t" 1464ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1465ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], 3(%[src_ptr]) \n\t" 1466ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 7(%[src_ptr]) \n\t" 1467ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 11(%[src_ptr]) \n\t" 1468ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 15(%[src_ptr]) \n\t" 1469ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac1 \n\t" 1470ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac0, 9 \n\t" 1471ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1472ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1473ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_0], %[vector2b] \n\t" 1474ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac1, %[src_ptr_l1], %[vector3b] \n\t" 1475ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac1, 9 \n\t" 1476ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1477ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 1478ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=r" (Temp4), 1479ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "=&r" (src_ptr_l1), [src_ptr_0] "=&r" (src_ptr_0), 1480ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "=&r" (src_ptr_r1), [src_ptr_r2] "=&r" (src_ptr_r2) 1481ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector2b] "r" (vector2b), [vector3b] "r" (vector3b), 1482ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [src_ptr] "r" (src_ptr) 1483ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1484ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1485ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 1486ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[0] = cm[Temp1]; 1487ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[1] = cm[Temp2]; 1488ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[2] = cm[Temp3]; 1489ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[3] = cm[Temp4]; 1490ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1491ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += 8; 1492ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr += output_pitch; 1493ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 1494ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 1495ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 1496ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1497ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1498ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_filter_block2d_second_pass_8 1499ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org( 1500ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT src_ptr, 1501ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT output_ptr, 1502ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int output_pitch, 1503ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int output_height, 1504ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int output_width, 1505ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int yoffset 1506ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) 1507ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 1508ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int i; 1509ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1510ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int Temp1, Temp2, Temp3, Temp4, Temp5, Temp6, Temp7, Temp8; 1511ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int vector1b, vector2b, vector3b, vector4a; 1512ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1513ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_l2; 1514ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_l1; 1515ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_0; 1516ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_r1; 1517ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_r2; 1518ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_r3; 1519ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *cm = ff_cropTbl + CROP_WIDTH; 1520ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1521ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector4a = 64; 1522ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1523ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector1b = sub_pel_filterss[yoffset][0]; 1524ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector2b = sub_pel_filterss[yoffset][2]; 1525ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector3b = sub_pel_filterss[yoffset][1]; 1526ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1527ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (vector1b) 1528ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 1529ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 6 tap filter */ 1530ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1531ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 1532ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_load(src_ptr); 1533ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1534ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = output_height; i--;) 1535ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 1536ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 1537ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1538ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -16(%[src_ptr]) \n\t" 1539ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -8(%[src_ptr]) \n\t" 1540ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 0(%[src_ptr]) \n\t" 1541ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 8(%[src_ptr]) \n\t" 1542ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 16(%[src_ptr]) \n\t" 1543ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 24(%[src_ptr]) \n\t" 1544ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 1545ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1546ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1547ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1548ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1549ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_l2], %[vector1b] \n\t" 1550ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_0], %[vector2b] \n\t" 1551ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac2, %[src_ptr_l1], %[vector3b] \n\t" 1552ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1553ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -15(%[src_ptr]) \n\t" 1554ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -7(%[src_ptr]) \n\t" 1555ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 1(%[src_ptr]) \n\t" 1556ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 9(%[src_ptr]) \n\t" 1557ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 17(%[src_ptr]) \n\t" 1558ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 25(%[src_ptr]) \n\t" 1559ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 1560ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac2, 9 \n\t" 1561ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1562ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1563ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1564ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1565ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_l2], %[vector1b] \n\t" 1566ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 1567ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 1568ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1569ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -14(%[src_ptr]) \n\t" 1570ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -6(%[src_ptr]) \n\t" 1571ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 2(%[src_ptr]) \n\t" 1572ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 10(%[src_ptr]) \n\t" 1573ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 18(%[src_ptr]) \n\t" 1574ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 26(%[src_ptr]) \n\t" 1575ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac0 \n\t" 1576ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 1577ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1578ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1579ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1580ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1581ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_l2], %[vector1b] \n\t" 1582ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_0], %[vector2b] \n\t" 1583ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac0, %[src_ptr_l1], %[vector3b] \n\t" 1584ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1585ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -13(%[src_ptr]) \n\t" 1586ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -5(%[src_ptr]) \n\t" 1587ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 3(%[src_ptr]) \n\t" 1588ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 11(%[src_ptr]) \n\t" 1589ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 19(%[src_ptr]) \n\t" 1590ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 27(%[src_ptr]) \n\t" 1591ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac1 \n\t" 1592ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac0, 9 \n\t" 1593ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1594ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1595ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1596ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1597ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_l2], %[vector1b] \n\t" 1598ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_0], %[vector2b] \n\t" 1599ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac1, %[src_ptr_l1], %[vector3b] \n\t" 1600ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1601ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), [Temp3] "=&r" (Temp3), 1602ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "=&r" (src_ptr_l1), [src_ptr_0] "=&r" (src_ptr_0), 1603ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "=&r" (src_ptr_r1), [src_ptr_r2] "=&r" (src_ptr_r2), 1604ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l2] "=&r" (src_ptr_l2), [src_ptr_r3] "=&r" (src_ptr_r3) 1605ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 1606ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector3b] "r" (vector3b), [vector4a] "r" (vector4a), 1607ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr] "r" (src_ptr) 1608ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1609ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1610ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 1611ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1612ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -12(%[src_ptr]) \n\t" 1613ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -4(%[src_ptr]) \n\t" 1614ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 4(%[src_ptr]) \n\t" 1615ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 12(%[src_ptr]) \n\t" 1616ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 20(%[src_ptr]) \n\t" 1617ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 28(%[src_ptr]) \n\t" 1618ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 1619ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1620ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1621ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1622ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1623ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_l2], %[vector1b] \n\t" 1624ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_0], %[vector2b] \n\t" 1625ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac2, %[src_ptr_l1], %[vector3b] \n\t" 1626ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac1, 9 \n\t" 1627ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1628ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -11(%[src_ptr]) \n\t" 1629ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -3(%[src_ptr]) \n\t" 1630ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 5(%[src_ptr]) \n\t" 1631ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 13(%[src_ptr]) \n\t" 1632ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 21(%[src_ptr]) \n\t" 1633ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 29(%[src_ptr]) \n\t" 1634ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 1635ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp5], $ac2, 9 \n\t" 1636ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1637ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1638ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1639ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1640ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_l2], %[vector1b] \n\t" 1641ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 1642ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 1643ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1644ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -10(%[src_ptr]) \n\t" 1645ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -2(%[src_ptr]) \n\t" 1646ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 6(%[src_ptr]) \n\t" 1647ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 14(%[src_ptr]) \n\t" 1648ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 22(%[src_ptr]) \n\t" 1649ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 30(%[src_ptr]) \n\t" 1650ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac0 \n\t" 1651ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp6], $ac3, 9 \n\t" 1652ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1653ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1654ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1655ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1656ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_l2], %[vector1b] \n\t" 1657ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_0], %[vector2b] \n\t" 1658ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac0, %[src_ptr_l1], %[vector3b] \n\t" 1659ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1660ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -9(%[src_ptr]) \n\t" 1661ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -1(%[src_ptr]) \n\t" 1662ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 7(%[src_ptr]) \n\t" 1663ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 15(%[src_ptr]) \n\t" 1664ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 23(%[src_ptr]) \n\t" 1665ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 31(%[src_ptr]) \n\t" 1666ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac1 \n\t" 1667ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp7], $ac0, 9 \n\t" 1668ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1669ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 1670ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1671ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1672ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_l2], %[vector1b] \n\t" 1673ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_0], %[vector2b] \n\t" 1674ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac1, %[src_ptr_l1], %[vector3b] \n\t" 1675ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp8], $ac1, 9 \n\t" 1676ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1677ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp4] "=&r" (Temp4), [Temp5] "=&r" (Temp5), 1678ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp6] "=&r" (Temp6), [Temp7] "=&r" (Temp7), [Temp8] "=r" (Temp8), 1679ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "=&r" (src_ptr_l1), [src_ptr_0] "=&r" (src_ptr_0), 1680ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "=&r" (src_ptr_r1), [src_ptr_r2] "=&r" (src_ptr_r2), 1681ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l2] "=&r" (src_ptr_l2),[src_ptr_r3] "=&r" (src_ptr_r3) 1682ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 1683ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector3b] "r" (vector3b), [vector4a] "r" (vector4a), 1684ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr] "r" (src_ptr) 1685ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1686ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1687ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 1688ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[0] = cm[Temp1]; 1689ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[1] = cm[Temp2]; 1690ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[2] = cm[Temp3]; 1691ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[3] = cm[Temp4]; 1692ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[4] = cm[Temp5]; 1693ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[5] = cm[Temp6]; 1694ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[6] = cm[Temp7]; 1695ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[7] = cm[Temp8]; 1696ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1697ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += 8; 1698ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr += output_pitch; 1699ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 1700ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 1701ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 1702ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 1703ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 4 tap filter */ 1704ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1705ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 1706ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_load(src_ptr); 1707ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1708ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = output_height; i--;) 1709ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 1710ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1711ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -8(%[src_ptr]) \n\t" 1712ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 0(%[src_ptr]) \n\t" 1713ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 8(%[src_ptr]) \n\t" 1714ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 16(%[src_ptr]) \n\t" 1715ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 1716ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1717ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1718ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_0], %[vector2b] \n\t" 1719ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac2, %[src_ptr_l1], %[vector3b] \n\t" 1720ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1721ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [src_ptr_l1] "=&r" (src_ptr_l1), [src_ptr_0] "=&r" (src_ptr_0), 1722ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "=&r" (src_ptr_r1), [src_ptr_r2] "=&r" (src_ptr_r2) 1723ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector2b] "r" (vector2b), [vector3b] "r" (vector3b), 1724ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [src_ptr] "r" (src_ptr) 1725ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1726ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1727ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1728ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -7(%[src_ptr]) \n\t" 1729ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 1(%[src_ptr]) \n\t" 1730ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 9(%[src_ptr]) \n\t" 1731ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 17(%[src_ptr]) \n\t" 1732ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 1733ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1734ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1735ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 1736ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 1737ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac2, 9 \n\t" 1738ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1739ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=r" (Temp1), 1740ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "=&r" (src_ptr_l1), [src_ptr_0] "=&r" (src_ptr_0), 1741ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "=&r" (src_ptr_r1), [src_ptr_r2] "=&r" (src_ptr_r2) 1742ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector2b] "r" (vector2b), [vector3b] "r" (vector3b), 1743ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [src_ptr] "r" (src_ptr) 1744ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1745ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1746ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_l1 = src_ptr[-6]; 1747ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_0 = src_ptr[2]; 1748ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_r1 = src_ptr[10]; 1749ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_r2 = src_ptr[18]; 1750ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1751ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1752ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac0 \n\t" 1753ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1754ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1755ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_0], %[vector2b] \n\t" 1756ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac0, %[src_ptr_l1], %[vector3b] \n\t" 1757ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 1758ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1759ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp2] "=r" (Temp2) 1760ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector2b] "r" (vector2b), [vector3b] "r" (vector3b), 1761ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "r" (src_ptr_l1), [src_ptr_0] "r" (src_ptr_0), 1762ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "r" (src_ptr_r1), [src_ptr_r2] "r" (src_ptr_r2), 1763ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a) 1764ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1765ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1766ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_l1 = src_ptr[-5]; 1767ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_0 = src_ptr[3]; 1768ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_r1 = src_ptr[11]; 1769ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_r2 = src_ptr[19]; 1770ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1771ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1772ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac1 \n\t" 1773ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1774ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1775ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_0], %[vector2b] \n\t" 1776ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac1, %[src_ptr_l1], %[vector3b] \n\t" 1777ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac0, 9 \n\t" 1778ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1779ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp3] "=r" (Temp3) 1780ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector2b] "r" (vector2b), [vector3b] "r" (vector3b), 1781ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "r" (src_ptr_l1), [src_ptr_0] "r" (src_ptr_0), 1782ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "r" (src_ptr_r1), [src_ptr_r2] "r" (src_ptr_r2), 1783ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a) 1784ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1785ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1786ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_l1 = src_ptr[-4]; 1787ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_0 = src_ptr[4]; 1788ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_r1 = src_ptr[12]; 1789ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_r2 = src_ptr[20]; 1790ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1791ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1792ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 1793ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1794ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1795ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_0], %[vector2b] \n\t" 1796ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac2, %[src_ptr_l1], %[vector3b] \n\t" 1797ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac1, 9 \n\t" 1798ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1799ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp4] "=r" (Temp4) 1800ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector2b] "r" (vector2b), [vector3b] "r" (vector3b), 1801ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "r" (src_ptr_l1), [src_ptr_0] "r" (src_ptr_0), 1802ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "r" (src_ptr_r1), [src_ptr_r2] "r" (src_ptr_r2), 1803ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a) 1804ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1805ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1806ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_l1 = src_ptr[-3]; 1807ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_0 = src_ptr[5]; 1808ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_r1 = src_ptr[13]; 1809ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_r2 = src_ptr[21]; 1810ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1811ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1812ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 1813ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1814ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1815ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 1816ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 1817ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp5], $ac2, 9 \n\t" 1818ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1819ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp5] "=&r" (Temp5) 1820ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector2b] "r" (vector2b), [vector3b] "r" (vector3b), 1821ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "r" (src_ptr_l1), [src_ptr_0] "r" (src_ptr_0), 1822ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "r" (src_ptr_r1), [src_ptr_r2] "r" (src_ptr_r2), 1823ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a) 1824ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1825ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1826ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_l1 = src_ptr[-2]; 1827ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_0 = src_ptr[6]; 1828ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_r1 = src_ptr[14]; 1829ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_r2 = src_ptr[22]; 1830ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1831ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1832ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac0 \n\t" 1833ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1834ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1835ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_0], %[vector2b] \n\t" 1836ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac0, %[src_ptr_l1], %[vector3b] \n\t" 1837ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp6], $ac3, 9 \n\t" 1838ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1839ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp6] "=r" (Temp6) 1840ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector2b] "r" (vector2b), [vector3b] "r" (vector3b), 1841ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "r" (src_ptr_l1), [src_ptr_0] "r" (src_ptr_0), 1842ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "r" (src_ptr_r1), [src_ptr_r2] "r" (src_ptr_r2), 1843ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a) 1844ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1845ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1846ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_l1 = src_ptr[-1]; 1847ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_0 = src_ptr[7]; 1848ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_r1 = src_ptr[15]; 1849ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr_r2 = src_ptr[23]; 1850ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1851ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1852ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac1 \n\t" 1853ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1854ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1855ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_0], %[vector2b] \n\t" 1856ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac1, %[src_ptr_l1], %[vector3b] \n\t" 1857ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp7], $ac0, 9 \n\t" 1858ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp8], $ac1, 9 \n\t" 1859ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1860ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp7] "=&r" (Temp7), [Temp8] "=r" (Temp8) 1861ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector2b] "r" (vector2b), [vector3b] "r" (vector3b), 1862ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "r" (src_ptr_l1), [src_ptr_0] "r" (src_ptr_0), 1863ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "r" (src_ptr_r1), [src_ptr_r2] "r" (src_ptr_r2), 1864ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a) 1865ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 1866ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1867ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 1868ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[0] = cm[Temp1]; 1869ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[1] = cm[Temp2]; 1870ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[2] = cm[Temp3]; 1871ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[3] = cm[Temp4]; 1872ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[4] = cm[Temp5]; 1873ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[5] = cm[Temp6]; 1874ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[6] = cm[Temp7]; 1875ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[7] = cm[Temp8]; 1876ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1877ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += 8; 1878ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr += output_pitch; 1879ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 1880ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 1881ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 1882ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1883ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1884ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_filter_block2d_second_pass161 1885ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org( 1886ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT src_ptr, 1887ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT output_ptr, 1888ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int output_pitch, 1889ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org const unsigned short *vp8_filter 1890ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) 1891ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 1892ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int i, j; 1893ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1894ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int Temp1, Temp2, Temp3, Temp4, Temp5, Temp6, Temp7, Temp8; 1895ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int vector4a; 1896ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int vector1b, vector2b, vector3b; 1897ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1898ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_l2; 1899ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_l1; 1900ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_0; 1901ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_r1; 1902ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_r2; 1903ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char src_ptr_r3; 1904ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *cm = ff_cropTbl + CROP_WIDTH; 1905ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1906ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector4a = 64; 1907ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1908ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector1b = vp8_filter[0]; 1909ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector2b = vp8_filter[2]; 1910ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vector3b = vp8_filter[1]; 1911ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1912ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (vector1b == 0) 1913ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 1914ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 4 tap filter */ 1915ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1916ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 1917ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_load(src_ptr + 16); 1918ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1919ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = 16; i--;) 1920ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 1921ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* unrolling for loop */ 1922ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (j = 0; j < 16; j += 8) 1923ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 1924ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 1925ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 1926ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -16(%[src_ptr]) \n\t" 1927ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 0(%[src_ptr]) \n\t" 1928ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 16(%[src_ptr]) \n\t" 1929ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 32(%[src_ptr]) \n\t" 1930ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 1931ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1932ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1933ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_0], %[vector2b] \n\t" 1934ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac2, %[src_ptr_l1], %[vector3b] \n\t" 1935ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1936ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -15(%[src_ptr]) \n\t" 1937ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 1(%[src_ptr]) \n\t" 1938ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 17(%[src_ptr]) \n\t" 1939ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 33(%[src_ptr]) \n\t" 1940ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 1941ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac2, 9 \n\t" 1942ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1943ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1944ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1945ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 1946ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 1947ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1948ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -14(%[src_ptr]) \n\t" 1949ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 2(%[src_ptr]) \n\t" 1950ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 18(%[src_ptr]) \n\t" 1951ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 34(%[src_ptr]) \n\t" 1952ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac1 \n\t" 1953ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac3, 9 \n\t" 1954ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1955ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1956ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1957ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_0], %[vector2b] \n\t" 1958ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac1, %[src_ptr_l1], %[vector3b] \n\t" 1959ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1960ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -13(%[src_ptr]) \n\t" 1961ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 3(%[src_ptr]) \n\t" 1962ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 19(%[src_ptr]) \n\t" 1963ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 35(%[src_ptr]) \n\t" 1964ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 1965ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac1, 9 \n\t" 1966ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1967ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1968ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1969ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 1970ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 1971ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1972ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -12(%[src_ptr]) \n\t" 1973ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 4(%[src_ptr]) \n\t" 1974ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 20(%[src_ptr]) \n\t" 1975ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 36(%[src_ptr]) \n\t" 1976ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 1977ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac3, 9 \n\t" 1978ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1979ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1980ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1981ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_0], %[vector2b] \n\t" 1982ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac2, %[src_ptr_l1], %[vector3b] \n\t" 1983ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1984ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -11(%[src_ptr]) \n\t" 1985ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 5(%[src_ptr]) \n\t" 1986ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 21(%[src_ptr]) \n\t" 1987ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 37(%[src_ptr]) \n\t" 1988ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 1989ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp5], $ac2, 9 \n\t" 1990ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1991ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 1992ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 1993ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 1994ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 1995ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 1996ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -10(%[src_ptr]) \n\t" 1997ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 6(%[src_ptr]) \n\t" 1998ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 22(%[src_ptr]) \n\t" 1999ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 38(%[src_ptr]) \n\t" 2000ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac1 \n\t" 2001ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp6], $ac3, 9 \n\t" 2002ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2003ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2004ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2005ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_0], %[vector2b] \n\t" 2006ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac1, %[src_ptr_l1], %[vector3b] \n\t" 2007ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2008ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -9(%[src_ptr]) \n\t" 2009ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 7(%[src_ptr]) \n\t" 2010ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 23(%[src_ptr]) \n\t" 2011ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 39(%[src_ptr]) \n\t" 2012ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 2013ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp7], $ac1, 9 \n\t" 2014ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2015ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2016ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2017ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 2018ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 2019ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp8], $ac3, 9 \n\t" 2020ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2021ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 2022ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=&r" (Temp4), 2023ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp5] "=&r" (Temp5), [Temp6] "=&r" (Temp6), 2024ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp7] "=&r" (Temp7), [Temp8] "=r" (Temp8), 2025ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "=&r" (src_ptr_l1), [src_ptr_0] "=&r" (src_ptr_0), 2026ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "=&r" (src_ptr_r1), [src_ptr_r2] "=&r" (src_ptr_r2) 2027ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector2b] "r" (vector2b), [vector3b] "r" (vector3b), 2028ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector4a] "r" (vector4a), [src_ptr] "r" (src_ptr) 2029ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 2030ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2031ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 2032ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[j] = cm[Temp1]; 2033ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[j + 1] = cm[Temp2]; 2034ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[j + 2] = cm[Temp3]; 2035ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[j + 3] = cm[Temp4]; 2036ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[j + 4] = cm[Temp5]; 2037ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[j + 5] = cm[Temp6]; 2038ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[j + 6] = cm[Temp7]; 2039ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[j + 7] = cm[Temp8]; 2040ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2041ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += 8; 2042ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2043ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2044ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr += output_pitch; 2045ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2046ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2047ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 2048ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2049ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 4 tap filter */ 2050ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2051ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 2052ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_load(src_ptr + 16); 2053ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2054ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* unroll for loop */ 2055ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for (i = 16; i--;) 2056ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2057ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 2058ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 2059ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -32(%[src_ptr]) \n\t" 2060ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -16(%[src_ptr]) \n\t" 2061ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 0(%[src_ptr]) \n\t" 2062ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 16(%[src_ptr]) \n\t" 2063ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 32(%[src_ptr]) \n\t" 2064ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 48(%[src_ptr]) \n\t" 2065ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 2066ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2067ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2068ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2069ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2070ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_l2], %[vector1b] \n\t" 2071ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_0], %[vector2b] \n\t" 2072ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac2, %[src_ptr_l1], %[vector3b] \n\t" 2073ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2074ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -31(%[src_ptr]) \n\t" 2075ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -15(%[src_ptr]) \n\t" 2076ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 1(%[src_ptr]) \n\t" 2077ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 17(%[src_ptr]) \n\t" 2078ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 33(%[src_ptr]) \n\t" 2079ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 49(%[src_ptr]) \n\t" 2080ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac0 \n\t" 2081ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac2, 9 \n\t" 2082ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2083ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2084ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2085ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2086ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_l2], %[vector1b] \n\t" 2087ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_0], %[vector2b] \n\t" 2088ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac0, %[src_ptr_l1], %[vector3b] \n\t" 2089ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2090ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -30(%[src_ptr]) \n\t" 2091ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -14(%[src_ptr]) \n\t" 2092ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 2(%[src_ptr]) \n\t" 2093ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 18(%[src_ptr]) \n\t" 2094ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 34(%[src_ptr]) \n\t" 2095ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 50(%[src_ptr]) \n\t" 2096ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac1 \n\t" 2097ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac0, 9 \n\t" 2098ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2099ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2100ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2101ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2102ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_l2], %[vector1b] \n\t" 2103ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_0], %[vector2b] \n\t" 2104ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac1, %[src_ptr_l1], %[vector3b] \n\t" 2105ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2106ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -29(%[src_ptr]) \n\t" 2107ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -13(%[src_ptr]) \n\t" 2108ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 3(%[src_ptr]) \n\t" 2109ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 19(%[src_ptr]) \n\t" 2110ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 35(%[src_ptr]) \n\t" 2111ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 51(%[src_ptr]) \n\t" 2112ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 2113ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac1, 9 \n\t" 2114ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2115ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2116ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2117ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2118ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_l2], %[vector1b] \n\t" 2119ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 2120ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 2121ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2122ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -28(%[src_ptr]) \n\t" 2123ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -12(%[src_ptr]) \n\t" 2124ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 4(%[src_ptr]) \n\t" 2125ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 20(%[src_ptr]) \n\t" 2126ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 36(%[src_ptr]) \n\t" 2127ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 52(%[src_ptr]) \n\t" 2128ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 2129ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac3, 9 \n\t" 2130ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2131ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2132ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2133ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2134ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_l2], %[vector1b] \n\t" 2135ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_0], %[vector2b] \n\t" 2136ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac2, %[src_ptr_l1], %[vector3b] \n\t" 2137ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2138ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -27(%[src_ptr]) \n\t" 2139ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -11(%[src_ptr]) \n\t" 2140ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 5(%[src_ptr]) \n\t" 2141ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 21(%[src_ptr]) \n\t" 2142ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 37(%[src_ptr]) \n\t" 2143ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 53(%[src_ptr]) \n\t" 2144ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac0 \n\t" 2145ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp5], $ac2, 9 \n\t" 2146ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2147ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2148ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2149ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2150ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_l2], %[vector1b] \n\t" 2151ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_0], %[vector2b] \n\t" 2152ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac0, %[src_ptr_l1], %[vector3b] \n\t" 2153ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2154ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -26(%[src_ptr]) \n\t" 2155ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -10(%[src_ptr]) \n\t" 2156ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 6(%[src_ptr]) \n\t" 2157ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 22(%[src_ptr]) \n\t" 2158ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 38(%[src_ptr]) \n\t" 2159ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 54(%[src_ptr]) \n\t" 2160ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac1 \n\t" 2161ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp6], $ac0, 9 \n\t" 2162ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2163ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2164ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2165ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2166ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_l2], %[vector1b] \n\t" 2167ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_0], %[vector2b] \n\t" 2168ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac1, %[src_ptr_l1], %[vector3b] \n\t" 2169ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2170ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -25(%[src_ptr]) \n\t" 2171ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -9(%[src_ptr]) \n\t" 2172ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 7(%[src_ptr]) \n\t" 2173ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 23(%[src_ptr]) \n\t" 2174ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 39(%[src_ptr]) \n\t" 2175ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 55(%[src_ptr]) \n\t" 2176ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 2177ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp7], $ac1, 9 \n\t" 2178ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2179ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2180ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2181ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2182ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_l2], %[vector1b] \n\t" 2183ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 2184ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 2185ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp8], $ac3, 9 \n\t" 2186ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2187ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 2188ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=&r" (Temp4), 2189ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp5] "=&r" (Temp5), [Temp6] "=&r" (Temp6), 2190ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp7] "=&r" (Temp7), [Temp8] "=r" (Temp8), 2191ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "=&r" (src_ptr_l1), [src_ptr_0] "=&r" (src_ptr_0), 2192ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "=&r" (src_ptr_r1), [src_ptr_r2] "=&r" (src_ptr_r2), 2193ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l2] "=&r" (src_ptr_l2),[src_ptr_r3] "=&r" (src_ptr_r3) 2194ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 2195ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector3b] "r" (vector3b), [vector4a] "r" (vector4a), 2196ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr] "r" (src_ptr) 2197ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 2198ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2199ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* clamp and store results */ 2200ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[0] = cm[Temp1]; 2201ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[1] = cm[Temp2]; 2202ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[2] = cm[Temp3]; 2203ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[3] = cm[Temp4]; 2204ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[4] = cm[Temp5]; 2205ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[5] = cm[Temp6]; 2206ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[6] = cm[Temp7]; 2207ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[7] = cm[Temp8]; 2208ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2209ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* apply filter with vectors pairs */ 2210ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 2211ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -24(%[src_ptr]) \n\t" 2212ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -8(%[src_ptr]) \n\t" 2213ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 8(%[src_ptr]) \n\t" 2214ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 24(%[src_ptr]) \n\t" 2215ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 40(%[src_ptr]) \n\t" 2216ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 56(%[src_ptr]) \n\t" 2217ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 2218ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2219ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2220ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2221ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2222ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_l2], %[vector1b] \n\t" 2223ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_0], %[vector2b] \n\t" 2224ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac2, %[src_ptr_l1], %[vector3b] \n\t" 2225ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2226ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -23(%[src_ptr]) \n\t" 2227ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -7(%[src_ptr]) \n\t" 2228ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 9(%[src_ptr]) \n\t" 2229ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 25(%[src_ptr]) \n\t" 2230ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 41(%[src_ptr]) \n\t" 2231ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 57(%[src_ptr]) \n\t" 2232ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac0 \n\t" 2233ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp1], $ac2, 9 \n\t" 2234ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2235ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2236ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2237ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2238ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_l2], %[vector1b] \n\t" 2239ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_0], %[vector2b] \n\t" 2240ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac0, %[src_ptr_l1], %[vector3b] \n\t" 2241ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2242ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -22(%[src_ptr]) \n\t" 2243ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -6(%[src_ptr]) \n\t" 2244ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 10(%[src_ptr]) \n\t" 2245ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 26(%[src_ptr]) \n\t" 2246ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 42(%[src_ptr]) \n\t" 2247ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 58(%[src_ptr]) \n\t" 2248ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac1 \n\t" 2249ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp2], $ac0, 9 \n\t" 2250ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2251ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2252ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2253ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2254ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_l2], %[vector1b] \n\t" 2255ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_0], %[vector2b] \n\t" 2256ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac1, %[src_ptr_l1], %[vector3b] \n\t" 2257ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2258ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -21(%[src_ptr]) \n\t" 2259ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -5(%[src_ptr]) \n\t" 2260ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 11(%[src_ptr]) \n\t" 2261ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 27(%[src_ptr]) \n\t" 2262ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 43(%[src_ptr]) \n\t" 2263ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 59(%[src_ptr]) \n\t" 2264ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 2265ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp3], $ac1, 9 \n\t" 2266ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2267ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2268ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2269ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2270ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_l2], %[vector1b] \n\t" 2271ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 2272ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 2273ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2274ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -20(%[src_ptr]) \n\t" 2275ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -4(%[src_ptr]) \n\t" 2276ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 12(%[src_ptr]) \n\t" 2277ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 28(%[src_ptr]) \n\t" 2278ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 44(%[src_ptr]) \n\t" 2279ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 60(%[src_ptr]) \n\t" 2280ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac2 \n\t" 2281ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp4], $ac3, 9 \n\t" 2282ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2283ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2284ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2285ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2286ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_l2], %[vector1b] \n\t" 2287ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac2, %[src_ptr_0], %[vector2b] \n\t" 2288ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac2, %[src_ptr_l1], %[vector3b] \n\t" 2289ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2290ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -19(%[src_ptr]) \n\t" 2291ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -3(%[src_ptr]) \n\t" 2292ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 13(%[src_ptr]) \n\t" 2293ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 29(%[src_ptr]) \n\t" 2294ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 45(%[src_ptr]) \n\t" 2295ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 61(%[src_ptr]) \n\t" 2296ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac0 \n\t" 2297ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp5], $ac2, 9 \n\t" 2298ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2299ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2300ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2301ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2302ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_l2], %[vector1b] \n\t" 2303ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac0, %[src_ptr_0], %[vector2b] \n\t" 2304ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac0, %[src_ptr_l1], %[vector3b] \n\t" 2305ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2306ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -18(%[src_ptr]) \n\t" 2307ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -2(%[src_ptr]) \n\t" 2308ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 14(%[src_ptr]) \n\t" 2309ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 30(%[src_ptr]) \n\t" 2310ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 46(%[src_ptr]) \n\t" 2311ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 62(%[src_ptr]) \n\t" 2312ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac1 \n\t" 2313ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp6], $ac0, 9 \n\t" 2314ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2315ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2316ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2317ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2318ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_l2], %[vector1b] \n\t" 2319ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac1, %[src_ptr_0], %[vector2b] \n\t" 2320ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac1, %[src_ptr_l1], %[vector3b] \n\t" 2321ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2322ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l2], -17(%[src_ptr]) \n\t" 2323ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_l1], -1(%[src_ptr]) \n\t" 2324ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_0], 15(%[src_ptr]) \n\t" 2325ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r1], 31(%[src_ptr]) \n\t" 2326ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r2], 47(%[src_ptr]) \n\t" 2327ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "lbu %[src_ptr_r3], 63(%[src_ptr]) \n\t" 2328ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "mtlo %[vector4a], $ac3 \n\t" 2329ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp7], $ac1, 9 \n\t" 2330ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2331ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l2], %[src_ptr_r3], 8 \n\t" 2332ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_0], %[src_ptr_r1], 8 \n\t" 2333ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "append %[src_ptr_l1], %[src_ptr_r2], 8 \n\t" 2334ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_l2], %[vector1b] \n\t" 2335ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpau.h.qbr $ac3, %[src_ptr_0], %[vector2b] \n\t" 2336ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "dpsu.h.qbr $ac3, %[src_ptr_l1], %[vector3b] \n\t" 2337ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "extp %[Temp8], $ac3, 9 \n\t" 2338ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2339ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2), 2340ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp3] "=&r" (Temp3), [Temp4] "=&r" (Temp4), 2341ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp5] "=&r" (Temp5), [Temp6] "=&r" (Temp6), 2342ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [Temp7] "=&r" (Temp7), [Temp8] "=r" (Temp8), 2343ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l1] "=&r" (src_ptr_l1), [src_ptr_0] "=&r" (src_ptr_0), 2344ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_r1] "=&r" (src_ptr_r1), [src_ptr_r2] "=&r" (src_ptr_r2), 2345ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr_l2] "=&r" (src_ptr_l2), [src_ptr_r3] "=&r" (src_ptr_r3) 2346ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [vector1b] "r" (vector1b), [vector2b] "r" (vector2b), 2347ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [vector3b] "r" (vector3b), [vector4a] "r" (vector4a), 2348ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_ptr] "r" (src_ptr) 2349ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 2350ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2351ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr += 16; 2352ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[8] = cm[Temp1]; 2353ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[9] = cm[Temp2]; 2354ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[10] = cm[Temp3]; 2355ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[11] = cm[Temp4]; 2356ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[12] = cm[Temp5]; 2357ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[13] = cm[Temp6]; 2358ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[14] = cm[Temp7]; 2359ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr[15] = cm[Temp8]; 2360ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2361ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org output_ptr += output_pitch; 2362ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2363ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2364ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 2365ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2366ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2367ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_sixtap_predict4x4_dspr2 2368ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org( 2369ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT src_ptr, 2370ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int src_pixels_per_line, 2371ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int xoffset, 2372ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int yoffset, 2373ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT dst_ptr, 2374ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int dst_pitch 2375ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) 2376ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 2377ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char FData[9 * 4]; /* Temp data bufffer used in filtering */ 2378ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int pos = 16; 2379ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2380ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* bit positon for extract from acc */ 2381ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 2382ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "wrdsp %[pos], 1 \n\t" 2383ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : 2384ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [pos] "r" (pos) 2385ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 2386ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2387ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (yoffset) 2388ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2389ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* First filter 1-D horizontally... */ 2390ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_first_pass_4(src_ptr - (2 * src_pixels_per_line), FData, 2391ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_pixels_per_line, 9, xoffset, 4); 2392ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* then filter verticaly... */ 2393ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_second_pass4(FData + 8, dst_ptr, dst_pitch, yoffset); 2394ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2395ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 2396ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* if (yoffsset == 0) vp8_filter_block2d_first_pass save data to dst_ptr */ 2397ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_first_pass_4(src_ptr, dst_ptr, src_pixels_per_line, 2398ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 4, xoffset, dst_pitch); 2399ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 2400ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2401ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2402ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_sixtap_predict8x8_dspr2 2403ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org( 2404ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT src_ptr, 2405ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int src_pixels_per_line, 2406ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int xoffset, 2407ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int yoffset, 2408ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT dst_ptr, 2409ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int dst_pitch 2410ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) 2411ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 2412ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2413ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char FData[13 * 8]; /* Temp data bufffer used in filtering */ 2414ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int pos, Temp1, Temp2; 2415ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2416ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pos = 16; 2417ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2418ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* bit positon for extract from acc */ 2419ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 2420ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "wrdsp %[pos], 1 \n\t" 2421ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : 2422ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [pos] "r" (pos) 2423ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 2424ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2425ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (yoffset) 2426ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2427ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2428ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr = src_ptr - (2 * src_pixels_per_line); 2429ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2430ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (xoffset) 2431ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* filter 1-D horizontally... */ 2432ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_first_pass_8_all(src_ptr, FData, src_pixels_per_line, 2433ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 13, xoffset, 8); 2434ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2435ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 2436ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2437ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 2438ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_load(src_ptr + 2 * src_pixels_per_line); 2439ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2440ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 2441ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2442ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2443ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 0(%[FData]) \n\t" 2444ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 4(%[FData]) \n\t" 2445ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2446ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2447ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2448ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2449ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 8(%[FData]) \n\t" 2450ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 12(%[FData]) \n\t" 2451ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2452ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2453ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2454ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2455ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 16(%[FData]) \n\t" 2456ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 20(%[FData]) \n\t" 2457ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2458ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2459ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2460ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2461ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 24(%[FData]) \n\t" 2462ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 28(%[FData]) \n\t" 2463ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2464ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2465ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2466ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2467ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 32(%[FData]) \n\t" 2468ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 36(%[FData]) \n\t" 2469ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2470ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2471ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2472ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2473ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 40(%[FData]) \n\t" 2474ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 44(%[FData]) \n\t" 2475ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2476ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2477ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2478ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2479ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 48(%[FData]) \n\t" 2480ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 52(%[FData]) \n\t" 2481ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2482ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2483ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2484ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2485ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 56(%[FData]) \n\t" 2486ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 60(%[FData]) \n\t" 2487ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2488ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2489ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2490ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2491ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 64(%[FData]) \n\t" 2492ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 68(%[FData]) \n\t" 2493ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2494ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2495ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2496ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2497ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 72(%[FData]) \n\t" 2498ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 76(%[FData]) \n\t" 2499ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2500ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2501ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2502ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2503ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 80(%[FData]) \n\t" 2504ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 84(%[FData]) \n\t" 2505ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2506ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2507ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2508ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2509ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 88(%[FData]) \n\t" 2510ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 92(%[FData]) \n\t" 2511ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2512ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2513ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2514ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2515ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 96(%[FData]) \n\t" 2516ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 100(%[FData]) \n\t" 2517ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2518ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2) 2519ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [FData] "r" (FData), [src_ptr] "r" (src_ptr), 2520ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_pixels_per_line] "r" (src_pixels_per_line) 2521ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 2522ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2523ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2524ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* filter verticaly... */ 2525ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_second_pass_8(FData + 16, dst_ptr, dst_pitch, 8, 8, yoffset); 2526ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2527ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2528ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* if (yoffsset == 0) vp8_filter_block2d_first_pass save data to dst_ptr */ 2529ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 2530ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2531ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (xoffset) 2532ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_first_pass_8_all(src_ptr, dst_ptr, src_pixels_per_line, 2533ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 8, xoffset, dst_pitch); 2534ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2535ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 2536ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2537ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* copy from src buffer to dst buffer */ 2538ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 2539ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2540ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2541ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 0(%[dst_ptr]) \n\t" 2542ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 4(%[dst_ptr]) \n\t" 2543ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2544ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2545ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2546ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2547ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 8(%[dst_ptr]) \n\t" 2548ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 12(%[dst_ptr]) \n\t" 2549ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2550ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2551ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2552ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2553ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 16(%[dst_ptr]) \n\t" 2554ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 20(%[dst_ptr]) \n\t" 2555ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2556ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2557ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2558ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2559ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 24(%[dst_ptr]) \n\t" 2560ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 28(%[dst_ptr]) \n\t" 2561ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2562ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2563ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2564ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2565ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 32(%[dst_ptr]) \n\t" 2566ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 36(%[dst_ptr]) \n\t" 2567ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2568ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2569ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2570ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2571ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 40(%[dst_ptr]) \n\t" 2572ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 44(%[dst_ptr]) \n\t" 2573ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2574ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2575ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2576ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2577ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 48(%[dst_ptr]) \n\t" 2578ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 52(%[dst_ptr]) \n\t" 2579ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2580ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2581ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2582ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2583ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 56(%[dst_ptr]) \n\t" 2584ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 60(%[dst_ptr]) \n\t" 2585ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2586ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2) 2587ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [dst_ptr] "r" (dst_ptr), [src_ptr] "r" (src_ptr), 2588ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_pixels_per_line] "r" (src_pixels_per_line) 2589ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 2590ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2591ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2592ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 2593ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2594ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2595ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_sixtap_predict8x4_dspr2 2596ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org( 2597ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT src_ptr, 2598ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int src_pixels_per_line, 2599ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int xoffset, 2600ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int yoffset, 2601ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT dst_ptr, 2602ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int dst_pitch 2603ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) 2604ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 2605ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char FData[9 * 8]; /* Temp data bufffer used in filtering */ 2606ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int pos, Temp1, Temp2; 2607ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2608ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pos = 16; 2609ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2610ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* bit positon for extract from acc */ 2611ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 2612ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "wrdsp %[pos], 1 \n\t" 2613ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : 2614ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [pos] "r" (pos) 2615ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 2616ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2617ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (yoffset) 2618ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2619ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2620ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr = src_ptr - (2 * src_pixels_per_line); 2621ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2622ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (xoffset) 2623ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* filter 1-D horizontally... */ 2624ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_first_pass_8_all(src_ptr, FData, src_pixels_per_line, 2625ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 9, xoffset, 8); 2626ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2627ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 2628ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2629ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* prefetch src_ptr data to cache memory */ 2630ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org prefetch_load(src_ptr + 2 * src_pixels_per_line); 2631ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2632ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 2633ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2634ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2635ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 0(%[FData]) \n\t" 2636ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 4(%[FData]) \n\t" 2637ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2638ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2639ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2640ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2641ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 8(%[FData]) \n\t" 2642ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 12(%[FData]) \n\t" 2643ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2644ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2645ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2646ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2647ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 16(%[FData]) \n\t" 2648ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 20(%[FData]) \n\t" 2649ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2650ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2651ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2652ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2653ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 24(%[FData]) \n\t" 2654ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 28(%[FData]) \n\t" 2655ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2656ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2657ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2658ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2659ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 32(%[FData]) \n\t" 2660ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 36(%[FData]) \n\t" 2661ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2662ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2663ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2664ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2665ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 40(%[FData]) \n\t" 2666ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 44(%[FData]) \n\t" 2667ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2668ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2669ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2670ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2671ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 48(%[FData]) \n\t" 2672ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 52(%[FData]) \n\t" 2673ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2674ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2675ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2676ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2677ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 56(%[FData]) \n\t" 2678ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 60(%[FData]) \n\t" 2679ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2680ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2681ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2682ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2683ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 64(%[FData]) \n\t" 2684ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 68(%[FData]) \n\t" 2685ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2686ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2) 2687ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [FData] "r" (FData), [src_ptr] "r" (src_ptr), 2688ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_pixels_per_line] "r" (src_pixels_per_line) 2689ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 2690ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2691ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2692ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* filter verticaly... */ 2693ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_second_pass_8(FData + 16, dst_ptr, dst_pitch, 4, 8, yoffset); 2694ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2695ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2696ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* if (yoffsset == 0) vp8_filter_block2d_first_pass save data to dst_ptr */ 2697ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 2698ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2699ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (xoffset) 2700ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_first_pass_8_all(src_ptr, dst_ptr, src_pixels_per_line, 2701ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 4, xoffset, dst_pitch); 2702ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2703ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 2704ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2705ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* copy from src buffer to dst buffer */ 2706ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 2707ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2708ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2709ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 0(%[dst_ptr]) \n\t" 2710ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 4(%[dst_ptr]) \n\t" 2711ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2712ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2713ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2714ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2715ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 8(%[dst_ptr]) \n\t" 2716ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 12(%[dst_ptr]) \n\t" 2717ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2718ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2719ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2720ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2721ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 16(%[dst_ptr]) \n\t" 2722ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 20(%[dst_ptr]) \n\t" 2723ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "addu %[src_ptr], %[src_ptr], %[src_pixels_per_line] \n\t" 2724ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2725ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp1], 0(%[src_ptr]) \n\t" 2726ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "ulw %[Temp2], 4(%[src_ptr]) \n\t" 2727ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp1], 24(%[dst_ptr]) \n\t" 2728ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "sw %[Temp2], 28(%[dst_ptr]) \n\t" 2729ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2730ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [Temp1] "=&r" (Temp1), [Temp2] "=&r" (Temp2) 2731ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [dst_ptr] "r" (dst_ptr), [src_ptr] "r" (src_ptr), 2732ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [src_pixels_per_line] "r" (src_pixels_per_line) 2733ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 2734ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2735ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2736ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 2737ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2738ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2739ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vp8_sixtap_predict16x16_dspr2 2740ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org( 2741ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT src_ptr, 2742ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int src_pixels_per_line, 2743ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int xoffset, 2744ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int yoffset, 2745ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *RESTRICT dst_ptr, 2746ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int dst_pitch 2747ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) 2748ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org{ 2749ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org const unsigned short *VFilter; 2750ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char FData[21 * 16]; /* Temp data bufffer used in filtering */ 2751ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int pos; 2752ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2753ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org VFilter = sub_pel_filterss[yoffset]; 2754ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2755ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pos = 16; 2756ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2757ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* bit positon for extract from acc */ 2758ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm__ __volatile__ ( 2759ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org "wrdsp %[pos], 1 \n\t" 2760ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : 2761ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org : [pos] "r" (pos) 2762ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org ); 2763ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2764ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (yoffset) 2765ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2766ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2767ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src_ptr = src_ptr - (2 * src_pixels_per_line); 2768ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2769ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org switch (xoffset) 2770ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2771ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* filter 1-D horizontally... */ 2772ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 2: 2773ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 4: 2774ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 6: 2775ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 6 tap filter */ 2776ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_first_pass16_6tap(src_ptr, FData, src_pixels_per_line, 2777ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 21, xoffset, 16); 2778ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org break; 2779ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2780ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 0: 2781ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* only copy buffer */ 2782ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_first_pass16_0(src_ptr, FData, src_pixels_per_line); 2783ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org break; 2784ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2785ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 1: 2786ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 3: 2787ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 5: 2788ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 7: 2789ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 4 tap filter */ 2790ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_first_pass16_4tap(src_ptr, FData, src_pixels_per_line, 16, 2791ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 21, xoffset, yoffset, dst_ptr, dst_pitch); 2792ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org break; 2793ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2794ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2795ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* filter verticaly... */ 2796ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_second_pass161(FData + 32, dst_ptr, dst_pitch, VFilter); 2797ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2798ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org else 2799ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2800ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* if (yoffsset == 0) vp8_filter_block2d_first_pass save data to dst_ptr */ 2801ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org switch (xoffset) 2802ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 2803ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 2: 2804ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 4: 2805ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 6: 2806ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 6 tap filter */ 2807ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_first_pass16_6tap(src_ptr, dst_ptr, src_pixels_per_line, 2808ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 16, xoffset, dst_pitch); 2809ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org break; 2810ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2811ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 1: 2812ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 3: 2813ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 5: 2814ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org case 7: 2815ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 4 tap filter */ 2816ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_filter_block2d_first_pass16_4tap(src_ptr, dst_ptr, src_pixels_per_line, 16, 2817ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 21, xoffset, yoffset, dst_ptr, dst_pitch); 2818ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org break; 2819ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2820ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 2821ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org} 2822ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 2823ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#endif 2824