put_chroma_h_8_4x4_c: 0.4 ( 1.00x) put_chroma_h_8_4x4_neon: 0.0 ( 0.00x) put_chroma_h_8_4x4_i8mm: 0.1 ( 2.67x) put_chroma_h_8_8x8_c: 1.6 ( 1.00x) put_chroma_h_8_8x8_neon: 0.1 (11.00x) put_chroma_h_8_8x8_i8mm: 0.1 (11.00x) put_chroma_h_8_16x16_c: 6.9 ( 1.00x) put_chroma_h_8_16x16_neon: 1.1 ( 6.00x) put_chroma_h_8_16x16_i8mm: 0.7 (10.62x) put_chroma_h_8_32x32_c: 27.6 ( 1.00x) put_chroma_h_8_32x32_neon: 4.7 ( 5.95x) put_chroma_h_8_32x32_i8mm: 4.4 ( 6.28x) put_chroma_h_8_64x64_c: 116.2 ( 1.00x) put_chroma_h_8_64x64_neon: 19.1 ( 6.07x) put_chroma_h_8_64x64_i8mm: 17.1 ( 6.77x) put_chroma_h_8_128x128_c: 466.6 ( 1.00x) put_chroma_h_8_128x128_neon: 81.4 ( 5.73x) put_chroma_h_8_128x128_i8mm: 71.7 ( 6.51x)
Showing the changes to libavcodec (3 of 3 files). Show all
Unified · Split
| @@ -273,7 +273,11 @@ NEON8_FNPROTO_PARTIAL_6(pel_uni_w_pixels, (uint8_t *_dst, ptrdiff_t _dststride, · 272 unmodified lines | |||
| 273 | int height, int denom, int wx, int ox, | 273 | int height, int denom, int wx, int ox, |
| 274 | const int8_t *hf, const int8_t *vf, int width),); | 274 | const int8_t *hf, const int8_t *vf, int width),); |
| 275 | 275 | ||
| 276 | NEON8_FNPROTO_PARTIAL_6(qpel_h, (int16_t * dst, | 276 | NEON8_FNPROTO_PARTIAL_6(qpel_h, (int16_t *dst, |
| 277 | const uint8_t *_src, ptrdiff_t _srcstride, int height, | ||
| 278 | const int8_t *hf, const int8_t *vf, int width), _i8mm); | ||
| 279 | |||
| 280 | NEON8_FNPROTO_PARTIAL_6(epel_h, (int16_t *dst, | ||
| 277 | const uint8_t *_src, ptrdiff_t _srcstride, int height, | 281 | const uint8_t *_src, ptrdiff_t _srcstride, int height, |
| 278 | const int8_t *hf, const int8_t *vf, int width), _i8mm); | 282 | const int8_t *hf, const int8_t *vf, int width), _i8mm); |
| 279 | 283 | ||
| @@ -1910,6 +1910,12 @@ endfunc · 1909 unmodified lines | |||
| 1910 | 1910 | ||
| 1911 | #if HAVE_I8MM | 1911 | #if HAVE_I8MM |
| 1912 | ENABLE_I8MM | 1912 | ENABLE_I8MM |
| 1913 | |||
| 1914 | function ff_vvc_put_epel_h4_8_neon_i8mm, export=1 | ||
| 1915 | VVC_EPEL_H_HEADER | ||
| 1916 | b 1f | ||
| 1917 | endfunc | ||
| 1918 | |||
| 1913 | function ff_hevc_put_hevc_epel_h4_8_neon_i8mm, export=1 | 1919 | function ff_hevc_put_hevc_epel_h4_8_neon_i8mm, export=1 |
| 1914 | EPEL_H_HEADER | 1920 | EPEL_H_HEADER |
| 1915 | 1: ld1 {v4.8b}, [x1], x2 | 1921 | 1: ld1 {v4.8b}, [x1], x2 |
| @@ -1953,6 +1959,11 @@ function ff_hevc_put_hevc_epel_h6_8_neon_i8mm, export=1 · 37 unmodified lines | |||
| 1953 | ret | 1959 | ret |
| 1954 | endfunc | 1960 | endfunc |
| 1955 | 1961 | ||
| 1962 | function ff_vvc_put_epel_h8_8_neon_i8mm, export=1 | ||
| 1963 | VVC_EPEL_H_HEADER | ||
| 1964 | b 1f | ||
| 1965 | endfunc | ||
| 1966 | |||
| 1956 | function ff_hevc_put_hevc_epel_h8_8_neon_i8mm, export=1 | 1967 | function ff_hevc_put_hevc_epel_h8_8_neon_i8mm, export=1 |
| 1957 | EPEL_H_HEADER | 1968 | EPEL_H_HEADER |
| 1958 | 1: ld1 {v4.16b}, [x1], x2 | 1969 | 1: ld1 {v4.16b}, [x1], x2 |
| @@ -2003,6 +2014,11 @@ function ff_hevc_put_hevc_epel_h12_8_neon_i8mm, export=1 · 44 unmodified lines | |||
| 2003 | ret | 2014 | ret |
| 2004 | endfunc | 2015 | endfunc |
| 2005 | 2016 | ||
| 2017 | function ff_vvc_put_epel_h16_8_neon_i8mm, export=1 | ||
| 2018 | VVC_EPEL_H_HEADER | ||
| 2019 | b 1f | ||
| 2020 | endfunc | ||
| 2021 | |||
| 2006 | function ff_hevc_put_hevc_epel_h16_8_neon_i8mm, export=1 | 2022 | function ff_hevc_put_hevc_epel_h16_8_neon_i8mm, export=1 |
| 2007 | EPEL_H_HEADER | 2023 | EPEL_H_HEADER |
| 2008 | 1: ld1 {v0.16b, v1.16b}, [x1], x2 | 2024 | 1: ld1 {v0.16b, v1.16b}, [x1], x2 |
| @@ -2077,6 +2093,11 @@ function ff_hevc_put_hevc_epel_h24_8_neon_i8mm, export=1 · 68 unmodified lines | |||
| 2077 | ret | 2093 | ret |
| 2078 | endfunc | 2094 | endfunc |
| 2079 | 2095 | ||
| 2096 | function ff_vvc_put_epel_h32_8_neon_i8mm, export=1 | ||
| 2097 | VVC_EPEL_H_HEADER | ||
| 2098 | b 1f | ||
| 2099 | endfunc | ||
| 2100 | |||
| 2080 | function ff_hevc_put_hevc_epel_h32_8_neon_i8mm, export=1 | 2101 | function ff_hevc_put_hevc_epel_h32_8_neon_i8mm, export=1 |
| 2081 | EPEL_H_HEADER | 2102 | EPEL_H_HEADER |
| 2082 | 1: ld1 {v0.16b, v1.16b, v2.16b}, [x1], x2 | 2103 | 1: ld1 {v0.16b, v1.16b, v2.16b}, [x1], x2 |
| @@ -2176,11 +2197,8 @@ function ff_hevc_put_hevc_epel_h48_8_neon_i8mm, export=1 · 93 unmodified lines | |||
| 2176 | ret | 2197 | ret |
| 2177 | endfunc | 2198 | endfunc |
| 2178 | 2199 | ||
| 2179 | function ff_hevc_put_hevc_epel_h64_8_neon_i8mm, export=1 | 2200 | .macro put_epel_h64_8_neon_i8mm |
| 2180 | EPEL_H_HEADER | 2201 | ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [x1], #64 |
| 2181 | sub x2, x2, #64 | ||
| 2182 | 1: ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [x1], #64 | ||
| 2183 | subs w3, w3, #1 // height | ||
| 2184 | ext v4.16b, v0.16b, v1.16b, #1 | 2202 | ext v4.16b, v0.16b, v1.16b, #1 |
| 2185 | ext v5.16b, v0.16b, v1.16b, #2 | 2203 | ext v5.16b, v0.16b, v1.16b, #2 |
| 2186 | ext v6.16b, v0.16b, v1.16b, #3 | 2204 | ext v6.16b, v0.16b, v1.16b, #3 |
| @@ -2243,7 +2261,37 @@ function ff_hevc_put_hevc_epel_h64_8_neon_i8mm, export=1 · 56 unmodified lines | |||
| 2243 | xtn2 v22.8h, v26.4s | 2261 | xtn2 v22.8h, v26.4s |
| 2244 | xtn v23.4h, v23.4s | 2262 | xtn v23.4h, v23.4s |
| 2245 | xtn2 v23.8h, v27.4s | 2263 | xtn2 v23.8h, v27.4s |
| 2246 | st4 {v20.8h, v21.8h, v22.8h, v23.8h}, [x0], #64 | 2264 | st4 {v20.8h, v21.8h, v22.8h, v23.8h}, [x0], x10 |
| 2265 | .endm | ||
| 2266 | |||
| 2267 | function ff_vvc_put_epel_h64_8_neon_i8mm, export=1 | ||
| 2268 | VVC_EPEL_H_HEADER | ||
| 2269 | mov x10, #(VVC_MAX_PB_SIZE * 2 - 64) | ||
| 2270 | sub x2, x2, #64 | ||
| 2271 | b 1f | ||
| 2272 | endfunc | ||
| 2273 | |||
| 2274 | function ff_hevc_put_hevc_epel_h64_8_neon_i8mm, export=1 | ||
| 2275 | EPEL_H_HEADER | ||
| 2276 | mov x10, #64 | ||
| 2277 | sub x2, x2, #64 | ||
| 2278 | 1: | ||
| 2279 | subs w3, w3, #1 // height | ||
| 2280 | put_epel_h64_8_neon_i8mm | ||
| 2281 | b.ne 1b | ||
| 2282 | ret | ||
| 2283 | endfunc | ||
| 2284 | |||
| 2285 | function ff_vvc_put_epel_h128_8_neon_i8mm, export=1 | ||
| 2286 | VVC_EPEL_H_HEADER | ||
| 2287 | sub x11, x2, #128 | ||
| 2288 | mov x10, #64 | ||
| 2289 | mov x2, #0 | ||
| 2290 | 1: | ||
| 2291 | put_epel_h64_8_neon_i8mm | ||
| 2292 | subs w3, w3, #1 | ||
| 2293 | put_epel_h64_8_neon_i8mm | ||
| 2294 | add x1, x1, x11 | ||
| 2247 | b.ne 1b | 2295 | b.ne 1b |
| 2248 | ret | 2296 | ret |
| 2249 | endfunc | 2297 | endfunc |
| @@ -127,6 +127,13 @@ void ff_vvc_dsp_init_aarch64(VVCDSPContext *const c, const int bd) · 126 unmodified lines | |||
| 127 | c->inter.put[0][4][1][1] = ff_vvc_put_qpel_hv32_8_neon_i8mm; | 127 | c->inter.put[0][4][1][1] = ff_vvc_put_qpel_hv32_8_neon_i8mm; |
| 128 | c->inter.put[0][5][1][1] = ff_vvc_put_qpel_hv64_8_neon_i8mm; | 128 | c->inter.put[0][5][1][1] = ff_vvc_put_qpel_hv64_8_neon_i8mm; |
| 129 | c->inter.put[0][6][1][1] = ff_vvc_put_qpel_hv128_8_neon_i8mm; | 129 | c->inter.put[0][6][1][1] = ff_vvc_put_qpel_hv128_8_neon_i8mm; |
| 130 | |||
| 131 | c->inter.put[1][1][0][1] = ff_vvc_put_epel_h4_8_neon_i8mm; | ||
| 132 | c->inter.put[1][2][0][1] = ff_vvc_put_epel_h8_8_neon_i8mm; | ||
| 133 | c->inter.put[1][3][0][1] = ff_vvc_put_epel_h16_8_neon_i8mm; | ||
| 134 | c->inter.put[1][4][0][1] = ff_vvc_put_epel_h32_8_neon_i8mm; | ||
| 135 | c->inter.put[1][5][0][1] = ff_vvc_put_epel_h64_8_neon_i8mm; | ||
| 136 | c->inter.put[1][6][0][1] = ff_vvc_put_epel_h128_8_neon_i8mm; | ||
| 130 | } | 137 | } |
| 131 | } else if (bd == 10) { | 138 | } else if (bd == 10) { |
| 132 | c->alf.filter[LUMA] = alf_filter_luma_10_neon; | 139 | c->alf.filter[LUMA] = alf_filter_luma_10_neon; |