[FFmpeg-cvslog] aarch64: vp8: Port missing epel8 functions from arm version

Martin Storsjö git at videolan.org
Thu Mar 14 21:17:11 EET 2019


ffmpeg | branch: master | Martin Storsjö <martin at martin.st> | Fri Feb  1 10:05:56 2019 +0200| [cc7ba00c35faf0478f1f56215e926f70ccb31282] | committer: Martin Storsjö

aarch64: vp8: Port missing epel8 functions from arm version

                      Cortex A53     A72     A73
vp8_put_epel8_h4_c:       2594.8  1159.6  1374.8
vp8_put_epel8_h4_neon:     506.4   244.2   314.0
vp8_put_epel8_h6_c:       3445.8  1677.1  1811.3
vp8_put_epel8_h6_neon:     634.4   371.7   433.0
vp8_put_epel8_v4_c:       2614.0  1174.8  1378.0
vp8_put_epel8_v4_neon:     321.0   221.7   235.8
vp8_put_epel8_v6_c:       3635.5  1703.0  2079.2
vp8_put_epel8_v6_neon:     416.9   317.0   295.5

Signed-off-by: Martin Storsjö <martin at martin.st>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=cc7ba00c35faf0478f1f56215e926f70ccb31282
---

 libavcodec/aarch64/vp8dsp_init_aarch64.c |  4 ++
 libavcodec/aarch64/vp8dsp_neon.S         | 87 ++++++++++++++++++++++++++++++++
 2 files changed, 91 insertions(+)

diff --git a/libavcodec/aarch64/vp8dsp_init_aarch64.c b/libavcodec/aarch64/vp8dsp_init_aarch64.c
index e296ccd893..6b59640e5f 100644
--- a/libavcodec/aarch64/vp8dsp_init_aarch64.c
+++ b/libavcodec/aarch64/vp8dsp_init_aarch64.c
@@ -46,8 +46,12 @@ av_cold void ff_vp78dsp_init_aarch64(VP8DSPContext *dsp)
     dsp->put_vp8_epel_pixels_tab[0][2][2] = ff_put_vp8_epel16_h6v6_neon;
 
     dsp->put_vp8_epel_pixels_tab[1][0][0] = ff_put_vp8_pixels8_neon;
+    dsp->put_vp8_epel_pixels_tab[1][0][1] = ff_put_vp8_epel8_h4_neon;
+    dsp->put_vp8_epel_pixels_tab[1][0][2] = ff_put_vp8_epel8_h6_neon;
+    dsp->put_vp8_epel_pixels_tab[1][1][0] = ff_put_vp8_epel8_v4_neon;
     dsp->put_vp8_epel_pixels_tab[1][1][1] = ff_put_vp8_epel8_h4v4_neon;
     dsp->put_vp8_epel_pixels_tab[1][1][2] = ff_put_vp8_epel8_h6v4_neon;
+    dsp->put_vp8_epel_pixels_tab[1][2][0] = ff_put_vp8_epel8_v6_neon;
     dsp->put_vp8_epel_pixels_tab[1][2][1] = ff_put_vp8_epel8_h4v6_neon;
     dsp->put_vp8_epel_pixels_tab[1][2][2] = ff_put_vp8_epel8_h6v6_neon;
 }
diff --git a/libavcodec/aarch64/vp8dsp_neon.S b/libavcodec/aarch64/vp8dsp_neon.S
index 4ea62c0644..c5badc432f 100644
--- a/libavcodec/aarch64/vp8dsp_neon.S
+++ b/libavcodec/aarch64/vp8dsp_neon.S
@@ -957,6 +957,51 @@ function ff_put_vp8_epel16_h6v6_neon, export=1
         ret
 endfunc
 
+function ff_put_vp8_epel8_v6_neon, export=1
+        sub             x2,  x2,  x3,  lsl #1
+
+        movrel          x7,  subpel_filters, -16
+        add             x6,  x7,  w6, uxtw #4
+        ld1             {v0.8h},  [x6]
+1:
+        ld1             {v2.8b},  [x2], x3
+        ld1             {v3.8b},  [x2], x3
+        ld1             {v4.8b},  [x2], x3
+        ld1             {v5.8b},  [x2], x3
+        ld1             {v6.8b},  [x2], x3
+        ld1             {v7.8b},  [x2], x3
+        ld1             {v28.8b}, [x2]
+
+        sub             x2,  x2,  x3,  lsl #2
+
+        vp8_epel8_v6_y2 v2, v3, v2, v3, v4, v5, v6, v7, v28
+
+        st1             {v2.8b}, [x0], x1
+        st1             {v3.8b}, [x0], x1
+        subs            w4,  w4,  #2
+        b.ne            1b
+
+        ret
+endfunc
+
+function ff_put_vp8_epel8_h6_neon, export=1
+        sub             x2,  x2,  #2
+
+        movrel          x7,  subpel_filters, -16
+        add             x5,  x7,  w5, uxtw #4
+        ld1             {v0.8h},        [x5]
+1:
+        ld1             {v2.8b, v3.8b}, [x2], x3
+
+        vp8_epel8_h6    v2,  v2,  v3
+
+        st1             {v2.8b}, [x0], x1
+        subs            w4,  w4,  #1
+        b.ne            1b
+
+        ret
+endfunc
+
 function ff_put_vp8_epel8_h6v6_neon, export=1
         sub             x2,  x2,  x3,  lsl #1
         sub             x2,  x2,  #2
@@ -1003,6 +1048,48 @@ function ff_put_vp8_epel8_h6v6_neon, export=1
         ret
 endfunc
 
+function ff_put_vp8_epel8_v4_neon, export=1
+        sub             x2,  x2,  x3
+
+        movrel          x7,  subpel_filters, -16
+        add             x6,  x7,  w6, uxtw #4
+        ld1             {v0.8h},     [x6]
+1:
+        ld1             {v2.8b},     [x2], x3
+        ld1             {v3.8b},     [x2], x3
+        ld1             {v4.8b},     [x2], x3
+        ld1             {v5.8b},     [x2], x3
+        ld1             {v6.8b},     [x2]
+        sub             x2,  x2,  x3,  lsl #1
+
+        vp8_epel8_v4_y2 v2, v2, v3, v4, v5, v6
+
+        st1             {v2.d}[0], [x0], x1
+        st1             {v2.d}[1], [x0], x1
+        subs            w4,  w4,  #2
+        b.ne            1b
+
+        ret
+endfunc
+
+function ff_put_vp8_epel8_h4_neon, export=1
+        sub             x2,  x2,  #1
+
+        movrel          x7,  subpel_filters, -16
+        add             x5,  x7,  w5, uxtw #4
+        ld1             {v0.8h},       [x5]
+1:
+        ld1             {v2.8b,v3.8b}, [x2], x3
+
+        vp8_epel8_h4    v2,  v2,  v3
+
+        st1             {v2.8b}, [x0], x1
+        subs            w4,  w4,  #1
+        b.ne            1b
+
+        ret
+endfunc
+
 function ff_put_vp8_epel8_h4v6_neon, export=1
         sub             x2,  x2,  x3,  lsl #1
         sub             x2,  x2,  #1



More information about the ffmpeg-cvslog mailing list