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