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 | 273 | int height, int denom, int wx, int ox, |
| 274 | 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 | 281 | const uint8_t *_src, ptrdiff_t _srcstride, int height, |
| 278 | 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 | 1911 | #if HAVE_I8MM |
| 1912 | 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 | 1919 | function ff_hevc_put_hevc_epel_h4_8_neon_i8mm, export=1 |
| 1914 | 1920 | EPEL_H_HEADER |
| 1915 | 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 | 1959 | ret |
| 1954 | 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 | 1967 | function ff_hevc_put_hevc_epel_h8_8_neon_i8mm, export=1 |
| 1957 | 1968 | EPEL_H_HEADER |
| 1958 | 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 | 2014 | ret |
| 2004 | 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 | 2022 | function ff_hevc_put_hevc_epel_h16_8_neon_i8mm, export=1 |
| 2007 | 2023 | EPEL_H_HEADER |
| 2008 | 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 | 2093 | ret |
| 2078 | 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 | 2101 | function ff_hevc_put_hevc_epel_h32_8_neon_i8mm, export=1 |
| 2081 | 2102 | EPEL_H_HEADER |
| 2082 | 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 | 2197 | ret |
| 2177 | 2198 | endfunc |
| 2178 | 2199 | |
| 2179 | −function ff_hevc_put_hevc_epel_h64_8_neon_i8mm, export=1 | |
| 2180 | − EPEL_H_HEADER | |
| 2181 | − sub x2, x2, #64 | |
| 2182 | −1: ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [x1], #64 | |
| 2183 | − subs w3, w3, #1 // height | |
| 2200 | +.macro put_epel_h64_8_neon_i8mm | |
| 2201 | + ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [x1], #64 | |
| 2184 | 2202 | ext v4.16b, v0.16b, v1.16b, #1 |
| 2185 | 2203 | ext v5.16b, v0.16b, v1.16b, #2 |
| 2186 | 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 | 2261 | xtn2 v22.8h, v26.4s |
| 2244 | 2262 | xtn v23.4h, v23.4s |
| 2245 | 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 | 2295 | b.ne 1b |
| 2248 | 2296 | ret |
| 2249 | 2297 | endfunc |
| @@ -127,6 +127,13 @@ void ff_vvc_dsp_init_aarch64(VVCDSPContext *const c, const int bd) · 126 unmodified lines | ||
| 127 | 127 | c->inter.put[0][4][1][1] = ff_vvc_put_qpel_hv32_8_neon_i8mm; |
| 128 | 128 | c->inter.put[0][5][1][1] = ff_vvc_put_qpel_hv64_8_neon_i8mm; |
| 129 | 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 | 138 | } else if (bd == 10) { |
| 132 | 139 | c->alf.filter[LUMA] = alf_filter_luma_10_neon; |