Ticket #3048: ICL_HAVE_INLINE.git.patch

File ICL_HAVE_INLINE.git.patch, 17.4 KB (added by nikolaynnov, 6 years ago)

small path to compile ffmpeg with ICL and HAVE_INLINE_ASM

  • 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  
    3434#       define BROKEN_COMPILER 0
    3535#endif
    3636
    37 #if HAVE_INLINE_ASM
     37//todo: make code compiled with ICL
     38#if HAVE_INLINE_ASM && !defined(__ICL)
    3839
    3940#ifdef BROKEN_RELOCATIONS
    4041#define TABLES_ARG , "r"(tables)
     
    189190    );
    190191    return bit & 1;
    191192}
    192 #endif /* HAVE_7REGS */
     193#endif // HAVE_7REGS
    193194
    194195#define get_cabac_bypass_sign get_cabac_bypass_sign_x86
    195196static av_always_inline int get_cabac_bypass_sign_x86(CABACContext *c, int val)
     
    270271    );
    271272    return res;
    272273}
    273 #endif /* !BROKEN_COMPILER */
     274#endif // !BROKEN_COMPILER
    274275
    275276#endif /* HAVE_INLINE_ASM */
    276277#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  
    111111void ff_put_signed_pixels_clamped_mmx(const int16_t *block, uint8_t *pixels,
    112112                                      int line_size)
    113113{
     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
    114132    x86_reg line_skip = line_size;
    115133    x86_reg line_skip3;
    116134
     
    123141        : "+&r"(pixels), "=&r"(line_skip3)
    124142        : "r"(block), "r"(line_skip)
    125143        : "memory");
     144#endif
    126145}
    127146
    128147void 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  
    3434#include "libavcodec/cabac.h"
    3535#include "cabac.h"
    3636
    37 #if HAVE_INLINE_ASM
     37#if HAVE_INLINE_ASM && !defined(__ICL)
    3838
    3939//FIXME use some macros to avoid duplicating get_cabac (cannot be done yet
    4040//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  
    345345
    346346inline void ff_idct_xvid_sse2(short *block)
    347347{
     348#ifdef __ICL
     349    // todo: make asm code compiled with ICL
     350    ff_idct_xvid_mmxext(block);
     351#else
    348352    __asm__ volatile(
    349353    "movq     "MANGLE(m127)", %%mm0                              \n\t"
    350354    iMTX_MULT("(%0)",     MANGLE(iTab1), ROUND(walkenIdctRounders),      PUT_EVEN(ROW0))
     
    390394#endif
    391395      "%eax", "%ecx", "%edx", "%esi", "memory"
    392396    );
     397#endif
    393398}
    394399
    395400void 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  
    9999);
    100100#endif /* HAVE_I686 */
    101101
     102#ifdef __ICL
    102103#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)                   \
    103110    __asm__ ("cltd                   \n\t"      \
    104111             "xorl %1, %0            \n\t"      \
    105112             "subl %1, %0            \n\t"      \
    106113             : "+a"(level), "=&d"(mask))
     114#endif
    107115
    108116// avoid +32 for shift optimization (gcc should do that ...)
    109117#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  
    173173static inline void sad8_4_mmxext(uint8_t *blk1, uint8_t *blk2,
    174174                                 int stride, int h)
    175175{
     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
    176204    __asm__ volatile(
    177205        "movq "MANGLE(bone)", %%mm5     \n\t"
    178206        "movq (%1), %%mm0               \n\t"
     
    199227        : "+r" (h), "+r" (blk1), "+r" (blk2)
    200228        : "r" ((x86_reg)stride)
    201229    );
     230#endif
    202231}
    203232
    204233static inline void sad8_2_mmx(uint8_t *blk1a, uint8_t *blk1b, uint8_t *blk2, int stride, int h)
     
    242271static inline void sad8_4_mmx(uint8_t *blk1, uint8_t *blk2, int stride, int h)
    243272{
    244273    x86_reg len= -(x86_reg)stride*h;
     274#ifdef __ICL
    245275    __asm__ volatile(
    246276        "movq (%1, %%"REG_a"), %%mm0    \n\t"
    247277        "movq 1(%1, %%"REG_a"), %%mm2   \n\t"
     
    265295        "punpckhbw %%mm7, %%mm5         \n\t"
    266296        "paddw %%mm4, %%mm2             \n\t"
    267297        "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"
    268347        "movq 16+"MANGLE(round_tab)", %%mm5 \n\t"
    269348        "paddw %%mm2, %%mm0             \n\t"
    270349        "paddw %%mm3, %%mm1             \n\t"
     
    290369        : "+a" (len)
    291370        : "r" (blk1 - len), "r" (blk1 -len + stride), "r" (blk2 - len), "r" ((x86_reg)stride)
    292371    );
     372#endif
    293373}
    294374
    295375static 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  
    337337
    338338#else
    339339
     340#ifdef __ICL
    340341#define DC_COND_IDCT(src0, src4, src1, src5, dst, rounder, shift) \
    341342        "movq " #src0 ", %%mm0          \n\t" /* R4     R0      r4      r0 */\
    342343        "movq " #src4 ", %%mm1          \n\t" /* R6     R2      r6      r2 */\
    343344        "movq " #src1 ", %%mm2          \n\t" /* R3     R1      r3      r1 */\
    344345        "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 */\
    345434        "movq "MANGLE(wm1010)", %%mm4   \n\t"\
    346435        "pand %%mm0, %%mm4              \n\t"\
    347436        "por %%mm1, %%mm4               \n\t"\
     
    424513        "movq %%mm0, 16+" #dst "        \n\t"\
    425514        "movq %%mm0, 24+" #dst "        \n\t"\
    426515        "2:                             \n\t"
     516#endif
    427517
    428518#define Z_COND_IDCT(src0, src4, src1, src5, dst, rounder, shift, bt) \
    429519        "movq " #src0 ", %%mm0          \n\t" /* R4     R0      r4      r0 */\
     
    11411231*/
    11421232
    11431233"9: \n\t"
     1234#ifdef __ICL
     1235                :: "r" (block), "r" (temp), "r" (coeffs), "m"(wm1010), "m"(d40000)
     1236#else
    11441237                :: "r" (block), "r" (temp), "r" (coeffs)
     1238#endif
    11451239                : "%eax"
    11461240        );
    11471241}
  • 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  
    3333#include "dsputil_x86.h"
    3434#include "vc1dsp.h"
    3535
    36 #if HAVE_INLINE_ASM
     36//todo: make asm code below compiled with ICL
     37#if HAVE_INLINE_ASM && !defined(__ICL)
    3738
    3839#define OP_PUT(S,D)
    3940#define OP_AVG(S,D) "pavgb " #S ", " #D " \n\t"