Mercurial > libavcodec.hg
comparison i386/h264dsp_mmx.c @ 3165:8b51e108cba6 libavcodec
gcc2.95 workaround
author | lorenm |
---|---|
date | Sun, 05 Mar 2006 19:02:35 +0000 |
parents | b67ef5ea4d99 |
children | 9a2cc7b0fbdb |
comparison
equal
deleted
inserted
replaced
3164:d771383fbcb8 | 3165:8b51e108cba6 |
---|---|
516 : "memory"\ | 516 : "memory"\ |
517 );\ | 517 );\ |
518 }\ | 518 }\ |
519 static void OPNAME ## h264_qpel4_h_lowpass_l2_ ## MMX(uint8_t *dst, uint8_t *src, uint8_t *src2, int dstStride, int src2Stride){\ | 519 static void OPNAME ## h264_qpel4_h_lowpass_l2_ ## MMX(uint8_t *dst, uint8_t *src, uint8_t *src2, int dstStride, int src2Stride){\ |
520 int h=4;\ | 520 int h=4;\ |
521 \ | |
522 asm volatile(\ | 521 asm volatile(\ |
523 "pxor %%mm7, %%mm7 \n\t"\ | 522 "pxor %%mm7, %%mm7 \n\t"\ |
524 "movq %6, %%mm4 \n\t"\ | 523 "movq %0, %%mm4 \n\t"\ |
525 "movq %7, %%mm5 \n\t"\ | 524 "movq %1, %%mm5 \n\t"\ |
526 "1: \n\t"\ | 525 :: "m"(ff_pw_5), "m"(ff_pw_16)\ |
526 );\ | |
527 do{\ | |
528 asm volatile(\ | |
527 "movd -1(%0), %%mm1 \n\t"\ | 529 "movd -1(%0), %%mm1 \n\t"\ |
528 "movd (%0), %%mm2 \n\t"\ | 530 "movd (%0), %%mm2 \n\t"\ |
529 "movd 1(%0), %%mm3 \n\t"\ | 531 "movd 1(%0), %%mm3 \n\t"\ |
530 "movd 2(%0), %%mm0 \n\t"\ | 532 "movd 2(%0), %%mm0 \n\t"\ |
531 "punpcklbw %%mm7, %%mm1 \n\t"\ | 533 "punpcklbw %%mm7, %%mm1 \n\t"\ |
547 "movd (%2), %%mm3 \n\t"\ | 549 "movd (%2), %%mm3 \n\t"\ |
548 "psraw $5, %%mm0 \n\t"\ | 550 "psraw $5, %%mm0 \n\t"\ |
549 "packuswb %%mm0, %%mm0 \n\t"\ | 551 "packuswb %%mm0, %%mm0 \n\t"\ |
550 PAVGB" %%mm3, %%mm0 \n\t"\ | 552 PAVGB" %%mm3, %%mm0 \n\t"\ |
551 OP(%%mm0, (%1),%%mm6, d)\ | 553 OP(%%mm0, (%1),%%mm6, d)\ |
552 "add %5, %0 \n\t"\ | 554 "add %4, %0 \n\t"\ |
553 "add %5, %1 \n\t"\ | 555 "add %4, %1 \n\t"\ |
554 "add %4, %2 \n\t"\ | 556 "add %3, %2 \n\t"\ |
555 "decl %3 \n\t"\ | 557 : "+a"(src), "+c"(dst), "+d"(src2)\ |
556 " jnz 1b \n\t"\ | 558 : "D"((long)src2Stride), "S"((long)dstStride)\ |
557 : "+a"(src), "+c"(dst), "+d"(src2), "+m"(h)\ | |
558 : "D"((long)src2Stride), "S"((long)dstStride),\ | |
559 "m"(ff_pw_5), "m"(ff_pw_16)\ | |
560 : "memory"\ | 559 : "memory"\ |
561 );\ | 560 );\ |
561 }while(--h);\ | |
562 }\ | 562 }\ |
563 static void OPNAME ## h264_qpel4_v_lowpass_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\ | 563 static void OPNAME ## h264_qpel4_v_lowpass_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\ |
564 src -= 2*srcStride;\ | 564 src -= 2*srcStride;\ |
565 asm volatile(\ | 565 asm volatile(\ |
566 "pxor %%mm7, %%mm7 \n\t"\ | 566 "pxor %%mm7, %%mm7 \n\t"\ |
712 \ | 712 \ |
713 static void OPNAME ## h264_qpel8_h_lowpass_l2_ ## MMX(uint8_t *dst, uint8_t *src, uint8_t *src2, int dstStride, int src2Stride){\ | 713 static void OPNAME ## h264_qpel8_h_lowpass_l2_ ## MMX(uint8_t *dst, uint8_t *src, uint8_t *src2, int dstStride, int src2Stride){\ |
714 int h=8;\ | 714 int h=8;\ |
715 asm volatile(\ | 715 asm volatile(\ |
716 "pxor %%mm7, %%mm7 \n\t"\ | 716 "pxor %%mm7, %%mm7 \n\t"\ |
717 "movq %6, %%mm6 \n\t"\ | 717 "movq %0, %%mm6 \n\t"\ |
718 "1: \n\t"\ | 718 :: "m"(ff_pw_5)\ |
719 );\ | |
720 do{\ | |
721 asm volatile(\ | |
719 "movq (%0), %%mm0 \n\t"\ | 722 "movq (%0), %%mm0 \n\t"\ |
720 "movq 1(%0), %%mm2 \n\t"\ | 723 "movq 1(%0), %%mm2 \n\t"\ |
721 "movq %%mm0, %%mm1 \n\t"\ | 724 "movq %%mm0, %%mm1 \n\t"\ |
722 "movq %%mm2, %%mm3 \n\t"\ | 725 "movq %%mm2, %%mm3 \n\t"\ |
723 "punpcklbw %%mm7, %%mm0 \n\t"\ | 726 "punpcklbw %%mm7, %%mm0 \n\t"\ |
746 "movd 7(%0), %%mm5 \n\t"\ | 749 "movd 7(%0), %%mm5 \n\t"\ |
747 "punpcklbw %%mm7, %%mm2 \n\t"\ | 750 "punpcklbw %%mm7, %%mm2 \n\t"\ |
748 "punpcklbw %%mm7, %%mm5 \n\t"\ | 751 "punpcklbw %%mm7, %%mm5 \n\t"\ |
749 "paddw %%mm3, %%mm2 \n\t"\ | 752 "paddw %%mm3, %%mm2 \n\t"\ |
750 "paddw %%mm5, %%mm4 \n\t"\ | 753 "paddw %%mm5, %%mm4 \n\t"\ |
751 "movq %7, %%mm5 \n\t"\ | 754 "movq %5, %%mm5 \n\t"\ |
752 "paddw %%mm5, %%mm2 \n\t"\ | 755 "paddw %%mm5, %%mm2 \n\t"\ |
753 "paddw %%mm5, %%mm4 \n\t"\ | 756 "paddw %%mm5, %%mm4 \n\t"\ |
754 "paddw %%mm2, %%mm0 \n\t"\ | 757 "paddw %%mm2, %%mm0 \n\t"\ |
755 "paddw %%mm4, %%mm1 \n\t"\ | 758 "paddw %%mm4, %%mm1 \n\t"\ |
756 "psraw $5, %%mm0 \n\t"\ | 759 "psraw $5, %%mm0 \n\t"\ |
757 "psraw $5, %%mm1 \n\t"\ | 760 "psraw $5, %%mm1 \n\t"\ |
758 "movq (%2), %%mm4 \n\t"\ | 761 "movq (%2), %%mm4 \n\t"\ |
759 "packuswb %%mm1, %%mm0 \n\t"\ | 762 "packuswb %%mm1, %%mm0 \n\t"\ |
760 PAVGB" %%mm4, %%mm0 \n\t"\ | 763 PAVGB" %%mm4, %%mm0 \n\t"\ |
761 OP(%%mm0, (%1),%%mm5, q)\ | 764 OP(%%mm0, (%1),%%mm5, q)\ |
762 "add %5, %0 \n\t"\ | 765 "add %4, %0 \n\t"\ |
763 "add %5, %1 \n\t"\ | 766 "add %4, %1 \n\t"\ |
764 "add %4, %2 \n\t"\ | 767 "add %3, %2 \n\t"\ |
765 "decl %3 \n\t"\ | 768 : "+a"(src), "+c"(dst), "+d"(src2)\ |
766 " jnz 1b \n\t"\ | |
767 : "+a"(src), "+c"(dst), "+d"(src2), "+m"(h)\ | |
768 : "D"((long)src2Stride), "S"((long)dstStride),\ | 769 : "D"((long)src2Stride), "S"((long)dstStride),\ |
769 "m"(ff_pw_5), "m"(ff_pw_16)\ | 770 "m"(ff_pw_16)\ |
770 : "memory"\ | 771 : "memory"\ |
771 );\ | 772 );\ |
773 }while(--h);\ | |
772 }\ | 774 }\ |
773 \ | 775 \ |
774 static inline void OPNAME ## h264_qpel8or16_v_lowpass_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h){\ | 776 static inline void OPNAME ## h264_qpel8or16_v_lowpass_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h){\ |
775 int w= 2;\ | 777 int w= 2;\ |
776 src -= 2*srcStride;\ | 778 src -= 2*srcStride;\ |