1 ;******************************************************************************
2 ;* SIMD-optimized HuffYUV functions
3 ;* Copyright (c) 2008 Loren Merritt
4 ;* Copyright (c) 2014 Christophe Gisquet
6 ;* This file is part of FFmpeg.
8 ;* FFmpeg is free software; you can redistribute it and/or
9 ;* modify it under the terms of the GNU Lesser General Public
10 ;* License as published by the Free Software Foundation; either
11 ;* version 2.1 of the License, or (at your option) any later version.
13 ;* FFmpeg is distributed in the hope that it will be useful,
14 ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 ;* Lesser General Public License for more details.
18 ;* You should have received a copy of the GNU Lesser General Public
19 ;* License along with FFmpeg; if not, write to the Free Software
20 ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 ;******************************************************************************
23 %include "libavutil/x86/x86util.asm"
28 %macro INT16_LOOP 2 ; %1 = a/u (aligned/unaligned), %2 = add/sub
63 mov%1 m2, [srcq+wq+mmsize]
64 mov%1 m3, [dstq+wq+mmsize]
68 mov%1 m2, [src1q+wq+mmsize]
69 mov%1 m3, [src2q+wq+mmsize]
76 mov%1 [dstq+wq+mmsize], m2
85 cglobal add_int16, 4,4,5, dst, src, mask, w, tmp
90 cglobal add_int16, 4,4,5, dst, src, mask, w, tmp
99 ; void add_hfyu_left_pred_bgr32(uint8_t *dst, const uint8_t *src,
100 ; intptr_t w, uint8_t *left)
102 cglobal add_hfyu_left_pred_bgr32, 4,4,3, dst, src, w, left
105 lea dstq, [dstq + wq]
106 lea srcq, [srcq + wq]
139 ; void add_hfyu_median_prediction_mmxext(uint8_t *dst, const uint8_t *top, const uint8_t *diff, int mask, int w, int *left, int *left_top)
141 cglobal add_hfyu_median_pred_int16, 7,7,0, dst, top, diff, mask, w, left, left_top
147 movd mm4, [left_topq]
152 psubw mm0, mm4 ; t-tl
164 psubw mm0, mm4 ; t-tl
170 paddw mm4, mm3 ; t-tl+l
176 pmaxsw mm3, mm5 ; median
177 paddw mm3, mm2 ; +residual
198 movzx r2d, word [dstq-2]
200 movzx r2d, word [topq-2]