comparison postproc/rgb2rgb_template.c @ 2800:7847d6b7ad3d

.balign or weĦ­ll align by 64kb on some architectures
author michael
date Sat, 10 Nov 2001 20:39:23 +0000
parents 0d7fd1655a89
children 318c240363c7
comparison
equal deleted inserted replaced
2799:0d7fd1655a89 2800:7847d6b7ad3d
583 { 583 {
584 int num_pixels= src_size >> 2; 584 int num_pixels= src_size >> 2;
585 #ifdef HAVE_MMX 585 #ifdef HAVE_MMX
586 asm volatile ( 586 asm volatile (
587 "xorl %%eax, %%eax \n\t" 587 "xorl %%eax, %%eax \n\t"
588 ".align 16 \n\t" 588 ".balign 16 \n\t"
589 "1: \n\t" 589 "1: \n\t"
590 PREFETCH" 32(%0, %%eax) \n\t" 590 PREFETCH" 32(%0, %%eax) \n\t"
591 "movq (%0, %%eax), %%mm0 \n\t" 591 "movq (%0, %%eax), %%mm0 \n\t"
592 "movq %%mm0, %%mm1 \n\t" 592 "movq %%mm0, %%mm1 \n\t"
593 "movq %%mm0, %%mm2 \n\t" 593 "movq %%mm0, %%mm2 \n\t"
634 { 634 {
635 #ifdef HAVE_MMX 635 #ifdef HAVE_MMX
636 //FIXME handle 2 lines a once (fewer prefetch, reuse some chrom, but very likely limited by mem anyway) 636 //FIXME handle 2 lines a once (fewer prefetch, reuse some chrom, but very likely limited by mem anyway)
637 asm volatile( 637 asm volatile(
638 "xorl %%eax, %%eax \n\t" 638 "xorl %%eax, %%eax \n\t"
639 ".align 16 \n\t" 639 ".balign 16 \n\t"
640 "1: \n\t" 640 "1: \n\t"
641 PREFETCH" 32(%1, %%eax, 2) \n\t" 641 PREFETCH" 32(%1, %%eax, 2) \n\t"
642 PREFETCH" 32(%2, %%eax) \n\t" 642 PREFETCH" 32(%2, %%eax) \n\t"
643 PREFETCH" 32(%3, %%eax) \n\t" 643 PREFETCH" 32(%3, %%eax) \n\t"
644 "movq (%2, %%eax), %%mm0 \n\t" // U(0) 644 "movq (%2, %%eax), %%mm0 \n\t" // U(0)
708 #ifdef HAVE_MMX 708 #ifdef HAVE_MMX
709 asm volatile( 709 asm volatile(
710 "xorl %%eax, %%eax \n\t" 710 "xorl %%eax, %%eax \n\t"
711 "pcmpeqw %%mm7, %%mm7 \n\t" 711 "pcmpeqw %%mm7, %%mm7 \n\t"
712 "psrlw $8, %%mm7 \n\t" // FF,00,FF,00... 712 "psrlw $8, %%mm7 \n\t" // FF,00,FF,00...
713 ".align 16 \n\t" 713 ".balign 16 \n\t"
714 "1: \n\t" 714 "1: \n\t"
715 PREFETCH" 64(%0, %%eax, 4) \n\t" 715 PREFETCH" 64(%0, %%eax, 4) \n\t"
716 "movq (%0, %%eax, 4), %%mm0 \n\t" // YUYV YUYV(0) 716 "movq (%0, %%eax, 4), %%mm0 \n\t" // YUYV YUYV(0)
717 "movq 8(%0, %%eax, 4), %%mm1 \n\t" // YUYV YUYV(4) 717 "movq 8(%0, %%eax, 4), %%mm1 \n\t" // YUYV YUYV(4)
718 "movq %%mm0, %%mm2 \n\t" // YUYV YUYV(0) 718 "movq %%mm0, %%mm2 \n\t" // YUYV YUYV(0)
758 : "memory", "%eax" 758 : "memory", "%eax"
759 ); 759 );
760 760
761 asm volatile( 761 asm volatile(
762 "xorl %%eax, %%eax \n\t" 762 "xorl %%eax, %%eax \n\t"
763 ".align 16 \n\t" 763 ".balign 16 \n\t"
764 "1: \n\t" 764 "1: \n\t"
765 PREFETCH" 64(%0, %%eax, 4) \n\t" 765 PREFETCH" 64(%0, %%eax, 4) \n\t"
766 "movq (%0, %%eax, 4), %%mm0 \n\t" // YUYV YUYV(0) 766 "movq (%0, %%eax, 4), %%mm0 \n\t" // YUYV YUYV(0)
767 "movq 8(%0, %%eax, 4), %%mm1 \n\t" // YUYV YUYV(4) 767 "movq 8(%0, %%eax, 4), %%mm1 \n\t" // YUYV YUYV(4)
768 "movq 16(%0, %%eax, 4), %%mm2 \n\t" // YUYV YUYV(8) 768 "movq 16(%0, %%eax, 4), %%mm2 \n\t" // YUYV YUYV(8)