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;\