Lines 251-256
Link Here
|
251 |
" movl %1 , %%eax; /* load frameadress into eax */\n" |
251 |
" movl %1 , %%eax; /* load frameadress into eax */\n" |
252 |
" movl %2 , %%ebx; /* load frameadress into ebx */\n" |
252 |
" movl %2 , %%ebx; /* load frameadress into ebx */\n" |
253 |
" movl %3 , %%ecx; /* load width into ecx */\n" |
253 |
" movl %3 , %%ecx; /* load width into ecx */\n" |
|
|
254 |
" shrl $1 , %%ecx; /* shift width to scale it in the asm. */\n" |
255 |
" /* why? we need an lvalue as input... gcc33... */\n" |
256 |
" /* (carrbc1@wfu.edu) */\n" |
254 |
" /* */\n" |
257 |
" /* */\n" |
255 |
".rept 4 ; /* Loop for 4 lines */\n" |
258 |
".rept 4 ; /* Loop for 4 lines */\n" |
256 |
" movd (%%eax), %%mm1; /* 4 Pixels from filtered frame to mm1 */\n" |
259 |
" movd (%%eax), %%mm1; /* 4 Pixels from filtered frame to mm1 */\n" |
Lines 270-276
Link Here
|
270 |
" /* */\n" |
273 |
" /* */\n" |
271 |
" movq %%mm0 , %0 ; /* make mm0 available to gcc ... */\n" |
274 |
" movq %%mm0 , %0 ; /* make mm0 available to gcc ... */\n" |
272 |
:"=m" (a) |
275 |
:"=m" (a) |
273 |
:"m" (frm), "m" (ref), "m" (denoiser.frame.w/2) |
276 |
:"m" (frm), "m" (ref), "m" (denoiser.frame.w) |
274 |
:"%eax", "%ebx", "%ecx" |
277 |
:"%eax", "%ebx", "%ecx" |
275 |
); |
278 |
); |
276 |
#endif |
279 |
#endif |
Lines 295-301
Link Here
|
295 |
" movl %1 , %%eax; /* load frameadress into eax */\n" |
298 |
" movl %1 , %%eax; /* load frameadress into eax */\n" |
296 |
" movl %2 , %%ebx; /* load frameadress into ebx */\n" |
299 |
" movl %2 , %%ebx; /* load frameadress into ebx */\n" |
297 |
" movl %3 , %%ecx; /* load width into ecx */\n" |
300 |
" movl %3 , %%ecx; /* load width into ecx */\n" |
298 |
" ; /* */\n" |
301 |
" shrl $1 , %%ecx; /* shift width to scale it in the asm. */\n" |
|
|
302 |
" /* why? we need an lvalue as input... gcc33... */\n" |
303 |
" /* (carrbc1@wfu.edu) */\n" |
304 |
" /* */\n" |
299 |
" .rept 4 ; /* */\n" |
305 |
" .rept 4 ; /* */\n" |
300 |
" movd (%%eax), %%mm1; /* 4 Pixels from filtered frame to mm1 */\n" |
306 |
" movd (%%eax), %%mm1; /* 4 Pixels from filtered frame to mm1 */\n" |
301 |
" movd (%%ebx), %%mm2; /* 4 Pixels from filtered frame to mm2 */\n" |
307 |
" movd (%%ebx), %%mm2; /* 4 Pixels from filtered frame to mm2 */\n" |
Lines 307-313
Link Here
|
307 |
" /* */\n" |
313 |
" /* */\n" |
308 |
" movq %%mm0 , %0 ; /* make mm0 available to gcc ... */\n" |
314 |
" movq %%mm0 , %0 ; /* make mm0 available to gcc ... */\n" |
309 |
:"=m" (a) |
315 |
:"=m" (a) |
310 |
:"m" (frm), "m" (ref), "m" (denoiser.frame.w/2) |
316 |
:"m" (frm), "m" (ref), "m" (denoiser.frame.w) |
311 |
:"%eax", "%ebx", "%ecx" |
317 |
:"%eax", "%ebx", "%ecx" |
312 |
); |
318 |
); |
313 |
#endif |
319 |
#endif |
Lines 349-354
Link Here
|
349 |
static uint32_t a; |
355 |
static uint32_t a; |
350 |
#ifdef HAVE_ASM_MMX |
356 |
#ifdef HAVE_ASM_MMX |
351 |
static uint32_t bit_mask[2] = {0x7f7f7f7f,0x7f7f7f7f}; |
357 |
static uint32_t bit_mask[2] = {0x7f7f7f7f,0x7f7f7f7f}; |
|
|
358 |
static uint32_t* bit_mask_addr = bit_mask; |
352 |
|
359 |
|
353 |
__asm__ __volatile__ |
360 |
__asm__ __volatile__ |
354 |
( |
361 |
( |
Lines 380-386
Link Here
|
380 |
" /* */" |
387 |
" /* */" |
381 |
" movq %%mm0 , %0 ; /* make mm0 available to gcc ... */" |
388 |
" movq %%mm0 , %0 ; /* make mm0 available to gcc ... */" |
382 |
:"=m" (a) |
389 |
:"=m" (a) |
383 |
:"m" (frm1),"m" (frm2), "m" (ref), "m" (denoiser.frame.w), "m" (bit_mask) |
390 |
:"m" (frm1),"m" (frm2), "m" (ref), "m" (denoiser.frame.w), "m" (bit_mask_addr) |
384 |
:"%eax", "%ebx", "%ecx", "%edx" |
391 |
:"%eax", "%ebx", "%ecx", "%edx" |
385 |
); |
392 |
); |
386 |
#endif |
393 |
#endif |