1 ;******************************************************************************
2 ;* SIMD-optimized HuffYUV functions
3 ;* Copyright (c) 2008 Loren Merritt
5 ;* This file is part of Libav.
7 ;* Libav is free software; you can redistribute it and/or
8 ;* modify it under the terms of the GNU Lesser General Public
9 ;* License as published by the Free Software Foundation; either
10 ;* version 2.1 of the License, or (at your option) any later version.
12 ;* Libav is distributed in the hope that it will be useful,
13 ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 ;* Lesser General Public License for more details.
17 ;* You should have received a copy of the GNU Lesser General Public
18 ;* License along with Libav; if not, write to the Free Software
19 ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 ;******************************************************************************
22 %include "libavutil/x86/x86util.asm"
26 pb_zzzzzzzz77777777: times 8 db -1
28 pb_zzzz3333zzzzbbbb: db -1,-1,-1,-1,3,3,3,3,-1,-1,-1,-1,11,11,11,11
29 pb_zz11zz55zz99zzdd: db -1,-1,1,1,-1,-1,5,5,-1,-1,9,9,-1,-1,13,13
33 ; void ff_add_hfyu_median_pred_mmxext(uint8_t *dst, const uint8_t *top,
34 ; const uint8_t *diff, int w,
35 ; int *left, int *left_top)
37 cglobal add_hfyu_median_pred, 6,6,0, dst, top, diff, w, left, left_top
63 paddb mm4, mm3 ; t-tl+l
68 pmaxub mm3, mm5 ; median
69 paddb mm3, mm2 ; +residual
89 movzx r2d, byte [dstq-1]
91 movzx r2d, byte [topq-1]
96 %macro ADD_HFYU_LEFT_LOOP 2 ; %1 = dst_is_aligned, %2 = src_is_aligned
126 movhps [dstq+wq+8], m0
138 ; int ff_add_hfyu_left_pred(uint8_t *dst, const uint8_t *src, int w, int left)
140 cglobal add_hfyu_left_pred, 3,3,7, dst, src, w, left
143 mova m4, [pb_zzzz3333zzzzbbbb]
144 mova m3, [pb_zz11zz55zz99zzdd]
147 ADD_HFYU_LEFT_LOOP 1, 1
150 cglobal add_hfyu_left_pred, 3,3,7, dst, src, w, left
152 mova m6, [pb_zzzzzzzz77777777]
153 mova m4, [pb_zzzz3333zzzzbbbb]
154 mova m3, [pb_zz11zz55zz99zzdd]
161 ADD_HFYU_LEFT_LOOP 1, 1
163 ADD_HFYU_LEFT_LOOP 0, 1
165 ADD_HFYU_LEFT_LOOP 0, 0