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

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

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

revision 436, Sat Sep 7 09:08:38 2002 UTC revision 1793, Tue Nov 11 20:46:24 2008 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 program is an implementation of a part of one or more MPEG-4  ; *  This program is free software; you can redistribute it and/or modify it
9  ; *  Video tools as specified in ISO/IEC 14496-2 standard.  Those intending  ; *  under the terms of the GNU General Public License as published by
 ; *  to use this software module in hardware or software products are  
 ; *  advised that its use may infringe existing patents or copyrights, and  
 ; *  any such use would be at such party's own risk.  The original  
 ; *  developer of this software module and his/her company, and subsequent  
 ; *  editors and their companies, will have no liability for use of this  
 ; *  software or modifications or derivatives thereof.  
 ; *  
 ; *  This program is free software; you can redistribute it and/or modify  
 ; *  it 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.
12  ; *  ; *
# Line 28  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  ; *  ; *
22  ; ****************************************************************************/  ; * $Id: sad_3dn.asm,v 1.11 2008-11-11 20:46:24 Isibaar Exp $
23    ; *
24    ; ***************************************************************************/
25    
26  bits 32  BITS 32
27    
28  %macro cglobal 1  %macro cglobal 1
29          %ifdef PREFIX          %ifdef PREFIX
30                    %ifdef MARK_FUNCS
31                            global _%1:function %1.endfunc-%1
32                            %define %1 _%1:function %1.endfunc-%1
33                            %define ENDFUNC .endfunc
34                    %else
35                  global _%1                  global _%1
36                  %define %1 _%1                  %define %1 _%1
37                            %define ENDFUNC
38                    %endif
39            %else
40                    %ifdef MARK_FUNCS
41                            global %1:function %1.endfunc-%1
42                            %define ENDFUNC .endfunc
43          %else          %else
44                  global %1                  global %1
45                            %define ENDFUNC
46                    %endif
47          %endif          %endif
48  %endmacro  %endmacro
49    
50  section .data  ;=============================================================================
51    ; Read only data
52  align 16  ;=============================================================================
 mmx_one times 4 dw 1  
53    
54  section .text  %ifdef FORMAT_COFF
55    SECTION .rodata
56  cglobal  sad16bi_3dn  %else
57  cglobal  sad8bi_3dn  SECTION .rodata align=16
58    %endif
 ;===========================================================================  
 ;  
 ; uint32_t sad16bi_3dn(const uint8_t * const cur,  
 ; const uint8_t * const ref1,  
 ; const uint8_t * const ref2,  
 ; const uint32_t stride);  
 ;  
 ;===========================================================================  
59    
60    ALIGN 16
61    mmx_one:
62            times 4 dw 1
63    
64    ;=============================================================================
65    ; Helper macros
66    ;=============================================================================
67  %macro SADBI_16x16_3DN 0  %macro SADBI_16x16_3DN 0
68     movq mm0, [eax] ; src     movq mm0, [eax] ; src
69     movq mm2, [eax+8]     movq mm2, [eax+8]
# Line 96  Line 100 
100     paddusw mm6,mm2     paddusw mm6,mm2
101  %endmacro  %endmacro
102    
103  align 16  %macro SADBI_8x8_3DN 0
104      movq mm0, [eax] ; src
105      movq mm2, [eax+ecx]
106    
107      movq mm1, [edx] ; ref1
108      movq mm3, [edx+ecx]
109      pavgusb mm1, [ebx] ; ref2
110      lea edx, [edx+2*ecx]
111      pavgusb mm3, [ebx+ecx]
112      lea ebx, [ebx+2*ecx]
113    
114      movq mm4, mm0
115      lea eax, [eax+2*ecx]
116      psubusb mm0, mm1
117      movq mm5, mm2
118      psubusb mm2, mm3
119    
120      psubusb mm1, mm4
121      por mm0, mm1
122      psubusb mm3, mm5
123      por mm2, mm3
124    
125      movq mm1, mm0
126      movq mm3, mm2
127    
128      punpcklbw mm0,mm7
129      punpckhbw mm1,mm7
130      punpcklbw mm2,mm7
131      punpckhbw mm3,mm7
132    
133      paddusw mm0,mm1
134      paddusw mm2,mm3
135      paddusw mm6,mm0
136      paddusw mm6,mm2
137    %endmacro
138    
139    ;=============================================================================
140    ; Code
141    ;=============================================================================
142    
143    SECTION .text
144    
145    cglobal  sad16bi_3dn
146    cglobal  sad8bi_3dn
147    
148    ;-----------------------------------------------------------------------------
149    ;
150    ; uint32_t sad16bi_3dn(const uint8_t * const cur,
151    ; const uint8_t * const ref1,
152    ; const uint8_t * const ref2,
153    ; const uint32_t stride);
154    ;
155    ;-----------------------------------------------------------------------------
156    
157    ALIGN 16
158  sad16bi_3dn:  sad16bi_3dn:
159     push ebx     push ebx
160     mov eax, [esp+4+ 4] ; Src     mov eax, [esp+4+ 4] ; Src
# Line 106  Line 164 
164    
165     pxor mm6, mm6 ; accum2     pxor mm6, mm6 ; accum2
166  pxor mm7, mm7  pxor mm7, mm7
167  .Loop  .Loop:
168     SADBI_16x16_3DN     SADBI_16x16_3DN
169     SADBI_16x16_3DN     SADBI_16x16_3DN
170     SADBI_16x16_3DN     SADBI_16x16_3DN
# Line 135  Line 193 
193     pop ebx     pop ebx
194    
195     ret     ret
196    ENDFUNC
197    
198    ;-----------------------------------------------------------------------------
   
 ;===========================================================================  
199  ;  ;
200  ; uint32_t sad8bi_3dn(const uint8_t * const cur,  ; uint32_t sad8bi_3dn(const uint8_t * const cur,
201  ; const uint8_t * const ref1,  ; const uint8_t * const ref1,
202  ; const uint8_t * const ref2,  ; const uint8_t * const ref2,
203  ; const uint32_t stride);  ; const uint32_t stride);
204  ;  ;
205  ;===========================================================================  ;-----------------------------------------------------------------------------
   
 %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  
206    
207     movq mm1,mm0  ALIGN 16
    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  
   
 align 16  
208  sad8bi_3dn:  sad8bi_3dn:
209     push ebx     push ebx
210     mov eax, [esp+4+ 4] ; Src     mov eax, [esp+4+ 4] ; Src
# Line 193  Line 214 
214    
215     pxor mm6, mm6 ; accum2     pxor mm6, mm6 ; accum2
216  pxor mm7, mm7  pxor mm7, mm7
217  .Loop  .Loop:
218     SADBI_8x8_3DN     SADBI_8x8_3DN
219     SADBI_8x8_3DN     SADBI_8x8_3DN
220     SADBI_8x8_3DN     SADBI_8x8_3DN
# Line 209  Line 230 
230     pop ebx     pop ebx
231    
232     ret     ret
233    ENDFUNC
234    
235    
236    %ifidn __OUTPUT_FORMAT__,elf
237    section ".note.GNU-stack" noalloc noexec nowrite progbits
238    %endif
239    

Legend:
Removed from v.436  
changed lines
  Added in v.1793

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