[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 1877 - (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 1877 ; * $Id: sad_3dn.asm,v 1.14 2009-09-16 17:07:58 Isibaar Exp $
23 : suxen_drol 329 ; *
24 : edgomez 1382 ; ***************************************************************************/
25 : suxen_drol 329
26 : Isibaar 1795 %include "nasm.inc"
27 : suxen_drol 329
28 : edgomez 1382 ;=============================================================================
29 :     ; Read only data
30 :     ;=============================================================================
31 : suxen_drol 329
32 : Isibaar 1795 DATA
33 : suxen_drol 329
34 : Isibaar 1795 ALIGN SECTION_ALIGN
35 : edgomez 1382 mmx_one:
36 :     times 4 dw 1
37 : suxen_drol 329
38 : edgomez 1382 ;=============================================================================
39 :     ; Helper macros
40 :     ;=============================================================================
41 :     %macro SADBI_16x16_3DN 0
42 : Isibaar 1795 movq mm0, [_EAX] ; src
43 :     movq mm2, [_EAX+8]
44 : suxen_drol 329
45 : Isibaar 1795 movq mm1, [TMP1] ; ref1
46 :     movq mm3, [TMP1+8]
47 :     pavgusb mm1, [_EBX] ; ref2
48 :     lea TMP1, [TMP1+TMP0]
49 :     pavgusb mm3, [_EBX+8]
50 :     lea _EBX, [_EBX+TMP0]
51 : suxen_drol 329
52 : edgomez 1382 movq mm4, mm0
53 : Isibaar 1795 lea _EAX, [_EAX+TMP0]
54 : edgomez 1382 psubusb mm0, mm1
55 :     movq mm5, mm2
56 :     psubusb mm2, mm3
57 : suxen_drol 329
58 : edgomez 1382 psubusb mm1, mm4
59 :     por mm0, mm1
60 :     psubusb mm3, mm5
61 :     por mm2, mm3
62 : suxen_drol 329
63 : edgomez 1382 movq mm1, mm0
64 :     movq mm3, mm2
65 : suxen_drol 329
66 : edgomez 1382 punpcklbw mm0,mm7
67 :     punpckhbw mm1,mm7
68 :     punpcklbw mm2,mm7
69 :     punpckhbw mm3,mm7
70 : suxen_drol 329
71 : edgomez 1382 paddusw mm0,mm1
72 :     paddusw mm2,mm3
73 :     paddusw mm6,mm0
74 :     paddusw mm6,mm2
75 :     %endmacro
76 : suxen_drol 329
77 : edgomez 1382 %macro SADBI_8x8_3DN 0
78 : Isibaar 1795 movq mm0, [_EAX] ; src
79 :     movq mm2, [_EAX+TMP0]
80 : suxen_drol 329
81 : Isibaar 1795 movq mm1, [TMP1] ; ref1
82 :     movq mm3, [TMP1+TMP0]
83 :     pavgusb mm1, [_EBX] ; ref2
84 :     lea TMP1, [TMP1+2*TMP0]
85 :     pavgusb mm3, [_EBX+TMP0]
86 :     lea _EBX, [_EBX+2*TMP0]
87 : suxen_drol 329
88 : edgomez 1382 movq mm4, mm0
89 : Isibaar 1795 lea _EAX, [_EAX+2*TMP0]
90 : edgomez 1382 psubusb mm0, mm1
91 :     movq mm5, mm2
92 :     psubusb mm2, mm3
93 : suxen_drol 329
94 : edgomez 1382 psubusb mm1, mm4
95 :     por mm0, mm1
96 :     psubusb mm3, mm5
97 :     por mm2, mm3
98 : suxen_drol 329
99 : edgomez 1382 movq mm1, mm0
100 :     movq mm3, mm2
101 : suxen_drol 329
102 : edgomez 1382 punpcklbw mm0,mm7
103 :     punpckhbw mm1,mm7
104 :     punpcklbw mm2,mm7
105 :     punpckhbw mm3,mm7
106 : suxen_drol 329
107 : edgomez 1382 paddusw mm0,mm1
108 :     paddusw mm2,mm3
109 :     paddusw mm6,mm0
110 :     paddusw mm6,mm2
111 :     %endmacro
112 : suxen_drol 329
113 : edgomez 1382 ;=============================================================================
114 :     ; Code
115 :     ;=============================================================================
116 : suxen_drol 329
117 : Isibaar 1844 TEXT
118 : suxen_drol 329
119 : edgomez 1382 cglobal sad16bi_3dn
120 :     cglobal sad8bi_3dn
121 : suxen_drol 329
122 : edgomez 1382 ;-----------------------------------------------------------------------------
123 :     ;
124 :     ; uint32_t sad16bi_3dn(const uint8_t * const cur,
125 :     ; const uint8_t * const ref1,
126 :     ; const uint8_t * const ref2,
127 :     ; const uint32_t stride);
128 :     ;
129 :     ;-----------------------------------------------------------------------------
130 : suxen_drol 329
131 : Isibaar 1795 ALIGN SECTION_ALIGN
132 : edgomez 1382 sad16bi_3dn:
133 : Isibaar 1795 mov _EAX, prm1 ; Src
134 :     mov TMP1, prm2 ; Ref1
135 :     mov TMP0, prm4 ; Stride
136 : suxen_drol 329
137 : Isibaar 1795 push _EBX
138 :     %ifdef ARCH_IS_X86_64
139 :     mov _EBX, prm3
140 :     %else
141 :     mov _EBX, [_ESP+4+12] ; Ref2
142 :     %endif
143 :    
144 : edgomez 1382 pxor mm6, mm6 ; accum2
145 :     pxor mm7, mm7
146 : Isibaar 1793 .Loop:
147 : edgomez 1382 SADBI_16x16_3DN
148 :     SADBI_16x16_3DN
149 :     SADBI_16x16_3DN
150 :     SADBI_16x16_3DN
151 :     SADBI_16x16_3DN
152 :     SADBI_16x16_3DN
153 :     SADBI_16x16_3DN
154 :     SADBI_16x16_3DN
155 : suxen_drol 329
156 : edgomez 1382 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 :     SADBI_16x16_3DN
164 : suxen_drol 329
165 : edgomez 1382 pmaddwd mm6, [mmx_one] ; collapse
166 :     movq mm7, mm6
167 :     psrlq mm7, 32
168 :     paddd mm6, mm7
169 : suxen_drol 329
170 : edgomez 1382 movd eax, mm6
171 : suxen_drol 329
172 : Isibaar 1795 pop _EBX
173 : suxen_drol 329
174 : edgomez 1382 ret
175 : Isibaar 1793 ENDFUNC
176 : suxen_drol 329
177 : edgomez 1382 ;-----------------------------------------------------------------------------
178 :     ;
179 :     ; uint32_t sad8bi_3dn(const uint8_t * const cur,
180 :     ; const uint8_t * const ref1,
181 :     ; const uint8_t * const ref2,
182 :     ; const uint32_t stride);
183 :     ;
184 :     ;-----------------------------------------------------------------------------
185 : suxen_drol 329
186 : Isibaar 1795 ALIGN SECTION_ALIGN
187 : edgomez 1382 sad8bi_3dn:
188 : Isibaar 1795 mov _EAX, prm1 ; Src
189 :     mov TMP1, prm2 ; Ref1
190 :     mov TMP0, prm4 ; Stride
191 : suxen_drol 329
192 : Isibaar 1795 push _EBX
193 :     %ifdef ARCH_IS_X86_64
194 :     mov _EBX, prm3
195 :     %else
196 :     mov _EBX, [_ESP+4+12] ; Ref2
197 :     %endif
198 :    
199 : edgomez 1382 pxor mm6, mm6 ; accum2
200 :     pxor mm7, mm7
201 : Isibaar 1793 .Loop:
202 : edgomez 1382 SADBI_8x8_3DN
203 :     SADBI_8x8_3DN
204 :     SADBI_8x8_3DN
205 :     SADBI_8x8_3DN
206 : suxen_drol 329
207 : edgomez 1382 pmaddwd mm6, [mmx_one] ; collapse
208 :     movq mm7, mm6
209 :     psrlq mm7, 32
210 :     paddd mm6, mm7
211 : suxen_drol 329
212 : edgomez 1382 movd eax, mm6
213 : suxen_drol 329
214 : Isibaar 1795 pop _EBX
215 : suxen_drol 329
216 : edgomez 1382 ret
217 : Isibaar 1793 ENDFUNC
218 : edgomez 1540
219 : Isibaar 1877 NON_EXEC_STACK

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