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){