1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/*
2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *
4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  Use of this source code is governed by a BSD-style license
5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  that can be found in the LICENSE file in the root of the source
6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  tree. An additional intellectual property rights grant can be found
7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  in the file PATENTS.  All contributing project authors may
8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  be found in the AUTHORS file in the root of the source tree.
9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */
10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
12474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vpx_config.h"
13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vp8/common/loopfilter.h"
14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
155c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#define prototype_loopfilter(sym) \
165c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    void sym(unsigned char *src, int pitch, const unsigned char *blimit,\
175c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org             const unsigned char *limit, const unsigned char *thresh, int count)
185c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
195c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#define prototype_loopfilter_nc(sym) \
205c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    void sym(unsigned char *src, int pitch, const unsigned char *blimit,\
215c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org             const unsigned char *limit, const unsigned char *thresh)
225c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
235c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#define prototype_simple_loopfilter(sym) \
245c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    void sym(unsigned char *y, int ystride, const unsigned char *blimit)
255c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgprototype_loopfilter(vp8_mbloop_filter_vertical_edge_mmx);
27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgprototype_loopfilter(vp8_mbloop_filter_horizontal_edge_mmx);
28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgprototype_loopfilter(vp8_loop_filter_vertical_edge_mmx);
29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgprototype_loopfilter(vp8_loop_filter_horizontal_edge_mmx);
305c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgprototype_simple_loopfilter(vp8_loop_filter_simple_horizontal_edge_mmx);
315c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgprototype_simple_loopfilter(vp8_loop_filter_simple_vertical_edge_mmx);
32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
33167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#if HAVE_SSE2 && ARCH_X86_64
34167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgprototype_loopfilter(vp8_loop_filter_bv_y_sse2);
35167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgprototype_loopfilter(vp8_loop_filter_bh_y_sse2);
36167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#else
375c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgprototype_loopfilter_nc(vp8_loop_filter_vertical_edge_sse2);
385c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgprototype_loopfilter_nc(vp8_loop_filter_horizontal_edge_sse2);
39167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif
405c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgprototype_loopfilter_nc(vp8_mbloop_filter_vertical_edge_sse2);
415c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgprototype_loopfilter_nc(vp8_mbloop_filter_horizontal_edge_sse2);
42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgextern loop_filter_uvfunction vp8_loop_filter_horizontal_edge_uv_sse2;
44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgextern loop_filter_uvfunction vp8_loop_filter_vertical_edge_uv_sse2;
45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgextern loop_filter_uvfunction vp8_mbloop_filter_horizontal_edge_uv_sse2;
46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgextern loop_filter_uvfunction vp8_mbloop_filter_vertical_edge_uv_sse2;
47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if HAVE_MMX
49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* Horizontal MB filtering */
50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_mbh_mmx(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                             int y_stride, int uv_stride, loop_filter_info *lfi)
52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_mbloop_filter_horizontal_edge_mmx(y_ptr, y_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 2);
54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if (u_ptr)
56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vp8_mbloop_filter_horizontal_edge_mmx(u_ptr, uv_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 1);
57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if (v_ptr)
59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vp8_mbloop_filter_horizontal_edge_mmx(v_ptr, uv_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 1);
60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* Vertical MB Filtering */
64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_mbv_mmx(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                             int y_stride, int uv_stride, loop_filter_info *lfi)
66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_mbloop_filter_vertical_edge_mmx(y_ptr, y_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 2);
68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if (u_ptr)
70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vp8_mbloop_filter_vertical_edge_mmx(u_ptr, uv_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 1);
71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if (v_ptr)
73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vp8_mbloop_filter_vertical_edge_mmx(v_ptr, uv_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 1);
74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* Horizontal B Filtering */
78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_bh_mmx(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                            int y_stride, int uv_stride, loop_filter_info *lfi)
80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_horizontal_edge_mmx(y_ptr + 4 * y_stride, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2);
82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_horizontal_edge_mmx(y_ptr + 8 * y_stride, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2);
83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_horizontal_edge_mmx(y_ptr + 12 * y_stride, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2);
84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if (u_ptr)
86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vp8_loop_filter_horizontal_edge_mmx(u_ptr + 4 * uv_stride, uv_stride, lfi->blim, lfi->lim, lfi->hev_thr, 1);
87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if (v_ptr)
89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vp8_loop_filter_horizontal_edge_mmx(v_ptr + 4 * uv_stride, uv_stride, lfi->blim, lfi->lim, lfi->hev_thr, 1);
90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_bhs_mmx(unsigned char *y_ptr, int y_stride, const unsigned char *blimit)
94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_simple_horizontal_edge_mmx(y_ptr + 4 * y_stride, y_stride, blimit);
96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_simple_horizontal_edge_mmx(y_ptr + 8 * y_stride, y_stride, blimit);
97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_simple_horizontal_edge_mmx(y_ptr + 12 * y_stride, y_stride, blimit);
98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* Vertical B Filtering */
102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_bv_mmx(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                            int y_stride, int uv_stride, loop_filter_info *lfi)
104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_vertical_edge_mmx(y_ptr + 4, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2);
106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_vertical_edge_mmx(y_ptr + 8, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2);
107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_vertical_edge_mmx(y_ptr + 12, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2);
108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if (u_ptr)
110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vp8_loop_filter_vertical_edge_mmx(u_ptr + 4, uv_stride, lfi->blim, lfi->lim, lfi->hev_thr, 1);
111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
112474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if (v_ptr)
113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vp8_loop_filter_vertical_edge_mmx(v_ptr + 4, uv_stride, lfi->blim, lfi->lim, lfi->hev_thr, 1);
114474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
115474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
117474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_bvs_mmx(unsigned char *y_ptr, int y_stride, const unsigned char *blimit)
118474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
119474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_simple_vertical_edge_mmx(y_ptr + 4, y_stride, blimit);
120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_simple_vertical_edge_mmx(y_ptr + 8, y_stride, blimit);
121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_simple_vertical_edge_mmx(y_ptr + 12, y_stride, blimit);
122474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif
124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
126474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* Horizontal MB filtering */
127474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if HAVE_SSE2
128474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_mbh_sse2(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
129474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                              int y_stride, int uv_stride, loop_filter_info *lfi)
130474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
1315c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    vp8_mbloop_filter_horizontal_edge_sse2(y_ptr, y_stride, lfi->mblim, lfi->lim, lfi->hev_thr);
132474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
133474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if (u_ptr)
134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vp8_mbloop_filter_horizontal_edge_uv_sse2(u_ptr, uv_stride, lfi->mblim, lfi->lim, lfi->hev_thr, v_ptr);
135474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
138474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* Vertical MB Filtering */
139474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_mbv_sse2(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
140474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                              int y_stride, int uv_stride, loop_filter_info *lfi)
141474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
1425c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    vp8_mbloop_filter_vertical_edge_sse2(y_ptr, y_stride, lfi->mblim, lfi->lim, lfi->hev_thr);
143474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if (u_ptr)
145474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vp8_mbloop_filter_vertical_edge_uv_sse2(u_ptr, uv_stride, lfi->mblim, lfi->lim, lfi->hev_thr, v_ptr);
146474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
147474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
148474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
149474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* Horizontal B Filtering */
150474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_bh_sse2(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
151474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                             int y_stride, int uv_stride, loop_filter_info *lfi)
152474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
153167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#if ARCH_X86_64
154167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    vp8_loop_filter_bh_y_sse2(y_ptr, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2);
155167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#else
1565c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    vp8_loop_filter_horizontal_edge_sse2(y_ptr + 4 * y_stride, y_stride, lfi->blim, lfi->lim, lfi->hev_thr);
1575c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    vp8_loop_filter_horizontal_edge_sse2(y_ptr + 8 * y_stride, y_stride, lfi->blim, lfi->lim, lfi->hev_thr);
1585c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    vp8_loop_filter_horizontal_edge_sse2(y_ptr + 12 * y_stride, y_stride, lfi->blim, lfi->lim, lfi->hev_thr);
159167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif
160474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
161474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if (u_ptr)
162474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vp8_loop_filter_horizontal_edge_uv_sse2(u_ptr + 4 * uv_stride, uv_stride, lfi->blim, lfi->lim, lfi->hev_thr, v_ptr + 4 * uv_stride);
163474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
164474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
165474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
166474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_bhs_sse2(unsigned char *y_ptr, int y_stride, const unsigned char *blimit)
167474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
168474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_simple_horizontal_edge_sse2(y_ptr + 4 * y_stride, y_stride, blimit);
169474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_simple_horizontal_edge_sse2(y_ptr + 8 * y_stride, y_stride, blimit);
170474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_simple_horizontal_edge_sse2(y_ptr + 12 * y_stride, y_stride, blimit);
171474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
172474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
173474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
174474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* Vertical B Filtering */
175474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_bv_sse2(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
176474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org                             int y_stride, int uv_stride, loop_filter_info *lfi)
177474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
178167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#if ARCH_X86_64
179167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    vp8_loop_filter_bv_y_sse2(y_ptr, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2);
180167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#else
1815c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    vp8_loop_filter_vertical_edge_sse2(y_ptr + 4, y_stride, lfi->blim, lfi->lim, lfi->hev_thr);
1825c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    vp8_loop_filter_vertical_edge_sse2(y_ptr + 8, y_stride, lfi->blim, lfi->lim, lfi->hev_thr);
1835c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    vp8_loop_filter_vertical_edge_sse2(y_ptr + 12, y_stride, lfi->blim, lfi->lim, lfi->hev_thr);
184167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif
185474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
186474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    if (u_ptr)
187474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        vp8_loop_filter_vertical_edge_uv_sse2(u_ptr + 4, uv_stride, lfi->blim, lfi->lim, lfi->hev_thr, v_ptr + 4);
188474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
189474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
190474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
191474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_loop_filter_bvs_sse2(unsigned char *y_ptr, int y_stride, const unsigned char *blimit)
192474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
193474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_simple_vertical_edge_sse2(y_ptr + 4, y_stride, blimit);
194474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_simple_vertical_edge_sse2(y_ptr + 8, y_stride, blimit);
195474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vp8_loop_filter_simple_vertical_edge_sse2(y_ptr + 12, y_stride, blimit);
196474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
197474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
198474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif
199