Advertisement
Guest User

Untitled

a guest
Jul 1st, 2017
477
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 17.94 KB | None | 0 0
  1. From 0e12a9ffa3336419d359b8c79634d963241d5681 Mon Sep 17 00:00:00 2001
  2. From: Daniel Kang <daniel.d.kang@gmail.com>
  3. Date: Thu, 25 Nov 2010 19:44:56 -0500
  4. Subject: [PATCH 1/3] Patch 1?
  5.  
  6. ---
  7. common/x86/predict-a.asm |  108 +++++++++++++++++++++++++--------------------
  8.  common/x86/predict-c.c   |    9 +++-
  9.  2 files changed, 67 insertions(+), 50 deletions(-)
  10.  
  11. diff --git a/common/x86/predict-a.asm b/common/x86/predict-a.asm
  12. index a05e91b..739ce35 100644
  13. --- a/common/x86/predict-a.asm
  14. +++ b/common/x86/predict-a.asm
  15. @@ -40,6 +40,7 @@ SECTION .text
  16.  
  17.  cextern pb_1
  18.  cextern pb_3
  19. +cextern pw_1
  20.  cextern pw_2
  21.  cextern pw_4
  22.  cextern pw_8
  23. @@ -98,19 +99,16 @@ cextern pb_reverse
  24.  ; dest, left, right, src, tmp
  25.  ; output: %1 = (t[n-1] + t[n]*2 + t[n+1] + 2) >> 2
  26.  %macro PRED8x8_LOWPASS0 6
  27. -    mov%6       %5, %2
  28. -    pavgb       %2, %3
  29. -    pxor        %3, %5
  30. -    mov%6       %1, %4
  31. -    pand        %3, [pb_1]
  32. -    psubusb     %2, %3
  33. -    pavgb       %1, %2
  34. +    mova        %6, %3
  35. +    pavg%1      %3, %4
  36. +    pxor        %4, %6
  37. +    mova        %2, %5
  38. +    pand        %4, [p%1_1]
  39. +    psubus%1    %3, %4
  40. +    pavg%1      %2, %3
  41.  %endmacro
  42. -%macro PRED8x8_LOWPASS 5
  43. -    PRED8x8_LOWPASS0 %1, %2, %3, %4, %5, q
  44. -%endmacro
  45. -%macro PRED8x8_LOWPASS_XMM 5
  46. -    PRED8x8_LOWPASS0 %1, %2, %3, %4, %5, dqa
  47. +%macro PRED8x8_LOWPASS 6
  48. +    PRED8x8_LOWPASS0 %1, %2, %3, %4, %5, %6
  49.  %endmacro
  50.  
  51.  %macro LOAD_PLANE_ARGS 0
  52. @@ -129,27 +127,37 @@ cextern pb_reverse
  53.  %endmacro
  54.  
  55.  ;-----------------------------------------------------------------------------
  56. -; void predict_4x4_ddl( uint8_t *src )
  57. +; void predict_4x4_ddl( pixel *src )
  58.  ;-----------------------------------------------------------------------------
  59. -cglobal predict_4x4_ddl_mmxext, 1,1
  60. -    movq    mm1, [r0-FDEC_STRIDE]
  61. -    movq    mm2, mm1
  62. -    movq    mm3, mm1
  63. -    movq    mm4, mm1
  64. -    psllq   mm1, 8
  65. -    pxor    mm2, mm1
  66. -    psrlq   mm2, 8
  67. -    pxor    mm3, mm2
  68. -    PRED8x8_LOWPASS mm0, mm1, mm3, mm4, mm5
  69. +%macro PREDICT_4x4_DDL 4
  70. +cglobal predict_4x4_ddl_%1, 1,1
  71. +    mova    m1, [r0-SIZEOF_PIXEL*FDEC_STRIDE]
  72. +    mova    m2, m1
  73. +    mova    m3, m1
  74. +    mova    m4, m1
  75. +    psll%2  m1, %3
  76. +    pxor    m2, m1
  77. +    psrl%2  m2, %3
  78. +    pxor    m3, m2
  79. +    PRED8x8_LOWPASS %4, m0, m1, m3, m4, m5
  80.  
  81.  %assign Y 0
  82.  %rep 4
  83. -    psrlq       mm0, 8
  84. -    movd        [r0+Y*FDEC_STRIDE], mm0
  85. +    psrl%2      m0, %3
  86. +    movh        [r0+SIZEOF_PIXEL*Y*FDEC_STRIDE], m0
  87.  %assign Y (Y+1)
  88.  %endrep
  89.  
  90.      RET
  91. +%endmacro
  92. +
  93. +%ifdef HIGH_BIT_DEPTH
  94. +INIT_XMM
  95. +PREDICT_4x4_DDL sse2  , dq, 2, w
  96. +%else
  97. +INIT_MMX
  98. +PREDICT_4x4_DDL mmxext, q , 8, b
  99. +%endif
  100.  
  101.  ;-----------------------------------------------------------------------------
  102.  ; void predict_4x4_ddr( uint8_t *src )
  103. @@ -166,7 +174,7 @@ cglobal predict_4x4_ddr_%1, 1,1
  104.      PALIGNR   mm3, [r0+2*FDEC_STRIDE-8], 7, mm4
  105.      movq      mm2, mm3
  106.      PALIGNR   mm3, [r0+3*FDEC_STRIDE-8], 7, mm4
  107. -    PRED8x8_LOWPASS mm0, mm3, mm1, mm2, mm4
  108. +    PRED8x8_LOWPASS b, mm0, mm3, mm1, mm2, mm4
  109.  %assign Y 3
  110.      movd    [r0+Y*FDEC_STRIDE], mm0
  111.  %rep 3
  112. @@ -186,7 +194,7 @@ cglobal predict_4x4_vr_%1, 1,1
  113.      PALIGNR mm0, [r0+1*FDEC_STRIDE-8], 7, mm2    ; ..t3t2t1t0ltl0l1
  114.      movq    mm2, mm0
  115.      PALIGNR mm0, [r0+2*FDEC_STRIDE-8], 7, mm3    ; t3t2t1t0ltl0l1l2
  116. -    PRED8x8_LOWPASS mm3, mm1, mm0, mm2, mm4
  117. +    PRED8x8_LOWPASS b, mm3, mm1, mm0, mm2, mm4
  118.      movq    mm1, mm3
  119.      psrlq   mm3, 16
  120.      psllq   mm1, 48
  121. @@ -215,7 +223,7 @@ cglobal predict_4x4_hd_%1, 1,1
  122.      psrlq     mm0, 16                   ; .. .. t2 t1 t0 lt l0 l1
  123.      psrlq     mm2, 8                    ; .. t2 t1 t0 lt l0 l1 l2
  124.      pavgb     mm7, mm2
  125. -    PRED8x8_LOWPASS mm3, mm1, mm0, mm2, mm4
  126. +    PRED8x8_LOWPASS b, mm3, mm1, mm0, mm2, mm4
  127.      punpcklbw mm7, mm3
  128.      psrlq     mm3, 32
  129.      PALIGNR   mm3, mm7, 6, mm6
  130. @@ -230,6 +238,7 @@ cglobal predict_4x4_hd_%1, 1,1
  131.      RET
  132.  %endmacro
  133.  
  134. +INIT_MMX
  135.  %define PALIGNR PALIGNR_MMX
  136.  PREDICT_4x4 mmxext
  137.  %define PALIGNR PALIGNR_SSSE3
  138. @@ -254,7 +263,7 @@ cglobal predict_4x4_hu_mmxext, 1,1
  139.      psrlq     mm2, 16
  140.      psrlq     mm3, 8
  141.      pavgb     mm7, mm3
  142. -    PRED8x8_LOWPASS mm4, mm0, mm2, mm3, mm5
  143. +    PRED8x8_LOWPASS b, mm4, mm0, mm2, mm3, mm5
  144.      punpcklbw mm7, mm4
  145.  %assign Y 0
  146.      movd    [r0+Y*FDEC_STRIDE], mm7
  147. @@ -278,7 +287,7 @@ cglobal predict_4x4_vl_mmxext, 1,1
  148.      movq        mm4, mm3
  149.      pavgb       mm4, mm1
  150.  
  151. -    PRED8x8_LOWPASS mm0, mm1, mm2, mm3, mm5
  152. +    PRED8x8_LOWPASS b, mm0, mm1, mm2, mm3, mm5
  153.  
  154.      movd        [r0+0*FDEC_STRIDE], mm4
  155.      movd        [r0+1*FDEC_STRIDE], mm0
  156. @@ -353,10 +362,10 @@ cglobal predict_8x8_filter_%1, 4,5
  157.      je .fix_lt_1
  158.  .do_left:
  159.      movq        mm0, mm4
  160. -    PRED8x8_LOWPASS mm2, mm1, mm4, mm3, mm5
  161. +    PRED8x8_LOWPASS b, mm2, mm1, mm4, mm3, mm5
  162.      movq     [t1+8], mm2
  163.      movq        mm4, mm0
  164. -    PRED8x8_LOWPASS mm1, mm3, mm0, mm4, mm5
  165. +    PRED8x8_LOWPASS b, mm1, mm3, mm0, mm4, mm5
  166.      movd         t4, mm1
  167.      mov      [t1+7], t4b
  168.  .check_top:
  169. @@ -374,7 +383,7 @@ cglobal predict_8x8_filter_%1, 4,5
  170.      test        r2b, 0x04
  171.      je .fix_tr_1
  172.  .do_top:
  173. -    PRED8x8_LOWPASS mm4, mm2, mm1, mm3, mm5
  174. +    PRED8x8_LOWPASS b, mm4, mm2, mm1, mm3, mm5
  175.      movq    [t1+16], mm4
  176.      test        r3b, 0x04
  177.      je .done
  178. @@ -387,7 +396,7 @@ cglobal predict_8x8_filter_%1, 4,5
  179.      psrlq       mm5, 56
  180.      PALIGNR     mm2, mm3, 7, mm3
  181.      PALIGNR     mm5, mm4, 1, mm4
  182. -    PRED8x8_LOWPASS mm1, mm2, mm5, mm0, mm4
  183. +    PRED8x8_LOWPASS b, mm1, mm2, mm5, mm0, mm4
  184.      jmp .do_topright
  185.  .fix_tr_2:
  186.      punpckhbw   mm3, mm3
  187. @@ -424,6 +433,7 @@ cglobal predict_8x8_filter_%1, 4,5
  188.  %endmacro
  189.  
  190.  %define PALIGNR PALIGNR_MMX
  191. +INIT_MMX
  192.  PREDICT_FILTER mmxext
  193.  %define PALIGNR PALIGNR_SSSE3
  194.  PREDICT_FILTER ssse3
  195. @@ -511,8 +521,8 @@ cglobal predict_8x8_ddl_mmxext, 2,2
  196.      movq        mm1, mm5
  197.      psllq       mm1, 8
  198.      add          r0, FDEC_STRIDE*4
  199. -    PRED8x8_LOWPASS mm0, mm1, mm2, mm5, mm7
  200. -    PRED8x8_LOWPASS mm1, mm3, mm4, [r1+24], mm6
  201. +    PRED8x8_LOWPASS b, mm0, mm1, mm2, mm5, mm7
  202. +    PRED8x8_LOWPASS b, mm1, mm3, mm4, [r1+24], mm6
  203.  %assign Y 3
  204.  %rep 6
  205.      movq        [r0+Y*FDEC_STRIDE], mm1
  206. @@ -540,8 +550,8 @@ cglobal predict_8x8_ddr_mmxext, 2,2
  207.      movq        mm3, [r1+15]
  208.      movq        mm4, [r1+17]
  209.      add          r0, FDEC_STRIDE*4
  210. -    PRED8x8_LOWPASS mm0, mm1, mm2, [r1+8], mm7
  211. -    PRED8x8_LOWPASS mm1, mm3, mm4, [r1+16], mm6
  212. +    PRED8x8_LOWPASS b, mm0, mm1, mm2, [r1+8], mm7
  213. +    PRED8x8_LOWPASS b, mm1, mm3, mm4, [r1+16], mm6
  214.  %assign Y 3
  215.  %rep 6
  216.      movq        [r0+Y*FDEC_STRIDE], mm0
  217. @@ -582,7 +592,7 @@ cglobal predict_8x8_hu_mmxext, 2,2
  218.      punpckhbw mm1, mm1
  219.      por     mm3, mm1            ; l7 l7 l7 l6 l5 l4 l3 l2
  220.      pavgb   mm4, mm2
  221. -    PRED8x8_LOWPASS mm1, mm3, mm5, mm2, mm6
  222. +    PRED8x8_LOWPASS b, mm1, mm3, mm5, mm2, mm6
  223.      movq    mm5, mm4
  224.      punpcklbw mm4, mm1          ; p4 p3 p2 p1
  225.      punpckhbw mm5, mm1          ; p8 p7 p6 p5
  226. @@ -627,7 +637,7 @@ cglobal predict_8x8_vr_core_mmxext, 2,2
  227.      movq        mm4, mm3
  228.      pavgb       mm3, mm2
  229.      add          r0, FDEC_STRIDE*4
  230. -    PRED8x8_LOWPASS mm0, mm1, mm2, mm4, mm7
  231. +    PRED8x8_LOWPASS b, mm0, mm1, mm2, mm4, mm7
  232.  
  233.  %assign Y -4
  234.  %rep 3
  235. @@ -714,6 +724,7 @@ ALIGN 4
  236.  
  237.  %endif ; !ARCH_X86_64
  238.  
  239. +INIT_XMM
  240.  ;-----------------------------------------------------------------------------
  241.  ; void predict_8x8_ddl( uint8_t *src, uint8_t *edge )
  242.  ;-----------------------------------------------------------------------------
  243. @@ -723,7 +734,7 @@ cglobal predict_8x8_ddl_sse2, 2,2
  244.      movdqa      xmm1, xmm3
  245.      pslldq      xmm1, 1
  246.      add          r0, FDEC_STRIDE*4
  247. -    PRED8x8_LOWPASS_XMM xmm0, xmm1, xmm2, xmm3, xmm4
  248. +    PRED8x8_LOWPASS b, xmm0, xmm1, xmm2, xmm3, xmm4
  249.  
  250.  %assign Y -4
  251.  %rep 8
  252. @@ -742,7 +753,7 @@ cglobal predict_8x8_ddr_sse2, 2,2
  253.      movdqa      xmm2, xmm3
  254.      psrldq      xmm2, 1
  255.      add           r0, FDEC_STRIDE*4
  256. -    PRED8x8_LOWPASS_XMM xmm0, xmm1, xmm2, xmm3, xmm4
  257. +    PRED8x8_LOWPASS b, xmm0, xmm1, xmm2, xmm3, xmm4
  258.  
  259.      movdqa      xmm1, xmm0
  260.      psrldq      xmm1, 1
  261. @@ -771,7 +782,7 @@ cglobal predict_8x8_vl_sse2, 2,2
  262.      pslldq      xmm1, 1
  263.      pavgb       xmm3, xmm2
  264.      add           r0, FDEC_STRIDE*4
  265. -    PRED8x8_LOWPASS_XMM xmm0, xmm1, xmm2, xmm4, xmm5
  266. +    PRED8x8_LOWPASS b, xmm0, xmm1, xmm2, xmm4, xmm5
  267.  ; xmm0: (t0 + 2*t1 + t2 + 2) >> 2
  268.  ; xmm3: (t0 + t1 + 1) >> 1
  269.  
  270. @@ -802,7 +813,7 @@ cglobal predict_8x8_vr_sse2, 2,2,7
  271.      pslldq      xmm0, 1
  272.      pslldq      xmm1, 2
  273.      pavgb       xmm2, xmm0
  274. -    PRED8x8_LOWPASS_XMM xmm4, xmm3, xmm1, xmm0, xmm5
  275. +    PRED8x8_LOWPASS b, xmm4, xmm3, xmm1, xmm0, xmm5
  276.      pandn       xmm6, xmm4
  277.      movdqa      xmm5, xmm4
  278.      psrlw       xmm4, 8
  279. @@ -824,6 +835,7 @@ cglobal predict_8x8_vr_sse2, 2,2,7
  280.  %endrep
  281.      RET
  282.  
  283. +INIT_MMX
  284.  ;-----------------------------------------------------------------------------
  285.  ; void predict_8x8_hd( uint8_t *src, uint8_t *edge )
  286.  ;-----------------------------------------------------------------------------
  287. @@ -840,12 +852,12 @@ cglobal predict_8x8_hd_mmxext, 2,2
  288.      PALIGNR mm4, mm3, 1, mm7    ; t0 lt l0 l1 l2 l3 l4 l5
  289.      movq    mm5, mm3
  290.      pavgb   mm3, mm1
  291. -    PRED8x8_LOWPASS mm0, mm4, mm1, mm5, mm7
  292. +    PRED8x8_LOWPASS b, mm0, mm4, mm1, mm5, mm7
  293.      movq    mm4, mm2
  294.      movq    mm1, mm2            ; t6 t5 t4 t3 t2 t1 t0 lt
  295.      psrlq   mm4, 16             ; .. .. t6 t5 t4 t3 t2 t1
  296.      psrlq   mm1, 8              ; .. t6 t5 t4 t3 t2 t1 t0
  297. -    PRED8x8_LOWPASS mm6, mm4, mm2, mm1, mm5
  298. +    PRED8x8_LOWPASS b, mm6, mm4, mm2, mm1, mm5
  299.                                  ; .. p11 p10 p9
  300.      movq    mm7, mm3
  301.      punpcklbw mm3, mm0          ; p4 p3 p2 p1
  302. @@ -886,7 +898,7 @@ cglobal predict_8x8_hd_%1, 2,2
  303.      PALIGNR xmm3, xmm0, 8, xmm0
  304.      movdqa  xmm4, xmm1
  305.      pavgb   xmm4, xmm3
  306. -    PRED8x8_LOWPASS_XMM xmm0, xmm1, xmm2, xmm3, xmm5
  307. +    PRED8x8_LOWPASS b, xmm0, xmm1, xmm2, xmm3, xmm5
  308.      punpcklbw xmm4, xmm0
  309.      movhlps xmm0, xmm4
  310.  
  311. @@ -946,7 +958,7 @@ cglobal predict_8x8_hu_%1, 2,2
  312.      por       mm3, mm1              ; l7 l7 l7 l6 l5 l4 l3 l2
  313.  %endif
  314.      pavgb     mm4, mm2
  315. -    PRED8x8_LOWPASS mm1, mm3, mm5, mm2, mm6
  316. +    PRED8x8_LOWPASS b, mm1, mm3, mm5, mm2, mm6
  317.  
  318.      movq2dq   xmm0, mm4
  319.      movq2dq   xmm1, mm1
  320. diff --git a/common/x86/predict-c.c b/common/x86/predict-c.c
  321. index 8eafcc0..077f2c7 100644
  322. --- a/common/x86/predict-c.c
  323. +++ b/common/x86/predict-c.c
  324. @@ -64,6 +64,7 @@
  325.   void x264_predict_8x8_filter_mmxext( uint8_t *src, uint8_t edge[33], int i_neighbor, int i_filters );
  326.   void x264_predict_8x8_filter_ssse3( uint8_t *src, uint8_t edge[33], int i_neighbor, int i_filters );
  327.   void x264_predict_4x4_ddl_mmxext( uint8_t *src );
  328. + void x264_predict_4x4_ddl_sse2( uint16_t *src );
  329.   void x264_predict_4x4_ddr_mmxext( uint8_t *src );
  330.   void x264_predict_4x4_vl_mmxext( uint8_t *src );
  331.   void x264_predict_4x4_vr_mmxext( uint8_t *src );
  332. @@ -474,7 +475,11 @@ void x264_predict_4x4_init_mmx( int cpu, x264_predict_t pf[12] )
  333.  {
  334.      if( !(cpu&X264_CPU_MMXEXT) )
  335.          return;
  336. -#if !HIGH_BIT_DEPTH
  337. +#if HIGH_BIT_DEPTH
  338. +    if( !(cpu&X264_CPU_SSE2) )
  339. +        return;
  340. +    pf[I_PRED_4x4_DDL] = x264_predict_4x4_ddl_sse2;
  341. +#else
  342.      pf[I_PRED_4x4_VR]  = x264_predict_4x4_vr_mmxext;
  343.      pf[I_PRED_4x4_DDL] = x264_predict_4x4_ddl_mmxext;
  344.      pf[I_PRED_4x4_VL]  = x264_predict_4x4_vl_mmxext;
  345. @@ -487,5 +492,5 @@ void x264_predict_4x4_init_mmx( int cpu, x264_predict_t pf[12] )
  346.      pf[I_PRED_4x4_DDR] = x264_predict_4x4_ddr_ssse3;
  347.      pf[I_PRED_4x4_VR]  = x264_predict_4x4_vr_ssse3;
  348.      pf[I_PRED_4x4_HD]  = x264_predict_4x4_hd_ssse3;
  349. -#endif // !HIGH_BIT_DEPTH
  350. +#endif // HIGH_BIT_DEPTH
  351.  }
  352. --
  353. 1.7.2.3
  354.  
  355.  
  356. From b0236007e86ec4bdc5909d950a2a57f3aac5ce6d Mon Sep 17 00:00:00 2001
  357. From: Daniel Kang <daniel.d.kang@gmail.com>
  358. Date: Thu, 25 Nov 2010 19:57:30 -0500
  359. Subject: [PATCH 2/3] Function 2?
  360.  
  361. ---
  362. common/x86/predict-a.asm |   36 +++++++++++++++++++++++++++++++++++-
  363.  common/x86/predict-c.c   |    2 ++
  364.  2 files changed, 37 insertions(+), 1 deletions(-)
  365.  
  366. diff --git a/common/x86/predict-a.asm b/common/x86/predict-a.asm
  367. index 739ce35..f2ab91e 100644
  368. --- a/common/x86/predict-a.asm
  369. +++ b/common/x86/predict-a.asm
  370. @@ -245,8 +245,40 @@ PREDICT_4x4 mmxext
  371.  PREDICT_4x4 ssse3
  372.  
  373.  ;-----------------------------------------------------------------------------
  374. -; void predict_4x4_hu( uint8_t *src )
  375. +; void predict_4x4_hu( pixel *src )
  376.  ;-----------------------------------------------------------------------------
  377. +%ifdef HIGH_BIT_DEPTH
  378. +INIT_XMM
  379. +cglobal predict_4x4_hu_sse2, 1,1,7
  380. +    mova       m0, [r0+2*0*FDEC_STRIDE-8*2]
  381. +    punpckhwd  m0, [r0+2*1*FDEC_STRIDE-8*2]
  382. +    mova       m1, [r0+2*2*FDEC_STRIDE-8*2]
  383. +    punpckhwd  m1, [r0+2*3*FDEC_STRIDE-8*2]
  384. +    punpckhdq  m0, m1
  385. +    mova       m1, m0
  386. +    pshufhw    m1, m1, 0xFF
  387. +    punpckhqdq m1, m1
  388. +    punpckhqdq m0, m1
  389. +    mova       m2, m0
  390. +    mova       m3, m0
  391. +    mova       m6, m0
  392. +    psrldq     m2, 4
  393. +    psrldq     m3, 2
  394. +    pavgw      m6, m3
  395. +    PRED8x8_LOWPASS w, m4, m0, m2, m3, m5
  396. +    punpcklwd  m6, m4
  397. +%assign Y 0
  398. +    movq    [r0+Y*2*FDEC_STRIDE], m6
  399. +%rep 2
  400. +%assign Y (Y+1)
  401. +    psrldq   m6, 4
  402. +    movq    [r0+2*Y*FDEC_STRIDE], m6
  403. +%endrep
  404. +    movq    [r0+2*3*FDEC_STRIDE], m1
  405. +    RET
  406. +
  407. +%else
  408. +INIT_MMX
  409.  cglobal predict_4x4_hu_mmxext, 1,1
  410.      movq      mm0, [r0+0*FDEC_STRIDE-8]
  411.      punpckhbw mm0, [r0+1*FDEC_STRIDE-8]
  412. @@ -274,10 +306,12 @@ cglobal predict_4x4_hu_mmxext, 1,1
  413.  %endrep
  414.      movd    [r0+3*FDEC_STRIDE], mm1
  415.      RET
  416. +%endif ;HIGH_BIT_DEPTH
  417.  
  418.  ;-----------------------------------------------------------------------------
  419.  ; void predict_4x4_vl( uint8_t *src )
  420.  ;-----------------------------------------------------------------------------
  421. +INIT_MMX
  422.  cglobal predict_4x4_vl_mmxext, 1,1
  423.      movq        mm1, [r0-FDEC_STRIDE]
  424.      movq        mm3, mm1
  425. diff --git a/common/x86/predict-c.c b/common/x86/predict-c.c
  426. index 077f2c7..8f15e4e 100644
  427. --- a/common/x86/predict-c.c
  428. +++ b/common/x86/predict-c.c
  429. @@ -74,6 +74,7 @@
  430.   void x264_predict_4x4_dc_mmxext( uint8_t *src );
  431.   void x264_predict_4x4_ddr_ssse3( uint8_t *src );
  432.   void x264_predict_4x4_hu_mmxext( uint8_t *src );
  433. + void x264_predict_4x4_hu_sse2( uint16_t *src );
  434.   void x264_predict_16x16_dc_top_sse2( uint8_t *src );
  435.   void x264_predict_16x16_dc_core_sse2( uint8_t *src, int i_dc_left );
  436.   void x264_predict_16x16_dc_left_core_sse2( uint8_t *src, int i_dc_left );
  437. @@ -479,6 +480,7 @@ void x264_predict_4x4_init_mmx( int cpu, x264_predict_t pf[12] )
  438.      if( !(cpu&X264_CPU_SSE2) )
  439.          return;
  440.      pf[I_PRED_4x4_DDL] = x264_predict_4x4_ddl_sse2;
  441. +    pf[I_PRED_4x4_HU]  = x264_predict_4x4_hu_sse2;
  442.  #else
  443.      pf[I_PRED_4x4_VR]  = x264_predict_4x4_vr_mmxext;
  444.      pf[I_PRED_4x4_DDL] = x264_predict_4x4_ddl_mmxext;
  445. --
  446. 1.7.2.3
  447.  
  448.  
  449. From 8a6a2631e91e4b80834631abb257b306f8d90e64 Mon Sep 17 00:00:00 2001
  450. From: Daniel Kang <daniel.d.kang@gmail.com>
  451. Date: Fri, 26 Nov 2010 00:24:28 -0500
  452. Subject: [PATCH 3/3] Patch 3?
  453.  
  454. ---
  455. common/x86/predict-a.asm |   43 ++++++++++++++++++++++++++-----------------
  456.  common/x86/predict-c.c   |    2 ++
  457.  2 files changed, 28 insertions(+), 17 deletions(-)
  458.  
  459. diff --git a/common/x86/predict-a.asm b/common/x86/predict-a.asm
  460. index f2ab91e..acdcca3 100644
  461. --- a/common/x86/predict-a.asm
  462. +++ b/common/x86/predict-a.asm
  463. @@ -309,28 +309,37 @@ cglobal predict_4x4_hu_mmxext, 1,1
  464.  %endif ;HIGH_BIT_DEPTH
  465.  
  466.  ;-----------------------------------------------------------------------------
  467. -; void predict_4x4_vl( uint8_t *src )
  468. -;-----------------------------------------------------------------------------
  469. -INIT_MMX
  470. -cglobal predict_4x4_vl_mmxext, 1,1
  471. -    movq        mm1, [r0-FDEC_STRIDE]
  472. -    movq        mm3, mm1
  473. -    movq        mm2, mm1
  474. -    psrlq       mm3, 8
  475. -    psrlq       mm2, 16
  476. -    movq        mm4, mm3
  477. -    pavgb       mm4, mm1
  478. -
  479. -    PRED8x8_LOWPASS b, mm0, mm1, mm2, mm3, mm5
  480. -
  481. -    movd        [r0+0*FDEC_STRIDE], mm4
  482. -    movd        [r0+1*FDEC_STRIDE], mm0
  483. -    psrlq       mm4, 8
  484. -    psrlq       mm0, 8
  485. -    movd        [r0+2*FDEC_STRIDE], mm4
  486. -    movd        [r0+3*FDEC_STRIDE], mm0
  487. +; void predict_4x4_vl( pixel *src )
  488. +;-----------------------------------------------------------------------------
  489. +%macro PREDICT_4x4_V1 4
  490. +cglobal predict_4x4_vl_%1, 1,1
  491. +    mova        m1, [r0-SIZEOF_PIXEL*FDEC_STRIDE]
  492. +    mova        m3, m1
  493. +    mova        m2, m1
  494. +    psrl%2      m3, %3
  495. +    psrl%2      m2, %3*2
  496. +    mova        m4, m3
  497. +    pavg%4      m4, m1
  498. +
  499. +    PRED8x8_LOWPASS %4, m0, m1, m2, m3, m5
  500. +
  501. +    movh        [r0+SIZEOF_PIXEL*0*FDEC_STRIDE], m4
  502. +    movh        [r0+SIZEOF_PIXEL*1*FDEC_STRIDE], m0
  503. +    psrl%2      m4, %3
  504. +    psrl%2      m0, %3
  505. +    movh        [r0+SIZEOF_PIXEL*2*FDEC_STRIDE], m4
  506. +    movh        [r0+SIZEOF_PIXEL*3*FDEC_STRIDE], m0
  507.  
  508.      RET
  509. +%endmacro
  510. +
  511. +%ifdef HIGH_BIT_DEPTH
  512. +INIT_XMM
  513. +PREDICT_4x4_V1 sse2  , dq, 2, w
  514. +%else
  515. +INIT_MMX
  516. +PREDICT_4x4_V1 mmxext, q , 8, b
  517. +%endif
  518.  
  519.  ;-----------------------------------------------------------------------------
  520.  ; void predict_4x4_dc( uint8_t *src )
  521. diff --git a/common/x86/predict-c.c b/common/x86/predict-c.c
  522. index 8f15e4e..75843a0 100644
  523. --- a/common/x86/predict-c.c
  524. +++ b/common/x86/predict-c.c
  525. @@ -67,6 +67,7 @@
  526.   void x264_predict_4x4_ddl_sse2( uint16_t *src );
  527.   void x264_predict_4x4_ddr_mmxext( uint8_t *src );
  528.   void x264_predict_4x4_vl_mmxext( uint8_t *src );
  529. + void x264_predict_4x4_vl_sse2( uint16_t *src );
  530.   void x264_predict_4x4_vr_mmxext( uint8_t *src );
  531.   void x264_predict_4x4_vr_ssse3( uint8_t *src );
  532.   void x264_predict_4x4_hd_mmxext( uint8_t *src );
  533. @@ -481,6 +482,7 @@ void x264_predict_4x4_init_mmx( int cpu, x264_predict_t pf[12] )
  534.          return;
  535.      pf[I_PRED_4x4_DDL] = x264_predict_4x4_ddl_sse2;
  536.      pf[I_PRED_4x4_HU]  = x264_predict_4x4_hu_sse2;
  537. +    pf[I_PRED_4x4_VL]  = x264_predict_4x4_vl_sse2;
  538.  #else
  539.      pf[I_PRED_4x4_VR]  = x264_predict_4x4_vr_mmxext;
  540.      pf[I_PRED_4x4_DDL] = x264_predict_4x4_ddl_mmxext;
  541. --
  542. 1.7.2.3
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement