[svn] / branches / dev-api-4 / xvidcore / src / motion / x86_asm / sad_3dn.asm Repository:
ViewVC logotype

Annotation of /branches/dev-api-4/xvidcore/src/motion/x86_asm/sad_3dn.asm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1192 - (view) (download)

1 : edgomez 1192 ;/****************************************************************************
2 : suxen_drol 329 ; *
3 : edgomez 1192 ; * XVID MPEG-4 VIDEO CODEC
4 :     ; * - 3DNow sad operators w/o XMM instructions -
5 : suxen_drol 329 ; *
6 : edgomez 1192 ; * Copyright(C) 2002 Peter ross <pross@xvid.org>
7 : suxen_drol 329 ; *
8 : edgomez 1192 ; * 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 1192 ; * 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 1192 ; * 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 1192 ; * $Id: sad_3dn.asm,v 1.5.2.1 2003-10-28 22:23:03 edgomez Exp $
23 : suxen_drol 329 ; *
24 : edgomez 1192 ; ***************************************************************************/
25 : suxen_drol 329
26 : edgomez 1192 BITS 32
27 : suxen_drol 329
28 : edgomez 1192 %macro cglobal 1
29 : suxen_drol 329 %ifdef PREFIX
30 : edgomez 1192 global _%1
31 : suxen_drol 329 %define %1 _%1
32 :     %else
33 :     global %1
34 :     %endif
35 :     %endmacro
36 :    
37 : edgomez 1192 ;=============================================================================
38 :     ; Read only data
39 :     ;=============================================================================
40 : suxen_drol 329
41 : edgomez 1192 SECTION .rodata
42 : suxen_drol 329
43 : edgomez 1192 ALIGN 16
44 :     mmx_one:
45 :     times 4 dw 1
46 : suxen_drol 329
47 : edgomez 1192 ;=============================================================================
48 :     ; Helper macros
49 :     ;=============================================================================
50 :     %macro SADBI_16x16_3DN 0
51 :     movq mm0, [eax] ; src
52 :     movq mm2, [eax+8]
53 : suxen_drol 329
54 : edgomez 1192 movq mm1, [edx] ; ref1
55 :     movq mm3, [edx+8]
56 :     pavgusb mm1, [ebx] ; ref2
57 :     lea edx, [edx+ecx]
58 :     pavgusb mm3, [ebx+8]
59 :     lea ebx, [ebx+ecx]
60 : suxen_drol 329
61 : edgomez 1192 movq mm4, mm0
62 :     lea eax, [eax+ecx]
63 :     psubusb mm0, mm1
64 :     movq mm5, mm2
65 :     psubusb mm2, mm3
66 : suxen_drol 329
67 : edgomez 1192 psubusb mm1, mm4
68 :     por mm0, mm1
69 :     psubusb mm3, mm5
70 :     por mm2, mm3
71 : suxen_drol 329
72 : edgomez 1192 movq mm1, mm0
73 :     movq mm3, mm2
74 : suxen_drol 329
75 : edgomez 1192 punpcklbw mm0,mm7
76 :     punpckhbw mm1,mm7
77 :     punpcklbw mm2,mm7
78 :     punpckhbw mm3,mm7
79 : suxen_drol 329
80 : edgomez 1192 paddusw mm0,mm1
81 :     paddusw mm2,mm3
82 :     paddusw mm6,mm0
83 :     paddusw mm6,mm2
84 :     %endmacro
85 : suxen_drol 329
86 : edgomez 1192 %macro SADBI_8x8_3DN 0
87 :     movq mm0, [eax] ; src
88 :     movq mm2, [eax+ecx]
89 : suxen_drol 329
90 : edgomez 1192 movq mm1, [edx] ; ref1
91 :     movq mm3, [edx+ecx]
92 :     pavgusb mm1, [ebx] ; ref2
93 :     lea edx, [edx+2*ecx]
94 :     pavgusb mm3, [ebx+ecx]
95 :     lea ebx, [ebx+2*ecx]
96 : suxen_drol 329
97 : edgomez 1192 movq mm4, mm0
98 :     lea eax, [eax+2*ecx]
99 :     psubusb mm0, mm1
100 :     movq mm5, mm2
101 :     psubusb mm2, mm3
102 : suxen_drol 329
103 : edgomez 1192 psubusb mm1, mm4
104 :     por mm0, mm1
105 :     psubusb mm3, mm5
106 :     por mm2, mm3
107 : suxen_drol 329
108 : edgomez 1192 movq mm1, mm0
109 :     movq mm3, mm2
110 : suxen_drol 329
111 : edgomez 1192 punpcklbw mm0,mm7
112 :     punpckhbw mm1,mm7
113 :     punpcklbw mm2,mm7
114 :     punpckhbw mm3,mm7
115 : suxen_drol 329
116 : edgomez 1192 paddusw mm0,mm1
117 :     paddusw mm2,mm3
118 :     paddusw mm6,mm0
119 :     paddusw mm6,mm2
120 :     %endmacro
121 : suxen_drol 329
122 : edgomez 1192 ;=============================================================================
123 :     ; Code
124 :     ;=============================================================================
125 : suxen_drol 329
126 : edgomez 1192 SECTION .text
127 : suxen_drol 329
128 : edgomez 1192 cglobal sad16bi_3dn
129 :     cglobal sad8bi_3dn
130 : suxen_drol 329
131 : edgomez 1192 ;-----------------------------------------------------------------------------
132 :     ;
133 :     ; uint32_t sad16bi_3dn(const uint8_t * const cur,
134 :     ; const uint8_t * const ref1,
135 :     ; const uint8_t * const ref2,
136 :     ; const uint32_t stride);
137 :     ;
138 :     ;-----------------------------------------------------------------------------
139 : suxen_drol 329
140 : edgomez 1192 ALIGN 16
141 :     sad16bi_3dn:
142 :     push ebx
143 :     mov eax, [esp+4+ 4] ; Src
144 :     mov edx, [esp+4+ 8] ; Ref1
145 :     mov ebx, [esp+4+12] ; Ref2
146 :     mov ecx, [esp+4+16] ; Stride
147 : suxen_drol 329
148 : edgomez 1192 pxor mm6, mm6 ; accum2
149 :     pxor mm7, mm7
150 :     .Loop
151 :     SADBI_16x16_3DN
152 :     SADBI_16x16_3DN
153 :     SADBI_16x16_3DN
154 :     SADBI_16x16_3DN
155 :     SADBI_16x16_3DN
156 :     SADBI_16x16_3DN
157 :     SADBI_16x16_3DN
158 :     SADBI_16x16_3DN
159 : suxen_drol 329
160 : edgomez 1192 SADBI_16x16_3DN
161 :     SADBI_16x16_3DN
162 :     SADBI_16x16_3DN
163 :     SADBI_16x16_3DN
164 :     SADBI_16x16_3DN
165 :     SADBI_16x16_3DN
166 :     SADBI_16x16_3DN
167 :     SADBI_16x16_3DN
168 : suxen_drol 329
169 : edgomez 1192 pmaddwd mm6, [mmx_one] ; collapse
170 :     movq mm7, mm6
171 :     psrlq mm7, 32
172 :     paddd mm6, mm7
173 : suxen_drol 329
174 : edgomez 1192 movd eax, mm6
175 : suxen_drol 329
176 : edgomez 1192 pop ebx
177 : suxen_drol 329
178 : edgomez 1192 ret
179 : suxen_drol 329
180 : edgomez 1192 ;-----------------------------------------------------------------------------
181 :     ;
182 :     ; uint32_t sad8bi_3dn(const uint8_t * const cur,
183 :     ; const uint8_t * const ref1,
184 :     ; const uint8_t * const ref2,
185 :     ; const uint32_t stride);
186 :     ;
187 :     ;-----------------------------------------------------------------------------
188 : suxen_drol 329
189 : edgomez 1192 ALIGN 16
190 :     sad8bi_3dn:
191 :     push ebx
192 :     mov eax, [esp+4+ 4] ; Src
193 :     mov edx, [esp+4+ 8] ; Ref1
194 :     mov ebx, [esp+4+12] ; Ref2
195 :     mov ecx, [esp+4+16] ; Stride
196 : suxen_drol 329
197 : edgomez 1192 pxor mm6, mm6 ; accum2
198 :     pxor mm7, mm7
199 :     .Loop
200 :     SADBI_8x8_3DN
201 :     SADBI_8x8_3DN
202 :     SADBI_8x8_3DN
203 :     SADBI_8x8_3DN
204 : suxen_drol 329
205 : edgomez 1192 pmaddwd mm6, [mmx_one] ; collapse
206 :     movq mm7, mm6
207 :     psrlq mm7, 32
208 :     paddd mm6, mm7
209 : suxen_drol 329
210 : edgomez 1192 movd eax, mm6
211 : suxen_drol 329
212 : edgomez 1192 pop ebx
213 : suxen_drol 329
214 : edgomez 1192 ret

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