Ticket #3048: ICL_HAVE_INLINE.git.patch
| File ICL_HAVE_INLINE.git.patch, 17.4 KB (added by , 13 years ago) |
|---|
-
trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/cabac.h
diff --git a/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/cabac.h b/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/cabac.h
a b 34 34 # define BROKEN_COMPILER 0 35 35 #endif 36 36 37 #if HAVE_INLINE_ASM 37 //todo: make code compiled with ICL 38 #if HAVE_INLINE_ASM && !defined(__ICL) 38 39 39 40 #ifdef BROKEN_RELOCATIONS 40 41 #define TABLES_ARG , "r"(tables) … … 189 190 ); 190 191 return bit & 1; 191 192 } 192 #endif / * HAVE_7REGS */193 #endif // HAVE_7REGS 193 194 194 195 #define get_cabac_bypass_sign get_cabac_bypass_sign_x86 195 196 static av_always_inline int get_cabac_bypass_sign_x86(CABACContext *c, int val) … … 270 271 ); 271 272 return res; 272 273 } 273 #endif / * !BROKEN_COMPILER */274 #endif // !BROKEN_COMPILER 274 275 275 276 #endif /* HAVE_INLINE_ASM */ 276 277 #endif /* AVCODEC_X86_CABAC_H */ -
trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/dsputil_mmx.c
diff --git a/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/dsputil_mmx.c b/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/dsputil_mmx.c
a b 111 111 void ff_put_signed_pixels_clamped_mmx(const int16_t *block, uint8_t *pixels, 112 112 int line_size) 113 113 { 114 #ifdef __ICL 115 //todo: move ff_pb_80 declaration to contants.h and make asm code compiled with ICL 116 int i, j; 117 118 for (i = 0; i < 8; i++) { 119 for (j = 0; j < 8; j++) { 120 if (*block < -128) 121 *pixels = 0; 122 else if (*block > 127) 123 *pixels = 255; 124 else 125 *pixels = (uint8_t)(*block + 128); 126 block++; 127 pixels++; 128 } 129 pixels += (line_size - 8); 130 } 131 #else 114 132 x86_reg line_skip = line_size; 115 133 x86_reg line_skip3; 116 134 … … 123 141 : "+&r"(pixels), "=&r"(line_skip3) 124 142 : "r"(block), "r"(line_skip) 125 143 : "memory"); 144 #endif 126 145 } 127 146 128 147 void ff_add_pixels_clamped_mmx(const int16_t *block, uint8_t *pixels, -
trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/h264_i386.h
diff --git a/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/h264_i386.h b/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/h264_i386.h
a b 34 34 #include "libavcodec/cabac.h" 35 35 #include "cabac.h" 36 36 37 #if HAVE_INLINE_ASM 37 #if HAVE_INLINE_ASM && !defined(__ICL) 38 38 39 39 //FIXME use some macros to avoid duplicating get_cabac (cannot be done yet 40 40 //as that would make optimization work hard) -
trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/idct_sse2_xvid.c
diff --git a/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/idct_sse2_xvid.c b/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/idct_sse2_xvid.c
a b 345 345 346 346 inline void ff_idct_xvid_sse2(short *block) 347 347 { 348 #ifdef __ICL 349 // todo: make asm code compiled with ICL 350 ff_idct_xvid_mmxext(block); 351 #else 348 352 __asm__ volatile( 349 353 "movq "MANGLE(m127)", %%mm0 \n\t" 350 354 iMTX_MULT("(%0)", MANGLE(iTab1), ROUND(walkenIdctRounders), PUT_EVEN(ROW0)) … … 390 394 #endif 391 395 "%eax", "%ecx", "%edx", "%esi", "memory" 392 396 ); 397 #endif 393 398 } 394 399 395 400 void ff_idct_xvid_sse2_put(uint8_t *dest, int line_size, short *block) -
trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/mathops.h
diff --git a/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/mathops.h b/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/mathops.h
a b 99 99 ); 100 100 #endif /* HAVE_I686 */ 101 101 102 #ifdef __ICL 102 103 #define MASK_ABS(mask, level) \ 104 __asm__ ("cdq \n\t" \ 105 "xorl %1, %0 \n\t" \ 106 "subl %1, %0 \n\t" \ 107 : "+a"(level), "=&d"(mask)) 108 #else 109 #define MASK_ABS(mask, level) \ 103 110 __asm__ ("cltd \n\t" \ 104 111 "xorl %1, %0 \n\t" \ 105 112 "subl %1, %0 \n\t" \ 106 113 : "+a"(level), "=&d"(mask)) 114 #endif 107 115 108 116 // avoid +32 for shift optimization (gcc should do that ...) 109 117 #define NEG_SSR32 NEG_SSR32 -
trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/motion_est.c
diff --git a/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/motion_est.c b/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/motion_est.c
a b 173 173 static inline void sad8_4_mmxext(uint8_t *blk1, uint8_t *blk2, 174 174 int stride, int h) 175 175 { 176 #ifdef __ICL 177 __asm__ volatile( 178 "movq %4, %%mm5 \n\t" 179 "movq (%1), %%mm0 \n\t" 180 "pavgb 1(%1), %%mm0 \n\t" 181 "add %3, %1 \n\t" 182 ".p2align 4 \n\t" 183 "1: \n\t" 184 "movq (%1), %%mm1 \n\t" 185 "movq (%1,%3), %%mm2 \n\t" 186 "pavgb 1(%1), %%mm1 \n\t" 187 "pavgb 1(%1,%3), %%mm2 \n\t" 188 "psubusb %%mm5, %%mm1 \n\t" 189 "pavgb %%mm1, %%mm0 \n\t" 190 "pavgb %%mm2, %%mm1 \n\t" 191 "psadbw (%2), %%mm0 \n\t" 192 "psadbw (%2,%3), %%mm1 \n\t" 193 "paddw %%mm0, %%mm6 \n\t" 194 "paddw %%mm1, %%mm6 \n\t" 195 "movq %%mm2, %%mm0 \n\t" 196 "lea (%1,%3,2), %1 \n\t" 197 "lea (%2,%3,2), %2 \n\t" 198 "sub $2, %0 \n\t" 199 " jg 1b \n\t" 200 : "+r" (h), "+r" (blk1), "+r" (blk2) 201 : "r" ((x86_reg)stride), "m"(bone) 202 ); 203 #else 176 204 __asm__ volatile( 177 205 "movq "MANGLE(bone)", %%mm5 \n\t" 178 206 "movq (%1), %%mm0 \n\t" … … 199 227 : "+r" (h), "+r" (blk1), "+r" (blk2) 200 228 : "r" ((x86_reg)stride) 201 229 ); 230 #endif 202 231 } 203 232 204 233 static inline void sad8_2_mmx(uint8_t *blk1a, uint8_t *blk1b, uint8_t *blk2, int stride, int h) … … 242 271 static inline void sad8_4_mmx(uint8_t *blk1, uint8_t *blk2, int stride, int h) 243 272 { 244 273 x86_reg len= -(x86_reg)stride*h; 274 #ifdef __ICL 245 275 __asm__ volatile( 246 276 "movq (%1, %%"REG_a"), %%mm0 \n\t" 247 277 "movq 1(%1, %%"REG_a"), %%mm2 \n\t" … … 265 295 "punpckhbw %%mm7, %%mm5 \n\t" 266 296 "paddw %%mm4, %%mm2 \n\t" 267 297 "paddw %%mm5, %%mm3 \n\t" 298 "movq 16+%5, %%mm5 \n\t" 299 "paddw %%mm2, %%mm0 \n\t" 300 "paddw %%mm3, %%mm1 \n\t" 301 "paddw %%mm5, %%mm0 \n\t" 302 "paddw %%mm5, %%mm1 \n\t" 303 "movq (%3, %%"REG_a"), %%mm4 \n\t" 304 "movq (%3, %%"REG_a"), %%mm5 \n\t" 305 "psrlw $2, %%mm0 \n\t" 306 "psrlw $2, %%mm1 \n\t" 307 "packuswb %%mm1, %%mm0 \n\t" 308 "psubusb %%mm0, %%mm4 \n\t" 309 "psubusb %%mm5, %%mm0 \n\t" 310 "por %%mm4, %%mm0 \n\t" 311 "movq %%mm0, %%mm4 \n\t" 312 "punpcklbw %%mm7, %%mm0 \n\t" 313 "punpckhbw %%mm7, %%mm4 \n\t" 314 "paddw %%mm0, %%mm6 \n\t" 315 "paddw %%mm4, %%mm6 \n\t" 316 "movq %%mm2, %%mm0 \n\t" 317 "movq %%mm3, %%mm1 \n\t" 318 "add %4, %%"REG_a" \n\t" 319 " js 1b \n\t" 320 : "+a" (len) 321 : "r" (blk1 - len), "r" (blk1 -len + stride), "r" (blk2 - len), "r" ((x86_reg)stride), "m"(round_tab) 322 ); 323 #else 324 __asm__ volatile( 325 "movq (%1, %%"REG_a"), %%mm0 \n\t" 326 "movq 1(%1, %%"REG_a"), %%mm2 \n\t" 327 "movq %%mm0, %%mm1 \n\t" 328 "movq %%mm2, %%mm3 \n\t" 329 "punpcklbw %%mm7, %%mm0 \n\t" 330 "punpckhbw %%mm7, %%mm1 \n\t" 331 "punpcklbw %%mm7, %%mm2 \n\t" 332 "punpckhbw %%mm7, %%mm3 \n\t" 333 "paddw %%mm2, %%mm0 \n\t" 334 "paddw %%mm3, %%mm1 \n\t" 335 ".p2align 4 \n\t" 336 "1: \n\t" 337 "movq (%2, %%"REG_a"), %%mm2 \n\t" 338 "movq 1(%2, %%"REG_a"), %%mm4 \n\t" 339 "movq %%mm2, %%mm3 \n\t" 340 "movq %%mm4, %%mm5 \n\t" 341 "punpcklbw %%mm7, %%mm2 \n\t" 342 "punpckhbw %%mm7, %%mm3 \n\t" 343 "punpcklbw %%mm7, %%mm4 \n\t" 344 "punpckhbw %%mm7, %%mm5 \n\t" 345 "paddw %%mm4, %%mm2 \n\t" 346 "paddw %%mm5, %%mm3 \n\t" 268 347 "movq 16+"MANGLE(round_tab)", %%mm5 \n\t" 269 348 "paddw %%mm2, %%mm0 \n\t" 270 349 "paddw %%mm3, %%mm1 \n\t" … … 290 369 : "+a" (len) 291 370 : "r" (blk1 - len), "r" (blk1 -len + stride), "r" (blk2 - len), "r" ((x86_reg)stride) 292 371 ); 372 #endif 293 373 } 294 374 295 375 static inline int sum_mmx(void) -
trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/simple_idct.c
diff --git a/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/simple_idct.c b/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/simple_idct.c
a b 337 337 338 338 #else 339 339 340 #ifdef __ICL 340 341 #define DC_COND_IDCT(src0, src4, src1, src5, dst, rounder, shift) \ 341 342 "movq " #src0 ", %%mm0 \n\t" /* R4 R0 r4 r0 */\ 342 343 "movq " #src4 ", %%mm1 \n\t" /* R6 R2 r6 r2 */\ 343 344 "movq " #src1 ", %%mm2 \n\t" /* R3 R1 r3 r1 */\ 344 345 "movq " #src5 ", %%mm3 \n\t" /* R7 R5 r7 r5 */\ 346 "movq %3, %%mm4 \n\t"\ 347 "pand %%mm0, %%mm4 \n\t"\ 348 "por %%mm1, %%mm4 \n\t"\ 349 "por %%mm2, %%mm4 \n\t"\ 350 "por %%mm3, %%mm4 \n\t"\ 351 "packssdw %%mm4,%%mm4 \n\t"\ 352 "movd %%mm4, %%eax \n\t"\ 353 "orl %%eax, %%eax \n\t"\ 354 "jz 1f \n\t"\ 355 "movq 16(%2), %%mm4 \n\t" /* C4 C4 C4 C4 */\ 356 "pmaddwd %%mm0, %%mm4 \n\t" /* C4R4+C4R0 C4r4+C4r0 */\ 357 "movq 24(%2), %%mm5 \n\t" /* -C4 C4 -C4 C4 */\ 358 "pmaddwd %%mm5, %%mm0 \n\t" /* -C4R4+C4R0 -C4r4+C4r0 */\ 359 "movq 32(%2), %%mm5 \n\t" /* C6 C2 C6 C2 */\ 360 "pmaddwd %%mm1, %%mm5 \n\t" /* C6R6+C2R2 C6r6+C2r2 */\ 361 "movq 40(%2), %%mm6 \n\t" /* -C2 C6 -C2 C6 */\ 362 "pmaddwd %%mm6, %%mm1 \n\t" /* -C2R6+C6R2 -C2r6+C6r2 */\ 363 "movq 48(%2), %%mm7 \n\t" /* C3 C1 C3 C1 */\ 364 "pmaddwd %%mm2, %%mm7 \n\t" /* C3R3+C1R1 C3r3+C1r1 */\ 365 #rounder ", %%mm4 \n\t"\ 366 "movq %%mm4, %%mm6 \n\t" /* C4R4+C4R0 C4r4+C4r0 */\ 367 "paddd %%mm5, %%mm4 \n\t" /* A0 a0 */\ 368 "psubd %%mm5, %%mm6 \n\t" /* A3 a3 */\ 369 "movq 56(%2), %%mm5 \n\t" /* C7 C5 C7 C5 */\ 370 "pmaddwd %%mm3, %%mm5 \n\t" /* C7R7+C5R5 C7r7+C5r5 */\ 371 #rounder ", %%mm0 \n\t"\ 372 "paddd %%mm0, %%mm1 \n\t" /* A1 a1 */\ 373 "paddd %%mm0, %%mm0 \n\t" \ 374 "psubd %%mm1, %%mm0 \n\t" /* A2 a2 */\ 375 "pmaddwd 64(%2), %%mm2 \n\t" /* -C7R3+C3R1 -C7r3+C3r1 */\ 376 "paddd %%mm5, %%mm7 \n\t" /* B0 b0 */\ 377 "movq 72(%2), %%mm5 \n\t" /* -C5 -C1 -C5 -C1 */\ 378 "pmaddwd %%mm3, %%mm5 \n\t" /* -C5R7-C1R5 -C5r7-C1r5 */\ 379 "paddd %%mm4, %%mm7 \n\t" /* A0+B0 a0+b0 */\ 380 "paddd %%mm4, %%mm4 \n\t" /* 2A0 2a0 */\ 381 "psubd %%mm7, %%mm4 \n\t" /* A0-B0 a0-b0 */\ 382 "paddd %%mm2, %%mm5 \n\t" /* B1 b1 */\ 383 "psrad $" #shift ", %%mm7 \n\t"\ 384 "psrad $" #shift ", %%mm4 \n\t"\ 385 "movq %%mm1, %%mm2 \n\t" /* A1 a1 */\ 386 "paddd %%mm5, %%mm1 \n\t" /* A1+B1 a1+b1 */\ 387 "psubd %%mm5, %%mm2 \n\t" /* A1-B1 a1-b1 */\ 388 "psrad $" #shift ", %%mm1 \n\t"\ 389 "psrad $" #shift ", %%mm2 \n\t"\ 390 "packssdw %%mm1, %%mm7 \n\t" /* A1+B1 a1+b1 A0+B0 a0+b0 */\ 391 "packssdw %%mm4, %%mm2 \n\t" /* A0-B0 a0-b0 A1-B1 a1-b1 */\ 392 "movq %%mm7, " #dst " \n\t"\ 393 "movq " #src1 ", %%mm1 \n\t" /* R3 R1 r3 r1 */\ 394 "movq 80(%2), %%mm4 \n\t" /* -C1 C5 -C1 C5 */\ 395 "movq %%mm2, 24+" #dst " \n\t"\ 396 "pmaddwd %%mm1, %%mm4 \n\t" /* -C1R3+C5R1 -C1r3+C5r1 */\ 397 "movq 88(%2), %%mm7 \n\t" /* C3 C7 C3 C7 */\ 398 "pmaddwd 96(%2), %%mm1 \n\t" /* -C5R3+C7R1 -C5r3+C7r1 */\ 399 "pmaddwd %%mm3, %%mm7 \n\t" /* C3R7+C7R5 C3r7+C7r5 */\ 400 "movq %%mm0, %%mm2 \n\t" /* A2 a2 */\ 401 "pmaddwd 104(%2), %%mm3 \n\t" /* -C1R7+C3R5 -C1r7+C3r5 */\ 402 "paddd %%mm7, %%mm4 \n\t" /* B2 b2 */\ 403 "paddd %%mm4, %%mm2 \n\t" /* A2+B2 a2+b2 */\ 404 "psubd %%mm4, %%mm0 \n\t" /* a2-B2 a2-b2 */\ 405 "psrad $" #shift ", %%mm2 \n\t"\ 406 "psrad $" #shift ", %%mm0 \n\t"\ 407 "movq %%mm6, %%mm4 \n\t" /* A3 a3 */\ 408 "paddd %%mm1, %%mm3 \n\t" /* B3 b3 */\ 409 "paddd %%mm3, %%mm6 \n\t" /* A3+B3 a3+b3 */\ 410 "psubd %%mm3, %%mm4 \n\t" /* a3-B3 a3-b3 */\ 411 "psrad $" #shift ", %%mm6 \n\t"\ 412 "packssdw %%mm6, %%mm2 \n\t" /* A3+B3 a3+b3 A2+B2 a2+b2 */\ 413 "movq %%mm2, 8+" #dst " \n\t"\ 414 "psrad $" #shift ", %%mm4 \n\t"\ 415 "packssdw %%mm0, %%mm4 \n\t" /* A2-B2 a2-b2 A3-B3 a3-b3 */\ 416 "movq %%mm4, 16+" #dst " \n\t"\ 417 "jmp 2f \n\t"\ 418 "1: \n\t"\ 419 "pslld $16, %%mm0 \n\t"\ 420 "paddd %4, %%mm0 \n\t"\ 421 "psrad $13, %%mm0 \n\t"\ 422 "packssdw %%mm0, %%mm0 \n\t"\ 423 "movq %%mm0, " #dst " \n\t"\ 424 "movq %%mm0, 8+" #dst " \n\t"\ 425 "movq %%mm0, 16+" #dst " \n\t"\ 426 "movq %%mm0, 24+" #dst " \n\t"\ 427 "2: \n\t" 428 #else 429 #define DC_COND_IDCT(src0, src4, src1, src5, dst, rounder, shift) \ 430 "movq " #src0 ", %%mm0 \n\t" /* R4 R0 r4 r0 */\ 431 "movq " #src4 ", %%mm1 \n\t" /* R6 R2 r6 r2 */\ 432 "movq " #src1 ", %%mm2 \n\t" /* R3 R1 r3 r1 */\ 433 "movq " #src5 ", %%mm3 \n\t" /* R7 R5 r7 r5 */\ 345 434 "movq "MANGLE(wm1010)", %%mm4 \n\t"\ 346 435 "pand %%mm0, %%mm4 \n\t"\ 347 436 "por %%mm1, %%mm4 \n\t"\ … … 424 513 "movq %%mm0, 16+" #dst " \n\t"\ 425 514 "movq %%mm0, 24+" #dst " \n\t"\ 426 515 "2: \n\t" 516 #endif 427 517 428 518 #define Z_COND_IDCT(src0, src4, src1, src5, dst, rounder, shift, bt) \ 429 519 "movq " #src0 ", %%mm0 \n\t" /* R4 R0 r4 r0 */\ … … 1141 1231 */ 1142 1232 1143 1233 "9: \n\t" 1234 #ifdef __ICL 1235 :: "r" (block), "r" (temp), "r" (coeffs), "m"(wm1010), "m"(d40000) 1236 #else 1144 1237 :: "r" (block), "r" (temp), "r" (coeffs) 1238 #endif 1145 1239 : "%eax" 1146 1240 ); 1147 1241 } -
trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/vc1dsp_mmx.c
diff --git a/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/vc1dsp_mmx.c b/trunk/ffmpeg/src/ffmpeg-2.0.1/libavcodec/x86/vc1dsp_mmx.c
a b 33 33 #include "dsputil_x86.h" 34 34 #include "vc1dsp.h" 35 35 36 #if HAVE_INLINE_ASM 36 //todo: make asm code below compiled with ICL 37 #if HAVE_INLINE_ASM && !defined(__ICL) 37 38 38 39 #define OP_PUT(S,D) 39 40 #define OP_AVG(S,D) "pavgb " #S ", " #D " \n\t"
