[cvs] / xvidcore / src / motion / x86_asm / sad_3dn.asm Repository:
ViewVC logotype

Diff of /xvidcore/src/motion/x86_asm/sad_3dn.asm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.4, Sun Nov 17 00:32:06 2002 UTC revision 1.5.2.2, Mon Nov 3 15:51:50 2003 UTC
# Line 1  Line 1 
1  ;/*****************************************************************************  ;/****************************************************************************
2  ; *  ; *
3  ; *  XVID MPEG-4 VIDEO CODEC  ; *  XVID MPEG-4 VIDEO CODEC
4  ; *  3dnow (*but without xmm*) sum of absolute difference  ; *  - 3DNow sad operators w/o XMM instructions -
5  ; *  ; *
6  ; *  Copyright(C) 2002 Peter Ross <pross@xvid.org>  ; *  Copyright(C) 2002 Peter ross <pross@xvid.org>
7  ; *  ; *
8  ; *  This file is part of XviD, a free MPEG-4 video encoder/decoder  ; *  This program is free software; you can redistribute it and/or modify it
 ; *  
 ; *  XviD is free software; you can redistribute it and/or modify it  
9  ; *  under the terms of the GNU General Public License as published by  ; *  under the terms of the GNU General Public License as published by
10  ; *  the Free Software Foundation; either version 2 of the License, or  ; *  the Free Software Foundation; either version 2 of the License, or
11  ; *  (at your option) any later version.  ; *  (at your option) any later version.
# Line 21  Line 19 
19  ; *  along with this program; if not, write to the Free Software  ; *  along with this program; if not, write to the Free Software
20  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21  ; *  ; *
 ; *  Under section 8 of the GNU General Public License, the copyright  
 ; *  holders of XVID explicitly forbid distribution in the following  
 ; *  countries:  
 ; *  
 ; *    - Japan  
 ; *    - United States of America  
 ; *  
 ; *  Linking XviD statically or dynamically with other modules is making a  
 ; *  combined work based on XviD.  Thus, the terms and conditions of the  
 ; *  GNU General Public License cover the whole combination.  
 ; *  
 ; *  As a special exception, the copyright holders of XviD give you  
 ; *  permission to link XviD with independent modules that communicate with  
 ; *  XviD solely through the VFW1.1 and DShow interfaces, regardless of the  
 ; *  license terms of these independent modules, and to copy and distribute  
 ; *  the resulting combined work under terms of your choice, provided that  
 ; *  every copy of the combined work is accompanied by a complete copy of  
 ; *  the source code of XviD (the version of XviD used to produce the  
 ; *  combined work), being distributed under the terms of the GNU General  
 ; *  Public License plus this exception.  An independent module is a module  
 ; *  which is not derived from or based on XviD.  
 ; *  
 ; *  Note that people who make modified versions of XviD are not obligated  
 ; *  to grant this special exception for their modified versions; it is  
 ; *  their choice whether to do so.  The GNU General Public License gives  
 ; *  permission to release a modified version without this exception; this  
 ; *  exception also makes it possible to release a modified version which  
 ; *  carries forward this exception.  
 ; *  
22  ; * $Id$  ; * $Id$
23  ; *  ; *
24  ; ****************************************************************************/  ; ***************************************************************************/
25    
26  bits 32  BITS 32
27    
28  %macro cglobal 1  %macro cglobal 1
29          %ifdef PREFIX          %ifdef PREFIX
# Line 65  Line 34 
34          %endif          %endif
35  %endmacro  %endmacro
36    
37  section .data  ;=============================================================================
38    ; Read only data
39  align 16  ;=============================================================================
 mmx_one times 4 dw 1  
   
 section .text  
   
 cglobal  sad16bi_3dn  
 cglobal  sad8bi_3dn  
40    
41  ;===========================================================================  %ifdef FORMAT_COFF
42  ;  SECTION .rodata data
43  ; uint32_t sad16bi_3dn(const uint8_t * const cur,  %else
44  ; const uint8_t * const ref1,  SECTION .rodata data align=16
45  ; const uint8_t * const ref2,  %endif
 ; const uint32_t stride);  
 ;  
 ;===========================================================================  
46    
47    ALIGN 16
48    mmx_one:
49            times 4 dw 1
50    
51    ;=============================================================================
52    ; Helper macros
53    ;=============================================================================
54  %macro SADBI_16x16_3DN 0  %macro SADBI_16x16_3DN 0
55     movq mm0, [eax] ; src     movq mm0, [eax] ; src
56     movq mm2, [eax+8]     movq mm2, [eax+8]
# Line 120  Line 87 
87     paddusw mm6,mm2     paddusw mm6,mm2
88  %endmacro  %endmacro
89    
90  align 16  %macro SADBI_8x8_3DN 0
91      movq mm0, [eax] ; src
92      movq mm2, [eax+ecx]
93    
94      movq mm1, [edx] ; ref1
95      movq mm3, [edx+ecx]
96      pavgusb mm1, [ebx] ; ref2
97      lea edx, [edx+2*ecx]
98      pavgusb mm3, [ebx+ecx]
99      lea ebx, [ebx+2*ecx]
100    
101      movq mm4, mm0
102      lea eax, [eax+2*ecx]
103      psubusb mm0, mm1
104      movq mm5, mm2
105      psubusb mm2, mm3
106    
107      psubusb mm1, mm4
108      por mm0, mm1
109      psubusb mm3, mm5
110      por mm2, mm3
111    
112      movq mm1, mm0
113      movq mm3, mm2
114    
115      punpcklbw mm0,mm7
116      punpckhbw mm1,mm7
117      punpcklbw mm2,mm7
118      punpckhbw mm3,mm7
119    
120      paddusw mm0,mm1
121      paddusw mm2,mm3
122      paddusw mm6,mm0
123      paddusw mm6,mm2
124    %endmacro
125    
126    ;=============================================================================
127    ; Code
128    ;=============================================================================
129    
130    SECTION .text
131    
132    cglobal  sad16bi_3dn
133    cglobal  sad8bi_3dn
134    
135    ;-----------------------------------------------------------------------------
136    ;
137    ; uint32_t sad16bi_3dn(const uint8_t * const cur,
138    ; const uint8_t * const ref1,
139    ; const uint8_t * const ref2,
140    ; const uint32_t stride);
141    ;
142    ;-----------------------------------------------------------------------------
143    
144    ALIGN 16
145  sad16bi_3dn:  sad16bi_3dn:
146     push ebx     push ebx
147     mov eax, [esp+4+ 4] ; Src     mov eax, [esp+4+ 4] ; Src
# Line 160  Line 181 
181    
182     ret     ret
183    
184    ;-----------------------------------------------------------------------------
   
 ;===========================================================================  
185  ;  ;
186  ; uint32_t sad8bi_3dn(const uint8_t * const cur,  ; uint32_t sad8bi_3dn(const uint8_t * const cur,
187  ; const uint8_t * const ref1,  ; const uint8_t * const ref1,
188  ; const uint8_t * const ref2,  ; const uint8_t * const ref2,
189  ; const uint32_t stride);  ; const uint32_t stride);
190  ;  ;
191  ;===========================================================================  ;-----------------------------------------------------------------------------
   
 %macro SADBI_8x8_3DN 0  
    movq mm0, [eax] ; src  
    movq mm2, [eax+ecx]  
   
    movq mm1, [edx] ; ref1  
    movq mm3, [edx+ecx]  
    pavgusb mm1, [ebx] ; ref2  
    lea edx,[edx+2*ecx]  
    pavgusb mm3, [ebx+ecx]  
    lea ebx,[ebx+2*ecx]  
   
    movq mm4, mm0  
    lea eax,[eax+2*ecx]  
    psubusb mm0, mm1  
    movq mm5, mm2  
    psubusb mm2, mm3  
   
    psubusb mm1, mm4  
    por mm0, mm1  
    psubusb mm3, mm5  
    por mm2, mm3  
   
    movq mm1,mm0  
    movq mm3,mm2  
   
    punpcklbw mm0,mm7  
    punpckhbw mm1,mm7  
    punpcklbw mm2,mm7  
    punpckhbw mm3,mm7  
   
    paddusw mm0,mm1  
    paddusw mm2,mm3  
    paddusw mm6,mm0  
    paddusw mm6,mm2  
 %endmacro  
192    
193  align 16  ALIGN 16
194  sad8bi_3dn:  sad8bi_3dn:
195     push ebx     push ebx
196     mov eax, [esp+4+ 4] ; Src     mov eax, [esp+4+ 4] ; Src

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5.2.2

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4