Lines 161-167
Link Here
|
161 |
" pxor %%mm7 , %%mm7; /* clear mm7 */\n" |
161 |
" pxor %%mm7 , %%mm7; /* clear mm7 */\n" |
162 |
" /* */\n" |
162 |
" /* */\n" |
163 |
" movl %1 , %%eax; /* load frameadress into eax */\n" |
163 |
" movl %1 , %%eax; /* load frameadress into eax */\n" |
|
|
164 |
#ifdef __PIC__ |
165 |
" movl %2 , %%esi; /* load frameadress into esi */\n" |
166 |
#else |
164 |
" movl %2 , %%ebx; /* load frameadress into ebx */\n" |
167 |
" movl %2 , %%ebx; /* load frameadress into ebx */\n" |
|
|
168 |
#endif |
165 |
" movl %3 , %%ecx; /* load frameadress into ecx */\n" |
169 |
" movl %3 , %%ecx; /* load frameadress into ecx */\n" |
166 |
" /* */\n" |
170 |
" /* */\n" |
167 |
" .rept 3 /* repeat 3 times */\n" |
171 |
" .rept 3 /* repeat 3 times */\n" |
Lines 177-183
Link Here
|
177 |
" paddusw %%mm1 , %%mm0; /* add mm1 (stored in mm1 and mm2...) */\n" |
181 |
" paddusw %%mm1 , %%mm0; /* add mm1 (stored in mm1 and mm2...) */\n" |
178 |
" paddusw %%mm2 , %%mm0; /* to mm0 */\n" |
182 |
" paddusw %%mm2 , %%mm0; /* to mm0 */\n" |
179 |
" /* */\n" |
183 |
" /* */\n" |
|
|
184 |
#ifdef __PIC__ |
185 |
" movq (%%esi), %%mm1; /* 8 Pixels from line */\n" |
186 |
#else |
180 |
" movq (%%ebx), %%mm1; /* 8 Pixels from line */\n" |
187 |
" movq (%%ebx), %%mm1; /* 8 Pixels from line */\n" |
|
|
188 |
#endif |
181 |
" movq (%%ecx), %%mm2; /* 8 Pixels from displaced line */\n" |
189 |
" movq (%%ecx), %%mm2; /* 8 Pixels from displaced line */\n" |
182 |
" movq %%mm2 , %%mm3; /* hold a copy of mm2 in mm3 */\n" |
190 |
" movq %%mm2 , %%mm3; /* hold a copy of mm2 in mm3 */\n" |
183 |
" psubusb %%mm1 , %%mm3; /* positive differences between mm2 and mm1 */\n" |
191 |
" psubusb %%mm1 , %%mm3; /* positive differences between mm2 and mm1 */\n" |
Lines 189-202
Link Here
|
189 |
" paddusw %%mm1 , %%mm0; /* add mm1 (stored in mm1 and mm2...) */\n" |
197 |
" paddusw %%mm1 , %%mm0; /* add mm1 (stored in mm1 and mm2...) */\n" |
190 |
" paddusw %%mm2 , %%mm0; /* to mm0 */\n" |
198 |
" paddusw %%mm2 , %%mm0; /* to mm0 */\n" |
191 |
" addl $8 , %%eax; /* add 8 to frameaddress */\n" |
199 |
" addl $8 , %%eax; /* add 8 to frameaddress */\n" |
|
|
200 |
#ifdef __PIC__ |
201 |
" addl $8 , %%esi; /* add 8 to frameaddress */\n" |
202 |
#else |
192 |
" addl $8 , %%ebx; /* add 8 to frameaddress */\n" |
203 |
" addl $8 , %%ebx; /* add 8 to frameaddress */\n" |
|
|
204 |
#endif |
193 |
" addl $8 , %%ecx; /* add 8 to frameaddress */\n" |
205 |
" addl $8 , %%ecx; /* add 8 to frameaddress */\n" |
194 |
" .endr /* end loop */\n" |
206 |
" .endr /* end loop */\n" |
195 |
" /* */\n" |
207 |
" /* */\n" |
196 |
" movq %%mm0 , %0 ; /* make mm0 available to gcc ... */\n" |
208 |
" movq %%mm0 , %0 ; /* make mm0 available to gcc ... */\n" |
197 |
:"=m" (a) |
209 |
:"=m" (a) |
198 |
:"m" (ref1), "m" (ref2), "m" (ref3) |
210 |
:"m" (ref1), "m" (ref2), "m" (ref3) |
|
|
211 |
#ifdef __PIC__ |
212 |
:"%eax", "%esi", "%ecx" |
213 |
#else |
199 |
:"%eax", "%ebx", "%ecx" |
214 |
:"%eax", "%ebx", "%ecx" |
|
|
215 |
#endif |
200 |
); |
216 |
); |
201 |
|
217 |
|
202 |
d=a[0]+a[1]+a[2]+a[3]; |
218 |
d=a[0]+a[1]+a[2]+a[3]; |