[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 1519 - (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 : edgomez 1519 ; * $Id: sad_3dn.asm,v 1.7 2004-07-24 11:46:08 edgomez 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 1382 global _%1
31 : suxen_drol 329 %define %1 _%1
32 :     %else
33 :     global %1
34 :     %endif
35 :     %endmacro
36 :    
37 : edgomez 1382 ;=============================================================================
38 :     ; Read only data
39 :     ;=============================================================================
40 : suxen_drol 329
41 : edgomez 1382 %ifdef FORMAT_COFF
42 : edgomez 1519 SECTION .rodata
43 : edgomez 1382 %else
44 : edgomez 1519 SECTION .rodata align=16
45 : edgomez 1382 %endif
46 : suxen_drol 329
47 : edgomez 1382 ALIGN 16
48 :     mmx_one:
49 :     times 4 dw 1
50 : suxen_drol 329
51 : edgomez 1382 ;=============================================================================
52 :     ; Helper macros
53 :     ;=============================================================================
54 :     %macro SADBI_16x16_3DN 0
55 :     movq mm0, [eax] ; src
56 :     movq mm2, [eax+8]
57 : suxen_drol 329
58 : edgomez 1382 movq mm1, [edx] ; ref1
59 :     movq mm3, [edx+8]
60 :     pavgusb mm1, [ebx] ; ref2
61 :     lea edx, [edx+ecx]
62 :     pavgusb mm3, [ebx+8]
63 :     lea ebx, [ebx+ecx]
64 : suxen_drol 329
65 : edgomez 1382 movq mm4, mm0
66 :     lea eax, [eax+ecx]
67 :     psubusb mm0, mm1
68 :     movq mm5, mm2
69 :     psubusb mm2, mm3
70 : suxen_drol 329
71 : edgomez 1382 psubusb mm1, mm4
72 :     por mm0, mm1
73 :     psubusb mm3, mm5
74 :     por mm2, mm3
75 : suxen_drol 329
76 : edgomez 1382 movq mm1, mm0
77 :     movq mm3, mm2
78 : suxen_drol 329
79 : edgomez 1382 punpcklbw mm0,mm7
80 :     punpckhbw mm1,mm7
81 :     punpcklbw mm2,mm7
82 :     punpckhbw mm3,mm7
83 : suxen_drol 329
84 : edgomez 1382 paddusw mm0,mm1
85 :     paddusw mm2,mm3
86 :     paddusw mm6,mm0
87 :     paddusw mm6,mm2
88 :     %endmacro
89 : suxen_drol 329
90 : edgomez 1382 %macro SADBI_8x8_3DN 0
91 :     movq mm0, [eax] ; src
92 :     movq mm2, [eax+ecx]
93 : suxen_drol 329
94 : edgomez 1382 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 : suxen_drol 329
101 : edgomez 1382 movq mm4, mm0
102 :     lea eax, [eax+2*ecx]
103 :     psubusb mm0, mm1
104 :     movq mm5, mm2
105 :     psubusb mm2, mm3
106 : suxen_drol 329
107 : edgomez 1382 psubusb mm1, mm4
108 :     por mm0, mm1
109 :     psubusb mm3, mm5
110 :     por mm2, mm3
111 : suxen_drol 329
112 : edgomez 1382 movq mm1, mm0
113 :     movq mm3, mm2
114 : suxen_drol 329
115 : edgomez 1382 punpcklbw mm0,mm7
116 :     punpckhbw mm1,mm7
117 :     punpcklbw mm2,mm7
118 :     punpckhbw mm3,mm7
119 : suxen_drol 329
120 : edgomez 1382 paddusw mm0,mm1
121 :     paddusw mm2,mm3
122 :     paddusw mm6,mm0
123 :     paddusw mm6,mm2
124 :     %endmacro
125 : suxen_drol 329
126 : edgomez 1382 ;=============================================================================
127 :     ; Code
128 :     ;=============================================================================
129 : suxen_drol 329
130 : edgomez 1382 SECTION .text
131 : suxen_drol 329
132 : edgomez 1382 cglobal sad16bi_3dn
133 :     cglobal sad8bi_3dn
134 : suxen_drol 329
135 : edgomez 1382 ;-----------------------------------------------------------------------------
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 : suxen_drol 329
144 : edgomez 1382 ALIGN 16
145 :     sad16bi_3dn:
146 :     push ebx
147 :     mov eax, [esp+4+ 4] ; Src
148 :     mov edx, [esp+4+ 8] ; Ref1
149 :     mov ebx, [esp+4+12] ; Ref2
150 :     mov ecx, [esp+4+16] ; Stride
151 : suxen_drol 329
152 : edgomez 1382 pxor mm6, mm6 ; accum2
153 :     pxor mm7, mm7
154 :     .Loop
155 :     SADBI_16x16_3DN
156 :     SADBI_16x16_3DN
157 :     SADBI_16x16_3DN
158 :     SADBI_16x16_3DN
159 :     SADBI_16x16_3DN
160 :     SADBI_16x16_3DN
161 :     SADBI_16x16_3DN
162 :     SADBI_16x16_3DN
163 : suxen_drol 329
164 : edgomez 1382 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 pmaddwd mm6, [mmx_one] ; collapse
174 :     movq mm7, mm6
175 :     psrlq mm7, 32
176 :     paddd mm6, mm7
177 : suxen_drol 329
178 : edgomez 1382 movd eax, mm6
179 : suxen_drol 329
180 : edgomez 1382 pop ebx
181 : suxen_drol 329
182 : edgomez 1382 ret
183 : suxen_drol 329
184 : edgomez 1382 ;-----------------------------------------------------------------------------
185 :     ;
186 :     ; uint32_t sad8bi_3dn(const uint8_t * const cur,
187 :     ; const uint8_t * const ref1,
188 :     ; const uint8_t * const ref2,
189 :     ; const uint32_t stride);
190 :     ;
191 :     ;-----------------------------------------------------------------------------
192 : suxen_drol 329
193 : edgomez 1382 ALIGN 16
194 :     sad8bi_3dn:
195 :     push ebx
196 :     mov eax, [esp+4+ 4] ; Src
197 :     mov edx, [esp+4+ 8] ; Ref1
198 :     mov ebx, [esp+4+12] ; Ref2
199 :     mov ecx, [esp+4+16] ; Stride
200 : suxen_drol 329
201 : edgomez 1382 pxor mm6, mm6 ; accum2
202 :     pxor mm7, mm7
203 :     .Loop
204 :     SADBI_8x8_3DN
205 :     SADBI_8x8_3DN
206 :     SADBI_8x8_3DN
207 :     SADBI_8x8_3DN
208 : suxen_drol 329
209 : edgomez 1382 pmaddwd mm6, [mmx_one] ; collapse
210 :     movq mm7, mm6
211 :     psrlq mm7, 32
212 :     paddd mm6, mm7
213 : suxen_drol 329
214 : edgomez 1382 movd eax, mm6
215 : suxen_drol 329
216 : edgomez 1382 pop ebx
217 : suxen_drol 329
218 : edgomez 1382 ret

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