|
|
|
@ -75,13 +75,11 @@ static inline void sad8_1_mmx2(uint8_t *blk1, uint8_t *blk2, int stride, int h) |
|
|
|
|
ASMALIGN(4) |
|
|
|
|
"1: \n\t" |
|
|
|
|
"movq (%1, %%"REG_a"), %%mm0 \n\t" |
|
|
|
|
"movq (%2, %%"REG_a"), %%mm2 \n\t" |
|
|
|
|
"psadbw %%mm2, %%mm0 \n\t" |
|
|
|
|
"psadbw (%2, %%"REG_a"), %%mm0 \n\t" |
|
|
|
|
"add %3, %%"REG_a" \n\t" |
|
|
|
|
"movq (%1, %%"REG_a"), %%mm1 \n\t" |
|
|
|
|
"movq (%2, %%"REG_a"), %%mm3 \n\t" |
|
|
|
|
"psadbw %%mm1, %%mm3 \n\t" |
|
|
|
|
"paddw %%mm3, %%mm0 \n\t" |
|
|
|
|
"psadbw (%2, %%"REG_a"), %%mm1 \n\t" |
|
|
|
|
"paddw %%mm1, %%mm0 \n\t" |
|
|
|
|
"paddw %%mm0, %%mm6 \n\t" |
|
|
|
|
"add %3, %%"REG_a" \n\t" |
|
|
|
|
" js 1b \n\t" |
|
|
|
@ -97,17 +95,13 @@ static inline void sad8_2_mmx2(uint8_t *blk1a, uint8_t *blk1b, uint8_t *blk2, in |
|
|
|
|
ASMALIGN(4) |
|
|
|
|
"1: \n\t" |
|
|
|
|
"movq (%1, %%"REG_a"), %%mm0 \n\t" |
|
|
|
|
"movq (%2, %%"REG_a"), %%mm2 \n\t" |
|
|
|
|
"pavgb %%mm2, %%mm0 \n\t" |
|
|
|
|
"movq (%3, %%"REG_a"), %%mm2 \n\t" |
|
|
|
|
"psadbw %%mm2, %%mm0 \n\t" |
|
|
|
|
"pavgb (%2, %%"REG_a"), %%mm0 \n\t" |
|
|
|
|
"psadbw (%3, %%"REG_a"), %%mm0 \n\t" |
|
|
|
|
"add %4, %%"REG_a" \n\t" |
|
|
|
|
"movq (%1, %%"REG_a"), %%mm1 \n\t" |
|
|
|
|
"movq (%2, %%"REG_a"), %%mm3 \n\t" |
|
|
|
|
"pavgb %%mm1, %%mm3 \n\t" |
|
|
|
|
"movq (%3, %%"REG_a"), %%mm1 \n\t" |
|
|
|
|
"psadbw %%mm1, %%mm3 \n\t" |
|
|
|
|
"paddw %%mm3, %%mm0 \n\t" |
|
|
|
|
"pavgb (%2, %%"REG_a"), %%mm1 \n\t" |
|
|
|
|
"psadbw (%3, %%"REG_a"), %%mm1 \n\t" |
|
|
|
|
"paddw %%mm1, %%mm0 \n\t" |
|
|
|
|
"paddw %%mm0, %%mm6 \n\t" |
|
|
|
|
"add %4, %%"REG_a" \n\t" |
|
|
|
|
" js 1b \n\t" |
|
|
|
@ -120,30 +114,24 @@ static inline void sad8_4_mmx2(uint8_t *blk1, uint8_t *blk2, int stride, int h) |
|
|
|
|
{ //FIXME reuse src
|
|
|
|
|
long len= -(stride*h); |
|
|
|
|
asm volatile( |
|
|
|
|
ASMALIGN(4) |
|
|
|
|
"movq "MANGLE(bone)", %%mm5 \n\t" |
|
|
|
|
ASMALIGN(4) |
|
|
|
|
"1: \n\t" |
|
|
|
|
"movq (%1, %%"REG_a"), %%mm0 \n\t" |
|
|
|
|
"movq (%2, %%"REG_a"), %%mm2 \n\t" |
|
|
|
|
"movq 1(%1, %%"REG_a"), %%mm1 \n\t" |
|
|
|
|
"movq 1(%2, %%"REG_a"), %%mm3 \n\t" |
|
|
|
|
"pavgb %%mm2, %%mm0 \n\t" |
|
|
|
|
"pavgb %%mm1, %%mm3 \n\t" |
|
|
|
|
"psubusb %%mm5, %%mm3 \n\t" |
|
|
|
|
"pavgb %%mm3, %%mm0 \n\t" |
|
|
|
|
"movq (%3, %%"REG_a"), %%mm2 \n\t" |
|
|
|
|
"psadbw %%mm2, %%mm0 \n\t" |
|
|
|
|
"pavgb (%2, %%"REG_a"), %%mm0 \n\t" |
|
|
|
|
"pavgb 1(%2, %%"REG_a"), %%mm1 \n\t" |
|
|
|
|
"psubusb %%mm5, %%mm1 \n\t" |
|
|
|
|
"pavgb %%mm1, %%mm0 \n\t" |
|
|
|
|
"psadbw (%3, %%"REG_a"), %%mm0 \n\t" |
|
|
|
|
"add %4, %%"REG_a" \n\t" |
|
|
|
|
"movq (%1, %%"REG_a"), %%mm1 \n\t" |
|
|
|
|
"movq (%2, %%"REG_a"), %%mm3 \n\t" |
|
|
|
|
"movq 1(%1, %%"REG_a"), %%mm2 \n\t" |
|
|
|
|
"movq 1(%2, %%"REG_a"), %%mm4 \n\t" |
|
|
|
|
"pavgb %%mm3, %%mm1 \n\t" |
|
|
|
|
"pavgb %%mm4, %%mm2 \n\t" |
|
|
|
|
"psubusb %%mm5, %%mm2 \n\t" |
|
|
|
|
"pavgb %%mm1, %%mm2 \n\t" |
|
|
|
|
"movq (%3, %%"REG_a"), %%mm1 \n\t" |
|
|
|
|
"psadbw %%mm1, %%mm2 \n\t" |
|
|
|
|
"movq (%1, %%"REG_a"), %%mm2 \n\t" |
|
|
|
|
"movq 1(%1, %%"REG_a"), %%mm3 \n\t" |
|
|
|
|
"pavgb (%2, %%"REG_a"), %%mm2 \n\t" |
|
|
|
|
"pavgb 1(%2, %%"REG_a"), %%mm3 \n\t" |
|
|
|
|
"psubusb %%mm5, %%mm3 \n\t" |
|
|
|
|
"pavgb %%mm3, %%mm2 \n\t" |
|
|
|
|
"psadbw (%3, %%"REG_a"), %%mm2 \n\t" |
|
|
|
|
"paddw %%mm2, %%mm0 \n\t" |
|
|
|
|
"paddw %%mm0, %%mm6 \n\t" |
|
|
|
|
"add %4, %%"REG_a" \n\t" |
|
|
|
|