<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><div>I remember we have IDCT asm code, how many cycles/performance on your version? </div>
<div><br>At 2014-11-21 11:24:08,dtyx265@gmail.com wrote:<br>># HG changeset patch<br>># User David T Yuen <dtyx265@gmail.com><br>># Date 1416540113 28800<br>># Node ID f4a932dba6993d8bcff3ddea7dc8c83c55d52396<br>># Parent  1d17ec0cb9548194b90495c5d7c94552c71abbf5<br>>asm: idct8 sse2<br>><br>>this version is based directly on the sse3 intrinsic<br>>basically, it's the intrinsic version with almost no optimizations<br>>but I thought it might be a better starting point for optimization<br>>than gcc's optimized output<br>><br>>diff -r 1d17ec0cb954 -r f4a932dba699 source/common/x86/asm-primitives.cpp<br>>--- a/source/common/x86/asm-primitives.cpp     Thu Nov 20 20:04:02 2014 +0530<br>>+++ b/source/common/x86/asm-primitives.cpp    Thu Nov 20 19:21:53 2014 -0800<br>>@@ -1376,6 +1376,7 @@<br>>         p.dct[DCT_4x4] = x265_dct4_sse2;<br>>         p.idct[IDCT_4x4] = x265_idct4_sse2;<br>>         p.idct[IDST_4x4] = x265_idst4_sse2;<br>>+        p.idct[IDCT_8x8] = x265_idct8_sse2;<br>> <br>>         LUMA_SS_FILTERS(_sse2);<br>>     }<br>>@@ -1564,6 +1565,7 @@<br>> <br>>         p.dct[DCT_4x4] = x265_dct4_sse2;<br>>         p.idct[IDCT_4x4] = x265_idct4_sse2;<br>>+        p.idct[IDCT_8x8] = x265_idct8_sse2;<br>>         p.idct[IDST_4x4] = x265_idst4_sse2;<br>> <br>>         p.planecopy_sp = x265_downShift_16_sse2;<br>>diff -r 1d17ec0cb954 -r f4a932dba699 source/common/x86/dct8.asm<br>>--- a/source/common/x86/dct8.asm  Thu Nov 20 20:04:02 2014 +0530<br>>+++ b/source/common/x86/dct8.asm      Thu Nov 20 19:21:53 2014 -0800<br>>@@ -302,6 +302,19 @@<br>> <br>> pb_idct8odd:    db 2, 3, 6, 7, 10, 11, 14, 15, 2, 3, 6, 7, 10, 11, 14, 15<br>> <br>>+tab_idct8:  times 4 dw  89,  75<br>>+            times 4 dw  50,  18<br>>+            times 4 dw  75, -18<br>>+            times 4 dw  -89, -50<br>>+            times 4 dw  50, -89<br>>+            times 4 dw  18,  75<br>>+            times 4 dw  18, -50<br>>+            times 4 dw  75, -89<br>>+            times 4 dw  64,  64<br>>+            times 4 dw  64, -64<br>>+            times 4 dw  83,  36<br>>+            times 4 dw  36, -83<br>>+<br>> SECTION .text<br>> cextern pd_1<br>> cextern pd_2<br>>@@ -974,6 +987,437 @@<br>>     RET<br>> <br>> ;-------------------------------------------------------<br>>+; void idct8(int32_t *src, int16_t *dst, intptr_t stride)<br>>+;-------------------------------------------------------<br>>+INIT_XMM sse2<br>>+<br>>+%if BIT_DEPTH == 10<br>>+    %define     IDCT_SHIFT 10<br>>+    %define     IDCT_ADD pd_512<br>>+%elif BIT_DEPTH == 8<br>>+    %define     IDCT_SHIFT 12<br>>+    %define     IDCT_ADD pd_2048<br>>+%else<br>>+    %error Unsupported BIT_DEPTH!<br>>+%endif<br>>+<br>>+cglobal idct8, 3,7, 16<br>>+    lea         r2, [r2 + r2]                           ;set r2 to index of 1<br>>+    lea         r4, [r2 + r2]                           ;set r4 to index of 2<br>>+    lea         r3, [r4 + r2]                           ;set r3 to index of 3<br>>+    lea         r4, [r4 + r3]                      ;set r4 to index of 5<br>>+    mov         r5, rsp<br>>+    and         r5, ~(16-1)<br>>+    movaps      m6, [r0 + 1 * 16]               ;m6 = m128iS1 = _mm_load_si128((__m128i*)&src[8 + 0]);<br>>+    movaps      m15, [r0 + 3 * 16]              ;m15 = m128iS3 = _mm_load_si128((__m128i*)&src[24 + 0]);<br>>+    mova        m7, m6                          ;m7 = m6, copy m128iS1 to m1<br>>+    punpcklwd   m6, m15                         ;m6 = m128Tmp0 = _mm_unpacklo_epi16(m6 = m128iS1, m15 = m128iS3);<br>>+    mova        m0, [tab_idct8 + 0 * 16]        ;m0 = tab_idct_8x8[0];<br>>+    mova        m1, m0                          ;m1 = m0, copy tab_idct_8x8[0] to m1<br>>+    pmaddwd     m0, m6                          ;m0 = E1l = _mm_madd_epi16(m6 = m128Tmp0, _mm_load_si128((__m128i*)(m0 = tab_idct_8x8[0])));<br>>+    punpckhwd   m7, m15                         ;m7 = m128Tmp1 = _mm_unpackhi_epi16(m7 = m128iS1 , m15 = m128iS3);<br>>+    mova        m12, [r0 + 5 * 16]              ;m12 = m128iS5 = _mm_load_si128((__m128i*)&src[40 + 0]);<br>>+    pmaddwd     m1, m7                          ;m1 = E1h = _mm_madd_epi16(m7 = m128Tmp1, _mm_load_si128((__m128i*)(m1 = tab_idct_8x8[0])));<br>>+    movu        m15, [r0 + 7 * 16]              ;m15 = m128iS7 = _mm_load_si128((__m128i*)&src[56 + 0]);<br>>+    mova        m13, m12                        ;m13 = m12, copy m128iS5 to m13<br>>+    punpcklwd   m12, m15                        ;m12 = m128Tmp2 = _mm_unpacklo_epi16(m12 = m128iS5, m15 = m128iS7);<br>>+    movu        m8, [tab_idct8 + 1 * 16]        ;m8 = tab_idct_8x8[1];<br>>+    movu        m9, m8                          ;m9 = m8, copy tab_idct_8x8[1] to m9<br>>+    pmaddwd     m8, m12                         ;m8 = E2l = _mm_madd_epi16(m12 = m128Tmp2, _mm_load_si128((__m128i*)(m8 = tab_idct_8x8[1])));<br>>+    punpckhwd   m13, m15                        ;m13 = m128Tmp3 = _mm_unpackhi_epi16(m13 = m128iS5, m15 = m128iS7);<br>>+    pmaddwd     m9, m13                         ;m9 = E2h = _mm_madd_epi16(m13 = m128Tmp3, _mm_load_si128((__m128i*)(m9 = tab_idct_8x8[1])));<br>>+    paddd       m0, m8                          ;m0 = O0l = _mm_add_epi32(m0 = E1l, m8 = E2l);<br>>+    paddd       m1, m9                          ;m1 = O0h = _mm_add_epi32(m1 = E1h, m9 = E2h);<br>>+    mova        m2, [tab_idct8 + 2 * 16]        ;m2 = tab_idct_8x8[2];<br>>+    mova        m3, m2                          ;m3 = m2, copy tab_idct_8x8[2] to m3<br>>+    pmaddwd     m2, m6                          ;m2 = E1l = _mm_madd_epi16(m6 = m128Tmp0, _mm_load_si128((__m128i*)(m2 = tab_idct_8x8[2])));<br>>+    pmaddwd     m3, m7                          ;m3 = E1h = _mm_madd_epi16(m7 = m128Tmp1, _mm_load_si128((__m128i*)(m3 = tab_idct_8x8[2])));<br>>+    mova        m8, [tab_idct8 + 3 * 16]        ;m8 = tab_idct_8x8[3];<br>>+    mova        m9, m8                          ;m9 = m8, copy tab_idct_8x8[3] to m9<br>>+    pmaddwd     m8, m12                         ;m8 = E2l = _mm_madd_epi16(m12 = m128Tmp2, _mm_load_si128((__m128i*)(m8 = tab_idct_8x8[3])));<br>>+    pmaddwd     m9, m13                         ;m9 = E2h = _mm_madd_epi16(m13 = m128Tmp3, _mm_load_si128((__m128i*)(m9 = tab_idct_8x8[3])));<br>>+    paddd       m2, m8                          ;m2 = O1l = _mm_add_epi32(m2 = E1l, m8 = E2l);<br>>+    paddd       m3, m9                          ;m3 = O1h = _mm_add_epi32(m3 = E1h, m9 = E2h);<br>>+    mova        m4, [tab_idct8 + 4 * 16]        ;m4 = tab_idct_8x8[4];<br>>+    mova        m5, m4                          ;m5 = m4, copy tab_idct_8x8[4] to m5<br>>+    pmaddwd     m4, m6                          ;m4 = E1l = _mm_madd_epi16(m6 = m128Tmp0, _mm_load_si128((__m128i*)(m4 = tab_idct_8x8[4])));<br>>+    pmaddwd     m5, m7                          ;m5 = E1h = _mm_madd_epi16(m7 = m128Tmp1, _mm_load_si128((__m128i*)(m5 = tab_idct_8x8[4])));<br>>+    mova        m8, [tab_idct8 + 5 * 16]        ;m8 = tab_idct_8x8[5];<br>>+    mova        m9, m8                          ;m9 = m8, copy tab_idct_8x8[5] to m9<br>>+    pmaddwd     m8, m12                         ;m8 = E2l = _mm_madd_epi16(m12 = m128Tmp2, _mm_load_si128((__m128i*)(m8 = tab_idct_8x8[5])));<br>>+    pmaddwd     m9, m13                         ;m9 = E2h = _mm_madd_epi16(m13 = m128Tmp3, _mm_load_si128((__m128i*)(m9 = tab_idct_8x8[5])));<br>>+    paddd       m4, m8                          ;m4 = O2l = _mm_add_epi32(m4 = E1l, m8 = E2l);<br>>+    paddd       m5, m9                          ;m5 = O2h = _mm_add_epi32(m5 = E1h, m9 = E2h);<br>>+    pmaddwd     m6, [tab_idct8 + 6 * 16]        ;m6 = E1l = _mm_madd_epi16(m6 = m128Tmp0, _mm_load_si128((__m128i*)(tab_idct_8x8[6])));<br>>+    pmaddwd     m7, [tab_idct8 + 6 * 16]        ;m7 = E1h = _mm_madd_epi16(m7 = m128Tmp1, _mm_load_si128((__m128i*)(tab_idct_8x8[6])));<br>>+    pmaddwd     m12, [tab_idct8 + 7 * 16]       ;m12 = E2l = _mm_madd_epi16(m12 = m128Tmp2, _mm_load_si128((__m128i*)(tab_idct_8x8[7])));<br>>+    pmaddwd     m13, [tab_idct8 + 7 * 16]       ;m13 = E2h = _mm_madd_epi16(m13 = m128Tmp3, _mm_load_si128((__m128i*)(tab_idct_8x8[7])));<br>>+    paddd       m6, m12                         ;m6 = O3l = _mm_add_epi32(m6 = E1l, m12 = E2l);<br>>+    paddd       m7, m13                         ;m7 = O3h = _mm_add_epi32(m7 = E1h, m13 = E2h);<br>>+<br>>+    ;/*    -------     */<br>>+<br>>+    mova        m8, [r0 + 0 * 16]                 ;m8 = m128iS0 = _mm_load_si128((__m128i*)&src[0 + 0]);<br>>+    mova        m15, [r0 + 4 * 16]                ;m15 = m128iS4 = _mm_load_si128((__m128i*)&src[32 + 0]);<br>>+    mova        m9, m8                          ;m9 = m8, copy m128iS0 to m9<br>>+    punpcklwd   m8, m15                         ;m8 = m128Tmp0 = _mm_unpacklo_epi16(m8 = m128iS0 , m15 = m128iS4);<br>>+    mova        m10, m8                         ;10 = m8, copy m128Tmp0 to m10<br>>+    pmaddwd     m8, [tab_idct8 + 8 * 16]        ;m8 = EE0l = _mm_madd_epi16(m8 = m128Tmp0, _mm_load_si128((__m128i*)(tab_idct_8x8[8])));<br>>+    punpckhwd   m9, m15                         ;m9 = m128Tmp1 = _mm_unpackhi_epi16(m9 = m128iS0, m15 = m128iS4);<br>>+    mova        m11, m9                         ;m11 = m9, copy m128Tmp1 to m11<br>>+    pmaddwd     m9, [tab_idct8 + 8 * 16]        ;m9 = EE0h = _mm_madd_epi16(m9 = m128Tmp1, _mm_load_si128((__m128i*)(tab_idct_8x8[8])));<br>>+    pmaddwd     m10, [tab_idct8 + 9 * 16]       ;m10 = EE1l = _mm_madd_epi16(m10 = m128Tmp0, _mm_load_si128((__m128i*)(tab_idct_8x8[9])));<br>>+    pmaddwd     m11, [tab_idct8 + 9 * 16]       ;m11 = EE1h = _mm_madd_epi16(m11 = m128Tmp1, _mm_load_si128((__m128i*)(tab_idct_8x8[9])));<br>>+<br>>+    ;/*    -------     */<br>>+<br>>+    mova        m12, [r0 + 2 * 16]              ;m12 = m128iS2 = _mm_load_si128((__m128i*)&src[16 + 0]);<br>>+    mova        m15, [r0 + 6 * 16]              ;m15 = m128iS6 = _mm_load_si128((__m128i*)&src[48 + 0]);<br>>+    mova        m13, m12                        ;m13 = m12, copy m128iS2 to m13<br>>+    punpcklwd   m12, m15                        ;m12 = m128Tmp0 = _mm_unpacklo_epi16(m12 = m128iS2, m15 = m128iS6);<br>>+    mova        m14, m12                        ;m14 = m12, copy m128Tmp0 to m14<br>>+    pmaddwd     m12, [tab_idct8 + 10 * 16]      ;m12 = E00l = _mm_madd_epi16(m12 = m128Tmp0, _mm_load_si128((__m128i*)(tab_idct_8x8[10])));<br>>+    punpckhwd   m13, m15                        ;m13 = m128Tmp1 = _mm_unpackhi_epi16(m13 = m128iS2, m15 = m128iS6);<br>>+    mova        m15, m13                        ;m15 = m13, copy m128Tmp1 to m15<br>>+    pmaddwd     m13, [tab_idct8 + 10 * 16]      ;m13 = E00h = _mm_madd_epi16(m13 = m128Tmp1, _mm_load_si128((__m128i*)(tab_idct_8x8[10])));<br>>+    pmaddwd     m14, [tab_idct8 + 11 * 16]      ;m14 = E01l = _mm_madd_epi16(m14 = m128Tmp0, _mm_load_si128((__m128i*)(tab_idct_8x8[11])));<br>>+    pmaddwd     m15, [tab_idct8 + 11 * 16]      ;m15 = E01h = _mm_madd_epi16(m15 = m128Tmp1, _mm_load_si128((__m128i*)(tab_idct_8x8[11])));<br>>+    mova        [r5 - 1 * 16], m12             ;s_1 = m12, copy E00l to stack[1]<br>>+    paddd       m12, m8                         ;m12 = E0l = _mm_add_epi32(m8 = EE0l, m12 = E00l);<br>>+    paddd       m12, [pd_64]                    ;m12 = E0l = _mm_add_epi32(m12 = E0l, pd_64);<br>>+    mova        [r5 - 2 * 16], m13             ;s_2 = m13, copy E00h to stack[2]<br>>+    paddd       m13, m9                         ;m13 = E0h = _mm_add_epi32(m9 = EE0h, m13 = E00h);<br>>+    paddd       m13, [pd_64]                    ;m13 = E0h = _mm_add_epi32(m13 = E0h, pd_64);<br>>+    psubd       m8, [r5 - 1 * 16]              ;m8 = E3l = _mm_sub_epi32(m8 = EE0l, s_1 = E00l);<br>>+    psubd       m9, [r5 - 2 * 16]              ;m9 = E3h = _mm_sub_epi32(m9 = EE0h, s_2 = E00h);<br>>+    paddd       m8, [pd_64]                     ;m8 = E3l = _mm_add_epi32(m8 = E3l, pd_64);<br>>+    mova        [r5 - 1 * 16], m14             ;s_1 = m14, copy E01l to stack[1]<br>>+    paddd       m9, [pd_64]                     ;m9 = E3h = _mm_add_epi32(m9 = E3h, pd_64);<br>>+    paddd       m14, m10                        ;m14 = E1l = _mm_add_epi32(m10 = EE1l, m14 = E01l);<br>>+    mova        [r5 - 2 * 16], m15             ;s_2 = m15, copy E01h to stack[2]<br>>+    paddd       m14, [pd_64]                    ;m14 = E1l = _mm_add_epi32(m14 = E1l, pd_64);<br>>+    paddd       m15, m11                        ;m15 = E1h = _mm_add_epi32(m11 = EE1h, m15 = E01h);<br>>+    paddd       m15, [pd_64]                    ;m15 = E1h = _mm_add_epi32(m15 = E1h, pd_64);<br>>+    psubd       m10, [r5 - 1 * 16]             ;m10 = E2l = _mm_sub_epi32(m10 = EE1l, s_1 = E01l);<br>>+    mova        [r5 - 1 * 16], m0              ;s_1 = m0, copy O0l to stack[1]<br>>+    paddd       m10, [pd_64]                    ;m10 = E2l = _mm_add_epi32(m10 = E2l, pd_64);<br>>+    psubd       m11, [r5 - 2 * 16]             ;m11 = E2h = _mm_sub_epi32(m11 = EE1h, s_2 = E01h);<br>>+    paddd       m11, [pd_64]                    ;m11 = E2h = _mm_add_epi32(m11 = E2h, pd_64);<br>>+    mova        [r5 - 2 * 16], m1              ;s_2 = m1, copy O0h to stack[2]<br>>+    ;m0 = m128iS0 = _mm_packs_epi32(_mm_srai_epi32(_mm_add_epi32(m12 = E0l, m0 = O0l), 7), _mm_srai_epi32(_mm_add_epi32(m13 = E0h, m1 = O0h), 7));<br>>+    paddd       m0, m12                         ;m0 = _mm_add_epi32(m12 = E0l, m0 = O0l)<br>>+    psrad       m0, 7                           ;m0 = _mm_srai_epi32(m0, 7)<br>>+    paddd       m1, m13                         ;m1 = _mm_add_epi32(m13 = E0h, m1 = O0h)<br>>+    psrad       m1, 7                           ;m1 = _mm_srai_epi32(m1, 7)<br>>+    packssdw    m0, m1                          ;m0 = m128iS0 = _mm_packs_epi32(m0 , m1)<br>>+    ;m12 = m128iS7 = _mm_packs_epi32(_mm_srai_epi32(_mm_sub_epi32(m12 = E0l, s_1 = O0l), 7), _mm_srai_epi32(_mm_sub_epi32(m13 = E0h, s_2 = O0h), 7));<br>>+    psubd       m12, [r5 - 1 * 16]             ;m12 = _mm_sub_epi32(m12 = E0l, s_1 = O0l)<br>>+    psrad       m12, 7                          ;m12 = _mm_srai_epi32(m12, 7)<br>>+    psubd       m13, [r5 - 2 * 16]             ;m13 = _mm_sub_epi32(m13 = E0h, s_2 = O0h)<br>>+    psrad       m13, 7                          ;m13 = _mm_srai_epi32(m13, 7)<br>>+    packssdw    m12, m13                        ;m12 = m128iS7 = _mm_packs_epi32(m12, m13)<br>>+    ;m2 = m128iS1 = _mm_packs_epi32(_mm_srai_epi32(_mm_add_epi32(m14 = E1l, m2 = O1l), 7), _mm_srai_epi32(_mm_add_epi32(m15 = E1h, m3 = O1h), 7));<br>>+    mova        m1, m2                          ;m1 = m2, copy O1l to m1<br>>+    mova        m13, m3                         ;m13 = m3, copy O1h to m13<br>>+    paddd       m2, m14                         ;m2 = _mm_add_epi32(m14 = E1l, m2 = O1l)<br>>+    psrad       m2, 7                           ;m2 = _mm_srai_epi32(m2, 7)<br>>+    paddd       m3 ,m15,                        ;m3 = _mm_add_epi32(m15 = E1h, m3 = O1h)<br>>+    psrad       m3, 7                           ;m3 = _mm_srai_epi32(m3, 7)<br>>+    packssdw    m2, m3                          ;m2 = m128iS1 = _mm_packs_epi32(m2, m3)<br>>+    ;m14 = m128iS6 = _mm_packs_epi32(_mm_srai_epi32(_mm_sub_epi32(m14 = E1l, m1 = O1l), 7), _mm_srai_epi32(_mm_sub_epi32(m15 = E1h, m13 = O1h), 7));<br>>+    psubd       m14, m1                         ;m14 = _mm_sub_epi32(m14 = E1l, m1 = O1l)<br>>+    psrad       m14, 7                          ;m14 = _mm_srai_epi32(m14, 7)<br>>+    psubd       m15, m13                        ;m15 = _mm_sub_epi32(m15 = E1h, m13 = O1h)<br>>+    psrad       m15, 7                          ;m15 = _mm_srai_epi32(m15, 7)<br>>+    packssdw    m14, m15                        ;m14 = m128iS6 = _mm_packs_epi32(m14, m15)<br>>+    ;m4 = m128iS2 = _mm_packs_epi32(_mm_srai_epi32(_mm_add_epi32(m10 = E2l, m4 = O2l), 7), _mm_srai_epi32(_mm_add_epi32(m11 = E2h, m5 = O2h), 7));<br>>+    mova        m3, m4                          ;m3 = m4, copy O2l to m3<br>>+    mova        m1, m5                          ;m1 = m5, copy O2h to m1<br>>+    paddd       m4, m10                         ;m4 = _mm_add_epi32(m10 = E2l, m4 = O2l)<br>>+    psrad       m4, 7                           ;m4 = _mm_srai_epi32(m4, 7)<br>>+    paddd       m5, m11                         ;m5 = _mm_add_epi32(m11 = E2h, m5 = O2h)<br>>+    psrad       m5, 7                           ;m5 = _mm_srai_epi32(m5, 7)<br>>+    packssdw    m4, m5                          ;m4 = m128iS2 = _mm_packs_epi32(m4, m5)<br>>+    ;m10 = m128iS5 = _mm_packs_epi32(_mm_srai_epi32(_mm_sub_epi32(m10 = E2l, m3 = O2l), 7), _mm_srai_epi32(_mm_sub_epi32(m11 = E2h, m1 = O2h), 7));<br>>+    psubd       m10, m3                         ;m10 = _mm_sub_epi32(m10 = E2l, m3 = O2l)<br>>+    psrad       m10, 7                          ;m10 = _mm_srai_epi32(m10, 7)<br>>+    psubd       m11, m1                         ;m11 = _mm_sub_epi32(m11 = E2h, m1 = O2h)<br>>+    psrad       m11, 7                          ;m11 = _mm_srai_epi32(m11, 7)<br>>+    packssdw    m10, m11                        ;m10 = m128iS5 = _mm_packs_epi32(m10, m11)<br>>+    ;m6 = m128iS3 = _mm_packs_epi32(_mm_srai_epi32(_mm_add_epi32(m8 = E3l, m6 = O3l), 7), _mm_srai_epi32(_mm_add_epi32(m9 = E3h, m7 = O3h), 7));<br>>+    mova        m13, m6                         ;m13 = m6, copy O3l to m13<br>>+    paddd       m6, m8                          ;m6 = _mm_add_epi32(m8 = E3l, m6 = O3l)<br>>+    psrad       m6, 7                           ;m6 = _mm_srai_epi32(m6, 7)<br>>+    mova        m15, m7                         ;m15 = m7, copy O3h to m15<br>>+    paddd       m7, m9                          ;m7 = _mm_add_epi32(m9 = E3h, m7 = O3h)<br>>+    psrad       m7, 7                           ;m7 = _mm_srai_epi32(m7, 7)<br>>+    packssdw    m6, m7                          ;m6 = m128iS3 = _mm_packs_epi32(m6, m7)<br>>+    ;m8 = m128iS4 = _mm_packs_epi32(_mm_srai_epi32(_mm_sub_epi32(m8 = E3l, m13 = O3l), 7), _mm_srai_epi32(_mm_sub_epi32(m9 = E3h, m15 = O3h), 7));<br>>+    psubd       m8, m13                         ;m8 = _mm_sub_epi32(m8 = E3l, m13 = O3l)<br>>+    psrad       m8, 7                           ;m8 = _mm_srai_epi32(m8, 7)<br>>+    psubd       m9, m15                         ;m9 = _mm_sub_epi32(m9 = E3h, m15 = O3h)<br>>+    psrad       m9, 7                           ;m9 = _mm_srai_epi32(m9, 7)<br>>+    packssdw    m8, m9                          ;m8 = m128iS4 = _mm_packs_epi32(m8, m9)<br>>+    ;    /*  Invers matrix   */<br>>+<br>>+    mova        m1, m0                          ;m1 = m0, copy m128iS0 to m1<br>>+    punpcklwd   m0, m8                          ;m0 = E0l = _mm_unpacklo_epi16(m0 = m128iS0, m8 = m128iS4);<br>>+    mova        m3, m2                          ;m3 = m2, copy m128iS1 to m3<br>>+    punpcklwd   m2, m10                         ;m2 = E1l = _mm_unpacklo_epi16(m2 = m128iS1, m10 = m128iS5);<br>>+    mova        m5, m4                          ;m5 = m4, copy m128iS2 to m5<br>>+    punpcklwd   m4, m14                         ;m4 = E2l = _mm_unpacklo_epi16(m4 = m128iS2, m14 = m128iS6);<br>>+    mova        m7, m6                          ;m7 = m6, copy m128iS3 to m7<br>>+    punpcklwd   m6, m12                         ;m6 = E3l = _mm_unpacklo_epi16(m6 = m128iS3, m12 = m128iS7);<br>>+    punpckhwd   m1, m8                          ;m1 = O0l = _mm_unpackhi_epi16(m1 = m128iS0, m8 = m128iS4);<br>>+    punpckhwd   m3, m10                         ;m3 = O1l = _mm_unpackhi_epi16(m3 = m128iS1, m10 = m128iS5);<br>>+    punpckhwd   m5, m14                         ;m5 = O2l = _mm_unpackhi_epi16(m5 = m128iS2, m14 = m128iS6);<br>>+    punpckhwd   m7, m12                         ;m7 = O3l = _mm_unpackhi_epi16(m7 = m128iS3, m12 = m128iS7);<br>>+    mova        m12, m0                         ;m12 = m0, copy E0l to m12<br>>+    punpcklwd   m0, m4                          ;m0 = m128Tmp0 = _mm_unpacklo_epi16(m0 = E0l, m4 = E2l);<br>>+    mova        m14, m0                         ;m14 = m0, copy m128Tmp0 to m14<br>>+    mova        m13, m2                         ;m13 = m2, copy E1l to m13<br>>+    punpcklwd   m2, m6                          ;m2 = m128Tmp1 = _mm_unpacklo_epi16(m2 = E1l, m6 = E3l);<br>>+    punpcklwd   m0, m2                          ;m0 = m128iS0 = _mm_unpacklo_epi16(m0 = m128Tmp0, m2 = m128Tmp1);<br>>+    punpckhwd   m14, m2                         ;m14 = m128iS1 = _mm_unpackhi_epi16(m14 = m128Tmp0, m2 = m128Tmp1);<br>>+    punpckhwd   m12, m4                         ;m12 = m128Tmp2 = _mm_unpackhi_epi16(m12 = E0l, m4 = E2l);<br>>+    mova        m2, m12                         ;m2 = m12, copy m128Tmp2 to m2<br>>+    punpckhwd   m13, m6                         ;m13 = m128Tmp3 = _mm_unpackhi_epi16(m13 = E1l, m6 = E3l);<br>>+    punpcklwd   m2, m13                         ;m2 = m128iS2 = _mm_unpacklo_epi16(m2 = m128Tmp2, m13 = m128Tmp3);<br>>+    punpckhwd   m12, m13                        ;m12 = m128iS3 = _mm_unpackhi_epi16(m12 = m128Tmp2, m13 = m128Tmp3);<br>>+    mova        m11, m1                         ;m11 = m1, copy O0l to m11<br>>+    punpcklwd   m1, m5                          ;m1 = m128Tmp0 = _mm_unpacklo_epi16(m1 = O0l, m5 = O2l);<br>>+    mova        m4, m1                          ;m4 = m1, copy m128Tmp0 to m4<br>>+    mova        m10, m3                         ;m10 = m3, copy O1l to m10<br>>+    punpcklwd   m3, m7                          ;m3 = m128Tmp1 = _mm_unpacklo_epi16(m3 = O1l, m7 = O3l);<br>>+    punpcklwd   m1, m3                          ;m1 = m128iS4 = _mm_unpacklo_epi16(m1 = m128Tmp0, m3 = m128Tmp1);<br>>+    punpckhwd   m4, m3                          ;m4 = m128iS5 = _mm_unpackhi_epi16(m4 = m128Tmp0, m3 = m128Tmp1);<br>>+    punpckhwd   m11, m5                         ;m11 = m128Tmp2 = _mm_unpackhi_epi16(m11 = O0l, m5 = O2l);<br>>+    mova        m5, m11                         ;m5 = m11, copy m128Tmp2 to m5<br>>+    punpckhwd   m10, m7                         ;m10 = m128Tmp3 = _mm_unpackhi_epi16(m10 = O1l, m7 = O3l);<br>>+    punpcklwd   m5, m10                         ;m5 = m128iS6 = _mm_unpacklo_epi16(m5 = m128Tmp2, m10 = m128Tmp3);<br>>+    punpckhwd   m11, m10                        ;m11 = m128iS7 = _mm_unpackhi_epi16(m11 = m128Tmp2, m10 = m128Tmp3);<br>>+<br>>+    ;m128iAdd = _mm_set1_epi32(2048);<br>>+<br>>+    mova        m15, m14                        ;m15 = m14, copy m128iS1 to m15<br>>+    punpcklwd   m14, m12                        ;m14 = m128Tmp0 = _mm_unpacklo_epi16(m14 = m128iS1, m12 = m128iS3);<br>>+    mova        m13, [tab_idct8]                ;m13 = tab_idct_8x8[0];<br>>+    mova        m6, m13                         ;m6 = m13, copy tab_idct_8x8[0] to m6<br>>+    pmaddwd     m13, m14                        ;m13 = E1l = _mm_madd_epi16(m14 = m128Tmp0, _mm_load_si128((__m128i*)(tab_idct_8x8[0])));<br>>+    punpckhwd   m15, m12                        ;m15 = m128Tmp1 = _mm_unpackhi_epi16(m15 = m128iS1, m12 = m128iS3);<br>>+    pmaddwd     m6, m15                         ;m6 = E1h = _mm_madd_epi16(m15 = m128Tmp1, _mm_load_si128((__m128i*)(m6 = tab_idct_8x8[0])));<br>>+    mova        m8, m4                          ;m8 = m4, copy m128iS5 to m8<br>>+    punpcklwd   m4, m11                         ;m4 = _m128Tmp2 = mm_unpacklo_epi16(m4 = m128iS5, m11 = m128iS7);<br>>+    mova        m7, [tab_idct8 + 1 * 16]        ;m7 = tab_idct_8x8[1];<br>>+    mova        m9, m7                          ;m9 = m7, copy tab_idct_8x8[1] to m7<br>>+    pmaddwd     m7, m4                          ;m7 = E2l = _mm_madd_epi16(m4 = _m128Tmp2, _mm_load_si128((__m128i*)(tab_idct_8x8[1])));<br>>+    punpckhwd   m8, m11                         ;m8 = m128Tmp3 = _mm_unpackhi_epi16(m8 = m128iS5, m11 = m128iS7);<br>>+    pmaddwd     m9, m8                          ;m9 = E2h = _mm_madd_epi16(m8 = m128Tmp3, _mm_load_si128((__m128i*)(tab_idct_8x8[1])));<br>>+    paddd       m13, m7                         ;m13 = O0l = _mm_add_epi32(m13 = E1l, m7 = E2l);<br>>+    paddd       m6, m9                          ;m6 = O0h = _mm_add_epi32(m6 = E1h, m9 = E2h);<br>>+    mova        m7, [tab_idct8 + 2 * 16]        ;m7 = tab_idct_8x8[2];<br>>+    mova        m9, m7                          ;m9 = m7, copy tab_idct_8x8[2] to m9<br>>+    pmaddwd     m7, m14                         ;m7 = E1l = _mm_madd_epi16(m14 = m128Tmp0, _mm_load_si128((__m128i*)(tab_idct_8x8[2])));<br>>+    pmaddwd     m9, m15                         ;m9 = E1h = _mm_madd_epi16(m15 = m128Tmp1, _mm_load_si128((__m128i*)(m9 = tab_idct_8x8[2])));<br>>+    mova        m10, [tab_idct8 + 3 * 16]       ;m10 = tab_idct_8x8[3];<br>>+    mova        m12, m10                        ;m12 = m10, copy tab_idct_8x8[3] to m12<br>>+    pmaddwd     m10, m4                         ;m10 = E2l = _mm_madd_epi16(m4 = _m128Tmp2, _mm_load_si128((__m128i*)(tab_idct_8x8[3])));<br>>+    pmaddwd     m12, m8                         ;m12 = E2h = _mm_madd_epi16(m8 = m128Tmp3, _mm_load_si128((__m128i*)(m12 = tab_idct_8x8[3])));<br>>+    paddd       m7, m10                         ;m7 = O1l = _mm_add_epi32(m7 = E1l, m10 = E2l);<br>>+    paddd       m9, m12                         ;m9 = O1h = _mm_add_epi32(m9 = E1h, m12);<br>>+    mova        m10, [tab_idct8 + 4 * 16]       ;m10 = tab_idct_8x8[4];<br>>+    mova        m12, m10                        ;m12 = m10, copy tab_idct_8x8[4] to m12<br>>+    pmaddwd     m10, m14                        ;m10 = E1l = _mm_madd_epi16(m14 = m128Tmp0, _mm_load_si128((__m128i*)(tab_idct_8x8[4])));<br>>+    pmaddwd     m12, m15                        ;m12 = E1h = _mm_madd_epi16(m15 = m128Tmp1, _mm_load_si128((__m128i*)(m12 = tab_idct_8x8[4])));<br>>+    mova        m11, [tab_idct8 + 5 * 16]       ;m11 = tab_idct_8x8[5];<br>>+    mova        m3, m11                         ;m3 = m11, copy tab_idct_8x8[5] to m3<br>>+    pmaddwd     m11, m4                         ;m11 = E2l = _mm_madd_epi16(m4 = _m128Tmp2, _mm_load_si128((__m128i*)(tab_idct_8x8[5])));<br>>+    pmaddwd     m3, m8                          ;m3 = E2h = _mm_madd_epi16(m8 = m128Tmp3, _mm_load_si128((__m128i*)(m3 = tab_idct_8x8[5])));<br>>+    paddd       m10, m11                        ;m10 = O2l = _mm_add_epi32(m10 = E1l, m11 = E2l);<br>>+    paddd       m12, m3                         ;m12 = O2h = _mm_add_epi32(m12 = E1h, m3 = E2h);<br>>+    pmaddwd     m14, [tab_idct8 + 6 * 16]       ;m14 = E1l = _mm_madd_epi16(m14 = m128Tmp0, _mm_load_si128((__m128i*)(tab_idct_8x8[6])));<br>>+    pmaddwd     m15, [tab_idct8 + 6 * 16]       ;m15 = E1h = _mm_madd_epi16(m15 = m128Tmp1, _mm_load_si128((__m128i*)(tab_idct_8x8[6])));<br>>+    pmaddwd     m4, [tab_idct8 + 7 * 16]        ;m4 = E2l = _mm_madd_epi16(m4 = m128Tmp2, _mm_load_si128((__m128i*)(tab_idct_8x8[7])));<br>>+    pmaddwd     m8, [tab_idct8 + 7 * 16]        ;m8 = E2h = _mm_madd_epi16(m8 = m128Tmp3, _mm_load_si128((__m128i*)(tab_idct_8x8[7])));<br>>+    paddd       m15, m8                         ;m11 = O3h = _mm_add_epi32(m11 = E1h, m15 = E2h);<br>>+    paddd       m14, m4                         ;m3 = O3l = _mm_add_epi32(m3 = E1l, m14 = E2l);<br>>+<br>>+    mova        m4, m0                          ;m4 = m0, copy m128iS0 to m4<br>>+    punpcklwd   m0, m1                          ;m0 = m128Tmp0 = _mm_unpacklo_epi16(m0 = m128iS0, m1 = m128iS4);<br>>+    mova        m11, m0                         ;m11 = m0, copy m128Tmp0 to m15<br>>+    pmaddwd     m0, [tab_idct8 + 8 * 16]        ;m0 = EE0l = _mm_madd_epi16(m0 = m128Tmp0, _mm_load_si128((__m128i*)(tab_idct_8x8[8])));<br>>+    punpckhwd   m4, m1                          ;m4 = m128Tmp1 = _mm_unpackhi_epi16(m4 = m128Tmp0, m1 = m128iS4);<br>>+    mova        m3, m4                          ;m3 = m4, copy m128Tmp1 to m3<br>>+    pmaddwd     m4, [tab_idct8 + 8 * 16]        ;m4 = EE0h = _mm_madd_epi16(m4 = m128Tmp1, _mm_load_si128((__m128i*)(tab_idct_8x8[8])));<br>>+    pmaddwd     m11, [tab_idct8 + 9 * 16]       ;m13 = EE1l = _mm_madd_epi16(m11 = m128Tmp0, _mm_load_si128((__m128i*)(tab_idct_8x8[9])));<br>>+    pmaddwd     m3, [tab_idct8 + 9 * 16]        ;m3 = EE1h = _mm_madd_epi16(m3 = m128Tmp1, _mm_load_si128((__m128i*)(tab_idct_8x8[9])));<br>>+<br>>+    mova        m8, m2                          ;m8 = m2, copy m128iS2 to m8<br>>+    punpcklwd   m2, m5                          ;m2 = m128Tmp0 = _mm_unpacklo_epi16(m2 = m128iS2, m5 = m128iS6);<br>>+    mova        m1, m2                          ;m1 = m2, copy m128Tmp0 to m1<br>>+    pmaddwd     m2, [tab_idct8 + 10 * 16]       ;m2 = E00l = _mm_madd_epi16(m2 = m128Tmp0, _mm_load_si128((__m128i*)(tab_idct_8x8[10])));<br>>+    punpckhwd   m8, m5                          ;m8 = m128Tmp1 = _mm_unpackhi_epi16(m8 = m128iS2, m5 = m128iS6);<br>>+    mova        m5, m8                          ;m5 = m8, copy m128Tmp1 to m5<br>>+    mova        [r5 - 1 * 16], m2              ;s_1 = m2, copy E00l to stack[1]<br>>+    pmaddwd     m5, [tab_idct8 + 10 * 16]       ;m5 = E00h = _mm_madd_epi16(m5 = m128Tmp1, _mm_load_si128((__m128i*)(tab_idct_8x8[10])));<br>>+    pmaddwd     m1, [tab_idct8 + 11 * 16]       ;m1 = E01l = _mm_madd_epi16(m1 = m128Tmp0, _mm_load_si128((__m128i*)(tab_idct_8x8[11])));<br>>+    pmaddwd     m8, [tab_idct8 + 11 * 16]       ;m8 = E01h = _mm_madd_epi16(m8 = m128Tmp1, _mm_load_si128((__m128i*)(tab_idct_8x8[11])));<br>>+    mova        [r5 - 2 * 16], m5              ;s_2 = m5, copy E00h to stack[2]<br>>+    paddd       m2, m0                          ;m2 = E0l = _mm_add_epi32(m0 = EE0l, m2 = E00l);<br>>+    paddd       m2, [IDCT_ADD]                  ;m2 = E0l = _mm_add_epi32(m2 = E0l, IDCT_ADD);<br>>+    paddd       m5, m4                          ;m5 = E0h = _mm_add_epi32(m4 = EE0h, m5 = E00h);<br>>+    paddd       m5, [IDCT_ADD]                  ;m5 = E0h = _mm_add_epi32(m5 = E0h, IDCT_ADD);<br>>+    psubd       m0, [r5 - 1 * 16]              ;m0 = E3l = _mm_sub_epi32(m0 = EE0l, s_1 = E00l);<br>>+    mova        [r5 - 1 * 16],m1               ;s_1 = m1, copy E01l to stack[1]<br>>+    paddd       m0, [IDCT_ADD]                  ;m0 = E3l = _mm_add_epi32(m0 = E3l, IDCT_ADD);<br>>+    psubd       m4, [r5 - 2 * 16]              ;m4 = E3h = _mm_sub_epi32(m4 = EE0h, s_2 = E00h);<br>>+    paddd       m4, [IDCT_ADD]                  ;m4 = E3h = _mm_add_epi32(m4, IDCT_ADD);<br>>+    paddd       m1, m11                         ;m1 = E1l = _mm_add_epi32(m15 = EE1l, m1 = E01l);<br>>+    mova        [r5 - 2 * 16], m8              ;s_2 = m8, copy  = E01h to stack[2]<br>>+    paddd       m1, [IDCT_ADD]                  ;m1 = E1l = _mm_add_epi32(m1 = E1l, IDCT_ADD);<br>>+    paddd       m8, m3                          ;m8 = E1h = _mm_add_epi32(m14 = EE1h, m8 = E01h);<br>>+    paddd       m8, [IDCT_ADD]                  ;m8 = E1h = _mm_add_epi32(m8 = E1h, IDCT_ADD);<br>>+    psubd       m11, [r5 - 1 * 16]             ;m15 = E2l = _mm_sub_epi32(m15 = EE1l, s_1 = E01l);<br>>+    paddd       m11, [IDCT_ADD]                 ;m15 = E2l = _mm_add_epi32(m15 = E2l, IDCT_ADD);<br>>+    psubd       m3, [r5 - 2 * 16]              ;m14 = E2h = _mm_sub_epi32(m14 = EE1h, s_2 = E01h);<br>>+    paddd       m3, [IDCT_ADD]                  ;m14 = E2h = _mm_add_epi32(m14 = E2h, IDCT_ADD);<br>>+<br>>+    ;m13 = m128iS0 = _mm_packs_epi32(_mm_srai_epi32(_mm_add_epi32(m2 = E0l, m13 = O0l), IDCT_SHIFT), _mm_srai_epi32(_mm_add_epi32(m5 = E0h, m6 = O0h), IDCT_SHIFT));<br>>+    mova        [r5 - 1 * 16], m13             ;s_1 = m13, copy O0l to stack[1]<br>>+    paddd       m13, m2                         ;m13 + m2, add E0l and O0l<br>>+    psrad       m13, IDCT_SHIFT                 ;m13 = _mm_srai_epi32(m13, IDCT_SHIFT)<br>>+    mova        [r5 - 2 * 16], m6              ;s_2 = m6, copy O0h to stack[2]<br>>+    paddd       m6, m5                          ;m6 + m5, add O0h and E0h<br>>+    psrad       m6, IDCT_SHIFT                  ;m6 = _mm_srai_epi32(m6, IDCT_SHIFT)<br>>+    packssdw    m13, m6                         ;m13 = m128iS0<br>>+    ;m2 = m128iS7 = _mm_packs_epi32(_mm_srai_epi32(_mm_sub_epi32(m2 = E0l, s_1 = O0l), IDCT_SHIFT), _mm_srai_epi32(_mm_sub_epi32(m5 = E0h, s_2 = O0h), IDCT_SHIFT));<br>>+    psubd       m2, [r5 - 1 * 16]              ;m2 - s_1, E0l minus O0l<br>>+    psrad       m2, IDCT_SHIFT                  ;m2 = _mm_srai_epi32(m2, IDCT_SHIFT)<br>>+    psubd       m5, [r5 - 2 * 16]              ;m5 - s_2, E0h minus O0h<br>>+    psrad       m5, IDCT_SHIFT                  ;m5 = _mm_srai_epi32(m5, IDCT_SHIFT)<br>>+    packssdw    m2, m5                          ;m2 = m128iS7<br>>+    ;m1 = m128iS1 = _mm_packs_epi32(_mm_srai_epi32(_mm_add_epi32(m1 = E1l, m7 = O1l), IDCT_SHIFT), _mm_srai_epi32(_mm_add_epi32(m8 = E1h, m9 = O1h), IDCT_SHIFT));<br>>+    mova        m5, m1                          ;m5 = m1, copy E1l to m5<br>>+    paddd       m1, m7                          ;m1 + m7, add E1l and O1l<br>>+    psrad       m1, IDCT_SHIFT                  ;m1 = _mm_srai_epi32(m1, IDCT_SHIFT)<br>>+    mova        m6, m8                          ;m6 = m8, copy E1h to m6<br>>+    paddd       m8, m9                          ;m8 + m9, add E1h and O1h<br>>+    psrad       m8, IDCT_SHIFT                  ;m8 = _mm_srai_epi32(m8, IDCT_SHIFT)<br>>+    packssdw    m1, m8                          ;m1 = m128iS1<br>>+    ;m5 = m128iS6 = _mm_packs_epi32(_mm_srai_epi32(_mm_sub_epi32(m5 = E1l, m7 = O1l), IDCT_SHIFT), _mm_srai_epi32(_mm_sub_epi32(m6 = E1h, m9 = O1h), IDCT_SHIFT));<br>>+    psubd       m5, m7                          ;m5 - m7, E1l minus O1l<br>>+    psrad       m5, IDCT_SHIFT                  ;m5 = _mm_srai_epi32(m5, IDCT_SHIFT)<br>>+    psubd       m6, m9                          ;m6 - m9, E1h minus O1h<br>>+    psrad       m6, IDCT_SHIFT                  ;m6 = _mm_srai_epi32(m6, IDCT_SHIFT)<br>>+    packssdw    m5, m6                          ;m5 = m128iS6<br>>+    ;m15 = m128iS2 = _mm_packs_epi32(_mm_srai_epi32(_mm_add_epi32(m15 = E2l, m10 = O2l), IDCT_SHIFT), _mm_srai_epi32(_mm_add_epi32(m14 = E2h, m12 = O2h), IDCT_SHIFT));<br>>+    mova        m6, m11                         ;m6 = m15, copy E2l to m6<br>>+<br>>+    paddd       m11, m10                        ;m15 + m10, add E2l and O2l<br>>+    psrad       m11, IDCT_SHIFT                 ;m11 = _mm_srai_epi32(m11, IDCT_SHIFT)<br>>+    mova        m7, m3                          ;m7 = m14, copy E2h to m7<br>>+    paddd       m3, m12                         ;m14 + m12, add E2h and O2h<br>>+    psrad       m3, IDCT_SHIFT                  ;m3 = _mm_srai_epi32(m3, IDCT_SHIFT)<br>>+    packssdw    m11, m3                         ;m15 = m128iS2<br>>+    ;m6 = m128iS5 = _mm_packs_epi32(_mm_srai_epi32(_mm_sub_epi32(m6 = E2l, m10 = O2l), IDCT_SHIFT), _mm_srai_epi32(_mm_sub_epi32(m7 = E2h, m12 = O2h), IDCT_SHIFT));<br>>+    psubd       m6, m10                         ;m6 - m10, E2l minus O2l<br>>+    psrad       m6, IDCT_SHIFT                  ;m6 = _mm_srai_epi32(m6, IDCT_SHIFT)<br>>+    psubd       m7, m12                         ;m7 - m12, E2h minus O2h<br>>+    psrad       m7, IDCT_SHIFT                  ;m7 = _mm_srai_epi32(m7, IDCT_SHIFT)<br>>+    packssdw    m6, m7                          ;m6 = m128iS5<br>>+    ;m0 = m128iS3 = _mm_packs_epi32(_mm_srai_epi32(_mm_add_epi32(m0 = E3l, m3 = O3l), IDCT_SHIFT), _mm_srai_epi32(_mm_add_epi32(m4 = E3h, m11 = O3h), IDCT_SHIFT));<br>>+    mova        m8, m0                          ;m8 = m0, copy E3l to m8<br>>+    paddd       m0, m14                         ;m0 + m3, add E3l and O3l<br>>+    psrad       m0, IDCT_SHIFT                  ;m0 = _mm_srai_epi32(m0, IDCT_SHIFT)<br>>+    mova        m7, m4                          ;m7 = m4, copy E3h to m7<br>>+    paddd       m4, m15                         ;m4 + m11, add E3h and O3h<br>>+    psrad       m4, IDCT_SHIFT                  ;m4 = _mm_srai_epi32(m4, IDCT_SHIFT)<br>>+    packssdw    m0, m4                          ;m0 = m128iS3<br>>+    ;m8 = m128iS4 = _mm_packs_epi32(_mm_srai_epi32(_mm_sub_epi32(m8 = E3l, m3 = O3l), IDCT_SHIFT), _mm_srai_epi32(_mm_sub_epi32(m7 = E3h, m11 = O3h), IDCT_SHIFT));<br>>+    psubd       m8, m14                         ;m8 - m3, E3l minus O3l<br>>+    psrad       m8, IDCT_SHIFT                  ;m8 = _mm_srai_epi32(m8, IDCT_SHIFT)<br>>+    psubd       m7, m15                         ;m7 - m11, E3h minus O3h<br>>+    psrad       m7, IDCT_SHIFT                  ;m7 = _mm_srai_epi32(m7, IDCT_SHIFT)<br>>+    packssdw    m8, m7                          ;m8 = m128iS4<br>>+<br>>+;     // [07 06 05 04 03 02 01 00]<br>>+;     // [17 16 15 14 13 12 11 10]<br>>+;     // [27 26 25 24 23 22 21 20]<br>>+;     // [37 36 35 34 33 32 31 30]<br>>+;     // [47 46 45 44 43 42 41 40]<br>>+;     // [57 56 55 54 53 52 51 50]<br>>+;     // [67 66 65 64 63 62 61 60]<br>>+;     // [77 76 75 74 73 72 71 70]<br>>+<br>>+    mova        m3, m13                                 ;m3 = m13, copy m128iS0 to m3<br>>+    punpcklwd   m3, m1                                  ;m3 = T00 = _mm_unpacklo_epi16(m3 = m128iS0, m1 = m128iS1);     // [13 03 12 02 11 01 10 00]<br>>+    punpckhwd   m13, m1                                 ;m13 = T01 = _mm_unpackhi_epi16(m13 = m128iS0,m1 = m128iS1);     // [17 07 16 06 15 05 14 04]<br>>+    mova        m4, m11                                 ;m4 = m15<br>>+    punpcklwd   m11, m0                                 ;m15 = T02 = _mm_unpacklo_epi16(m15 = m128iS2, m0 = m128iS3);     // [33 23 32 22 31 21 30 20]<br>>+    punpckhwd   m4, m0                                  ;m4 = T03 = _mm_unpackhi_epi16(m4 = m128iS2, m0 = m128iS3);     // [37 27 36 26 35 25 34 24]<br>>+    mova        m1, m8                                  ;m1 = m8, copy m128iS4 to m1<br>>+    punpcklwd   m8, m6                                  ;m8 = T04 = _mm_unpacklo_epi16(m8 = m128iS4, m6 = m128iS5);     // [53 43 52 42 51 41 50 40]<br>>+    punpckhwd   m1, m6                                  ;m1 = T05 = _mm_unpackhi_epi16(m1 = m128iS4, m6 = m128iS5);     // [57 47 56 46 55 45 54 44]<br>>+    mova        m7, m5                                  ;m7 = m5, copy m128iS6 to m7<br>>+    punpcklwd   m5, m2                                  ;m5 = T06 = _mm_unpacklo_epi16(m5 = m128iS6, m2 = m128iS7);     // [73 63 72 62 71 61 70 60]<br>>+    punpckhwd   m7, m2                                  ;m7 = T07 = _mm_unpackhi_epi16(m7 = m128iS6, m2 = m128iS7);     // [77 67 76 66 75 65 74 64]<br>>+<br>>+    ;__m128i T10, T11;<br>>+    mova        m0, m3                                  ;m0 = m3, copy T00 to m0<br>>+    punpckldq   m0, m11                                 ;m0 = T10 = _mm_unpacklo_epi32(m0 = T00, m15 = T02);                                     // [31 21 11 01 30 20 10 00]<br>>+    punpckhdq   m3, m11                                 ;m3 = T11 = _mm_unpackhi_epi32(m3 = T00, m15 = T02);                                     // [33 23 13 03 32 22 12 02]<br>>+;     lea         r2, [r2 + r2]                           ;set r2 to index of 1<br>>+;     lea         r4, [r2 + r2]                           ;set r4 to index of 2<br>>+;     lea         r3, [r4 + r2]                           ;set r3 to index of 3<br>>+;     lea         r4, [r4 + r3]                      ;set r4 to index of 5<br>>+     lea         r0, [r4 + r2 * 2]                      ;set r0 to index of 7<br>>+    movq        [r1], m0                                ;_mm_storel_epi64((__m128i*)&dst[0 * stride +  0], m0 = T10);                   // [30 20 10 00]<br>>+    movq        [r1 + r2 * 2], m3                       ;_mm_storel_epi64((__m128i*)&dst[2 * stride +  0], m3 = T11);                   // [32 22 12 02]<br>>+    movhps      [r1 + r2 * 1], m0                       ;_mm_storeh_pi((__m64*)&dst[1 * stride +  0], _mm_castsi128_ps(m0 = T10));  // [31 21 11 01]<br>>+    movhps      [r1 + r3], m3                           ;_mm_storeh_pi((__m64*)&dst[3 * stride +  0], _mm_castsi128_ps(m3 = T11));  // [33 23 13 03]<br>>+<br>>+    mova        m2, m8                                  ;m2 = m8, copy T04 to m2<br>>+    punpckldq   m2, m5                                  ;m2 = T10 = _mm_unpacklo_epi32(m2 = T04, m5 = T06);                                     // [71 61 51 41 70 60 50 40]<br>>+    punpckhdq   m8, m5                                  ;m8 = T11 = _mm_unpackhi_epi32(m8 = T04, m5 = T06);                                     // [73 63 53 43 72 62 52 42]<br>>+    movq        [r1 + 8], m2                            ;_mm_storel_epi64((__m128i*)&dst[0 * stride +  4], m2 = T10);<br>>+    movq        [r1 + r2 * 2 + 8], m8                   ;_mm_storel_epi64((__m128i*)&dst[2 * stride +  4], m8 = T11);<br>>+    movhps      [r1 + r2 * 1 + 8], m2                   ;_mm_storeh_pi((__m64*)&dst[1 * stride +  4], _mm_castsi128_ps(m2 = T10));<br>>+    movq        [r1 + r2 * 2 + 8], m8                   ;_mm_storel_epi64((__m128i*)&dst[2 * stride +  4], m8 = T11);<br>>+<br>>+    movhps      [r1 + r3 + 8], m8                       ;_mm_storeh_pi((__m64*)&dst[3 * stride +  4], _mm_castsi128_ps(m8 = T11));<br>>+    mova        m11, m0<br>>+    punpcklqdq  m0, m2<br>>+    punpckhqdq  m11, m2<br>>+    mova        [r1], m0<br>>+    mova        [r1 + r2 * 1], m11<br>>+<br>>+    mova        m5, m3<br>>+    punpcklqdq  m3, m8<br>>+    punpckhqdq  m5, m8<br>>+    mova        [r1 + r2 * 2], m3<br>>+    mova        [r1 + r3], m5<br>>+<br>>+    mova        m6, m13                                 ;m6 = m13, copy T01 to m6<br>>+    punpckldq   m6, m4                                  ;m6 = T10 = _mm_unpacklo_epi32(m6 = T01, m4 = T03);                                     // [35 25 15 05 34 24 14 04]<br>>+    punpckhdq   m13, m4                                 ;m13 = T11 = _mm_unpackhi_epi32(m13 = T01, m4 = T03);                                     // [37 27 17 07 36 26 16 06]<br>>+    movq        [r1 + r2 * 4], m6                       ;_mm_storel_epi64((__m128i*)&dst[4 * stride +  0], m6 = T10);<br>>+    movq        [r1 + r3 * 2], m13                      ;_mm_storel_epi64((__m128i*)&dst[6 * stride +  0], m13 = T11);<br>>+    mova        m9, m1                                  ;m9 = m1, copy T05 to m9<br>>+    movhps      [r1 + r4], m6                           ;_mm_storeh_pi((__m64*)&dst[5 * stride +  0], _mm_castsi128_ps(m6 = T10));<br>>+    movhps      [r1 + r0], m13                          ;_mm_storeh_pi((__m64*)&dst[7 * stride +  0], _mm_castsi128_ps(m13 = T11));<br>>+<br>>+    punpckldq   m1, m7                                  ;m1 = T10 = _mm_unpacklo_epi32(m1 = T05, m7 = T07);                                     // [75 65 55 45 74 64 54 44]<br>>+    punpckhdq   m9, m7                                  ;m9 = T11 = _mm_unpackhi_epi32(m9 = T05, m7 = T07);                                     // [77 67 57 47 76 56 46 36]<br>>+    movq        [r1 + r2 * 4 + 8], m1                   ;_mm_storel_epi64((__m128i*)&dst[4 * stride +  4], m1 = T10);<br>>+    movq        [r1 + r3 * 2 + 8], m9                   ;_mm_storel_epi64((__m128i*)&dst[6 * stride +  4], m9 = T11);<br>>+    movhps      [r1 + r4 + 8], m1                       ;_mm_storeh_pi((__m64*)&dst[5 * stride +  4], _mm_castsi128_ps(m1 = T10));<br>>+    movhps      [r1 + r0 + 8], m9                       ;_mm_storeh_pi((__m64*)&dst[7 * stride +  4], _mm_castsi128_ps(m9 = T11));<br>>+<br>>+    RET<br>>+%undef IDCT_SHIFT<br>>+%undef IDCT_ADD<br>>+<br>>+;-------------------------------------------------------<br>> ; void idct8(int16_t *src, int16_t *dst, intptr_t stride)<br>> ;-------------------------------------------------------<br>> INIT_XMM ssse3<br>>diff -r 1d17ec0cb954 -r f4a932dba699 source/common/x86/dct8.h<br>>--- a/source/common/x86/dct8.h        Thu Nov 20 20:04:02 2014 +0530<br>>+++ b/source/common/x86/dct8.h        Thu Nov 20 19:21:53 2014 -0800<br>>@@ -35,6 +35,7 @@<br>> void x265_idst4_sse2(const int16_t* src, int16_t* dst, intptr_t stride);<br>> void x265_idct4_sse2(const int16_t* src, int16_t* dst, intptr_t stride);<br>> void x265_idct4_avx2(const int16_t* src, int16_t* dst, intptr_t stride);<br>>+void x265_idct8_sse2(const int16_t* src, int16_t* dst, intptr_t stride);<br>> void x265_idct8_ssse3(const int16_t* src, int16_t* dst, intptr_t stride);<br>> void x265_idct8_avx2(const int16_t* src, int16_t* dst, intptr_t stride);<br>> void x265_idct16_avx2(const int16_t* src, int16_t* dst, intptr_t stride);<br>><br>>_______________________________________________<br>>x265-devel mailing list<br>>x265-devel@videolan.org<br>>https://mailman.videolan.org/listinfo/x265-devel<br>><br></div></div>