Mercurial > libavcodec.hg
comparison libpostproc/postprocess_template.c @ 1331:cf65e69400ec libavcodec
gcc 2.95 workaround
| author | michaelni |
|---|---|
| date | Sat, 28 Jun 2003 19:19:00 +0000 |
| parents | 854571532c89 |
| children | d2fc92d02bf7 |
comparison
equal
deleted
inserted
replaced
| 1330:c05c381a9c47 | 1331:cf65e69400ec |
|---|---|
| 56 */ | 56 */ |
| 57 static inline int RENAME(vertClassify)(uint8_t src[], int stride, PPContext *c){ | 57 static inline int RENAME(vertClassify)(uint8_t src[], int stride, PPContext *c){ |
| 58 int numEq= 0, dcOk; | 58 int numEq= 0, dcOk; |
| 59 src+= stride*4; // src points to begin of the 8x8 Block | 59 src+= stride*4; // src points to begin of the 8x8 Block |
| 60 asm volatile( | 60 asm volatile( |
| 61 "movq %0, %%mm7 \n\t" | |
| 62 "movq %1, %%mm6 \n\t" | |
| 63 : : "m" (c->mmxDcOffset[c->nonBQP]), "m" (c->mmxDcThreshold[c->nonBQP]) | |
| 64 ); | |
| 65 | |
| 66 asm volatile( | |
| 61 "leal (%2, %3), %%eax \n\t" | 67 "leal (%2, %3), %%eax \n\t" |
| 62 // 0 1 2 3 4 5 6 7 8 9 | 68 // 0 1 2 3 4 5 6 7 8 9 |
| 63 // %1 eax eax+%2 eax+2%2 %1+4%2 ecx ecx+%2 ecx+2%2 %1+8%2 ecx+4%2 | 69 // %1 eax eax+%2 eax+2%2 %1+4%2 ecx ecx+%2 ecx+2%2 %1+8%2 ecx+4%2 |
| 64 "movq %4, %%mm7 \n\t" | |
| 65 "movq %5, %%mm6 \n\t" | |
| 66 | 70 |
| 67 "movq (%2), %%mm0 \n\t" | 71 "movq (%2), %%mm0 \n\t" |
| 68 "movq (%%eax), %%mm1 \n\t" | 72 "movq (%%eax), %%mm1 \n\t" |
| 69 "movq %%mm0, %%mm3 \n\t" | 73 "movq %%mm0, %%mm3 \n\t" |
| 70 "movq %%mm0, %%mm4 \n\t" | 74 "movq %%mm0, %%mm4 \n\t" |
| 138 "paddb %%mm1, %%mm0 \n\t" | 142 "paddb %%mm1, %%mm0 \n\t" |
| 139 "movq %%mm0, %%mm1 \n\t" | 143 "movq %%mm0, %%mm1 \n\t" |
| 140 "psrlq $32, %%mm0 \n\t" | 144 "psrlq $32, %%mm0 \n\t" |
| 141 "paddb %%mm1, %%mm0 \n\t" | 145 "paddb %%mm1, %%mm0 \n\t" |
| 142 #endif | 146 #endif |
| 143 "movq %6, %%mm7 \n\t" // QP,..., QP | 147 "movq %4, %%mm7 \n\t" // QP,..., QP |
| 144 "paddusb %%mm7, %%mm7 \n\t" // 2QP ... 2QP | 148 "paddusb %%mm7, %%mm7 \n\t" // 2QP ... 2QP |
| 145 "psubusb %%mm7, %%mm4 \n\t" // Diff <= 2QP -> 0 | 149 "psubusb %%mm7, %%mm4 \n\t" // Diff <= 2QP -> 0 |
| 146 "packssdw %%mm4, %%mm4 \n\t" | 150 "packssdw %%mm4, %%mm4 \n\t" |
| 147 "movd %%mm0, %0 \n\t" | 151 "movd %%mm0, %0 \n\t" |
| 148 "movd %%mm4, %1 \n\t" | 152 "movd %%mm4, %1 \n\t" |
| 149 | 153 |
| 150 : "=r" (numEq), "=r" (dcOk) | 154 : "=r" (numEq), "=r" (dcOk) |
| 151 : "r" (src), "r" (stride), "m" (c->mmxDcOffset[c->nonBQP]), "m" (c->mmxDcThreshold[c->nonBQP]), "m" (c->pQPb) | 155 : "r" (src), "r" (stride), "m" (c->pQPb) |
| 152 : "%eax" | 156 : "%eax" |
| 153 ); | 157 ); |
| 154 | 158 |
| 155 numEq= (-numEq) &0xFF; | 159 numEq= (-numEq) &0xFF; |
| 156 if(numEq > c->ppMode.flatnessThreshold){ | 160 if(numEq > c->ppMode.flatnessThreshold){ |
