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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1790 - (view) (download)

1 : edgomez 1382 ;/****************************************************************************
2 : suxen_drol 329 ; *
3 : edgomez 1382 ; * XVID MPEG-4 VIDEO CODEC
4 :     ; * - 3DNow sad operators w/o XMM instructions -
5 : suxen_drol 329 ; *
6 : edgomez 1382 ; * Copyright(C) 2002 Peter ross <pross@xvid.org>
7 : suxen_drol 329 ; *
8 : edgomez 1382 ; * This program is free software; you can redistribute it and/or modify it
9 :     ; * under the terms of the GNU General Public License as published by
10 :     ; * the Free Software Foundation; either version 2 of the License, or
11 :     ; * (at your option) any later version.
12 : suxen_drol 329 ; *
13 : edgomez 1382 ; * This program 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
16 :     ; * GNU General Public License for more details.
17 : suxen_drol 329 ; *
18 : edgomez 1382 ; * You should have received a copy of the GNU General Public License
19 :     ; * along with this program; if not, write to the Free Software
20 :     ; * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 : suxen_drol 329 ; *
22 : Isibaar 1790 ; * $Id: sad_3dn.asm,v 1.10 2008-08-19 09:06:48 Isibaar Exp $
23 : suxen_drol 329 ; *
24 : edgomez 1382 ; ***************************************************************************/
25 : suxen_drol 329
26 : edgomez 1382 BITS 32
27 : suxen_drol 329
28 : edgomez 1382 %macro cglobal 1
29 : suxen_drol 329 %ifdef PREFIX
30 : edgomez 1535 %ifdef MARK_FUNCS
31 : edgomez 1540 global _%1:function %1.endfunc-%1
32 :     %define %1 _%1:function %1.endfunc-%1
33 : edgomez 1535 %else
34 :     global _%1
35 :     %define %1 _%1
36 :     %endif
37 : suxen_drol 329 %else
38 : edgomez 1535 %ifdef MARK_FUNCS
39 : edgomez 1540 global %1:function %1.endfunc-%1
40 : edgomez 1535 %else
41 :     global %1
42 :     %endif
43 : suxen_drol 329 %endif
44 :     %endmacro
45 :    
46 : edgomez 1382 ;=============================================================================
47 :     ; Read only data
48 :     ;=============================================================================
49 : suxen_drol 329
50 : edgomez 1382 %ifdef FORMAT_COFF
51 : edgomez 1519 SECTION .rodata
52 : edgomez 1382 %else
53 : edgomez 1519 SECTION .rodata align=16
54 : edgomez 1382 %endif
55 : suxen_drol 329
56 : edgomez 1382 ALIGN 16
57 :     mmx_one:
58 :     times 4 dw 1
59 : suxen_drol 329
60 : edgomez 1382 ;=============================================================================
61 :     ; Helper macros
62 :     ;=============================================================================
63 :     %macro SADBI_16x16_3DN 0
64 :     movq mm0, [eax] ; src
65 :     movq mm2, [eax+8]
66 : suxen_drol 329
67 : edgomez 1382 movq mm1, [edx] ; ref1
68 :     movq mm3, [edx+8]
69 :     pavgusb mm1, [ebx] ; ref2
70 :     lea edx, [edx+ecx]
71 :     pavgusb mm3, [ebx+8]
72 :     lea ebx, [ebx+ecx]
73 : suxen_drol 329
74 : edgomez 1382 movq mm4, mm0
75 :     lea eax, [eax+ecx]
76 :     psubusb mm0, mm1
77 :     movq mm5, mm2
78 :     psubusb mm2, mm3
79 : suxen_drol 329
80 : edgomez 1382 psubusb mm1, mm4
81 :     por mm0, mm1
82 :     psubusb mm3, mm5
83 :     por mm2, mm3
84 : suxen_drol 329
85 : edgomez 1382 movq mm1, mm0
86 :     movq mm3, mm2
87 : suxen_drol 329
88 : edgomez 1382 punpcklbw mm0,mm7
89 :     punpckhbw mm1,mm7
90 :     punpcklbw mm2,mm7
91 :     punpckhbw mm3,mm7
92 : suxen_drol 329
93 : edgomez 1382 paddusw mm0,mm1
94 :     paddusw mm2,mm3
95 :     paddusw mm6,mm0
96 :     paddusw mm6,mm2
97 :     %endmacro
98 : suxen_drol 329
99 : edgomez 1382 %macro SADBI_8x8_3DN 0
100 :     movq mm0, [eax] ; src
101 :     movq mm2, [eax+ecx]
102 : suxen_drol 329
103 : edgomez 1382 movq mm1, [edx] ; ref1
104 :     movq mm3, [edx+ecx]
105 :     pavgusb mm1, [ebx] ; ref2
106 :     lea edx, [edx+2*ecx]
107 :     pavgusb mm3, [ebx+ecx]
108 :     lea ebx, [ebx+2*ecx]
109 : suxen_drol 329
110 : edgomez 1382 movq mm4, mm0
111 :     lea eax, [eax+2*ecx]
112 :     psubusb mm0, mm1
113 :     movq mm5, mm2
114 :     psubusb mm2, mm3
115 : suxen_drol 329
116 : edgomez 1382 psubusb mm1, mm4
117 :     por mm0, mm1
118 :     psubusb mm3, mm5
119 :     por mm2, mm3
120 : suxen_drol 329
121 : edgomez 1382 movq mm1, mm0
122 :     movq mm3, mm2
123 : suxen_drol 329
124 : edgomez 1382 punpcklbw mm0,mm7
125 :     punpckhbw mm1,mm7
126 :     punpcklbw mm2,mm7
127 :     punpckhbw mm3,mm7
128 : suxen_drol 329
129 : edgomez 1382 paddusw mm0,mm1
130 :     paddusw mm2,mm3
131 :     paddusw mm6,mm0
132 :     paddusw mm6,mm2
133 :     %endmacro
134 : suxen_drol 329
135 : edgomez 1382 ;=============================================================================
136 :     ; Code
137 :     ;=============================================================================
138 : suxen_drol 329
139 : edgomez 1382 SECTION .text
140 : suxen_drol 329
141 : edgomez 1382 cglobal sad16bi_3dn
142 :     cglobal sad8bi_3dn
143 : suxen_drol 329
144 : edgomez 1382 ;-----------------------------------------------------------------------------
145 :     ;
146 :     ; uint32_t sad16bi_3dn(const uint8_t * const cur,
147 :     ; const uint8_t * const ref1,
148 :     ; const uint8_t * const ref2,
149 :     ; const uint32_t stride);
150 :     ;
151 :     ;-----------------------------------------------------------------------------
152 : suxen_drol 329
153 : edgomez 1382 ALIGN 16
154 :     sad16bi_3dn:
155 :     push ebx
156 :     mov eax, [esp+4+ 4] ; Src
157 :     mov edx, [esp+4+ 8] ; Ref1
158 :     mov ebx, [esp+4+12] ; Ref2
159 :     mov ecx, [esp+4+16] ; Stride
160 : suxen_drol 329
161 : edgomez 1382 pxor mm6, mm6 ; accum2
162 :     pxor mm7, mm7
163 :     .Loop
164 :     SADBI_16x16_3DN
165 :     SADBI_16x16_3DN
166 :     SADBI_16x16_3DN
167 :     SADBI_16x16_3DN
168 :     SADBI_16x16_3DN
169 :     SADBI_16x16_3DN
170 :     SADBI_16x16_3DN
171 :     SADBI_16x16_3DN
172 : suxen_drol 329
173 : edgomez 1382 SADBI_16x16_3DN
174 :     SADBI_16x16_3DN
175 :     SADBI_16x16_3DN
176 :     SADBI_16x16_3DN
177 :     SADBI_16x16_3DN
178 :     SADBI_16x16_3DN
179 :     SADBI_16x16_3DN
180 :     SADBI_16x16_3DN
181 : suxen_drol 329
182 : edgomez 1382 pmaddwd mm6, [mmx_one] ; collapse
183 :     movq mm7, mm6
184 :     psrlq mm7, 32
185 :     paddd mm6, mm7
186 : suxen_drol 329
187 : edgomez 1382 movd eax, mm6
188 : suxen_drol 329
189 : edgomez 1382 pop ebx
190 : suxen_drol 329
191 : edgomez 1382 ret
192 : edgomez 1540 .endfunc
193 : suxen_drol 329
194 : edgomez 1382 ;-----------------------------------------------------------------------------
195 :     ;
196 :     ; uint32_t sad8bi_3dn(const uint8_t * const cur,
197 :     ; const uint8_t * const ref1,
198 :     ; const uint8_t * const ref2,
199 :     ; const uint32_t stride);
200 :     ;
201 :     ;-----------------------------------------------------------------------------
202 : suxen_drol 329
203 : edgomez 1382 ALIGN 16
204 :     sad8bi_3dn:
205 :     push ebx
206 :     mov eax, [esp+4+ 4] ; Src
207 :     mov edx, [esp+4+ 8] ; Ref1
208 :     mov ebx, [esp+4+12] ; Ref2
209 :     mov ecx, [esp+4+16] ; Stride
210 : suxen_drol 329
211 : edgomez 1382 pxor mm6, mm6 ; accum2
212 :     pxor mm7, mm7
213 :     .Loop
214 :     SADBI_8x8_3DN
215 :     SADBI_8x8_3DN
216 :     SADBI_8x8_3DN
217 :     SADBI_8x8_3DN
218 : suxen_drol 329
219 : edgomez 1382 pmaddwd mm6, [mmx_one] ; collapse
220 :     movq mm7, mm6
221 :     psrlq mm7, 32
222 :     paddd mm6, mm7
223 : suxen_drol 329
224 : edgomez 1382 movd eax, mm6
225 : suxen_drol 329
226 : edgomez 1382 pop ebx
227 : suxen_drol 329
228 : edgomez 1382 ret
229 : edgomez 1540 .endfunc
230 :    
231 : Isibaar 1790
232 :     %ifidn __OUTPUT_FORMAT__,elf
233 :     section ".note.GNU-stack" noalloc noexec nowrite progbits
234 :     %endif
235 :    

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