With Apple M1 (no i8mm): put_luma_hv_8_4x4_c: 2.2 ( 1.00x) put_luma_hv_8_4x4_neon: 0.8 ( 3.00x) put_luma_hv_8_8x8_c: 7.0 ( 1.00x) put_luma_hv_8_8x8_neon: 0.8 ( 9.33x) put_luma_hv_8_16x16_c: 22.8 ( 1.00x) put_luma_hv_8_16x16_neon: 2.5 ( 9.10x) put_luma_hv_8_32x32_c: 84.8 ( 1.00x) put_luma_hv_8_32x32_neon: 9.5 ( 8.92x) put_luma_hv_8_64x64_c: 333.0 ( 1.00x) put_luma_hv_8_64x64_neon: 35.5 ( 9.38x) put_luma_hv_8_128x128_c: 1294.5 ( 1.00x) put_luma_hv_8_128x128_neon: 137.8 ( 9.40x) With Pixel 8 Pro: put_luma_hv_8_4x4_c: 5.0 ( 1.00x) put_luma_hv_8_4x4_neon: 0.8 ( 6.67x) put_luma_hv_8_4x4_i8mm: 0.2 (20.00x) put_luma_hv_8_8x8_c: 13.2 ( 1.00x) put_luma_hv_8_8x8_neon: 1.2 (10.60x) put_luma_hv_8_8x8_i8mm: 1.2 (10.60x) put_luma_hv_8_16x16_c: 44.2 ( 1.00x) put_luma_hv_8_16x16_neon: 4.5 ( 9.83x) put_luma_hv_8_16x16_i8mm: 4.2 (10.41x) put_luma_hv_8_32x32_c: 160.8 ( 1.00x) put_luma_hv_8_32x32_neon: 17.5 ( 9.19x) put_luma_hv_8_32x32_i8mm: 16.0 (10.05x) put_luma_hv_8_64x64_c: 611.2 ( 1.00x) put_luma_hv_8_64x64_neon: 68.0 ( 8.99x) put_luma_hv_8_64x64_i8mm: 62.2 ( 9.82x) put_luma_hv_8_128x128_c: 2384.8 ( 1.00x) put_luma_hv_8_128x128_neon: 268.8 ( 8.87x) put_luma_hv_8_128x128_i8mm: 245.8 ( 9.70x)
Showing the changes to libavcodec (3 of 3 files). Show all
Unified · Split
| @@ -282,4 +282,12 @@ void ff_vvc_put_qpel_v8_8_neon(int16_t *dst, const uint8_t *_src, · 281 unmodified lines | ||
| 282 | 282 | ptrdiff_t _srcstride, int height, |
| 283 | 283 | const int8_t *hf, const int8_t *vf, int width); |
| 284 | 284 | |
| 285 | +NEON8_FNPROTO_PARTIAL_6(qpel_hv, (int16_t *dst, | |
| 286 | + const uint8_t *src, ptrdiff_t srcstride, int height, | |
| 287 | + const int8_t *hf, const int8_t *vf, int width),); | |
| 288 | + | |
| 289 | +NEON8_FNPROTO_PARTIAL_6(qpel_hv, (int16_t *dst, | |
| 290 | + const uint8_t *src, ptrdiff_t srcstride, int height, | |
| 291 | + const int8_t *hf, const int8_t *vf, int width), _i8mm); | |
| 292 | + | |
| 285 | 293 | #endif |
| @@ -4140,9 +4140,15 @@ endfunc · 4139 unmodified lines | ||
| 4140 | 4140 | DISABLE_I8MM |
| 4141 | 4141 | #endif |
| 4142 | 4142 | |
| 4143 | +function vvc_put_qpel_hv4_8_end_neon | |
| 4144 | + vvc_load_qpel_filterh x5 | |
| 4145 | + mov x7, #(VVC_MAX_PB_SIZE * 2) | |
| 4146 | + b 1f | |
| 4147 | +endfunc | |
| 4143 | 4148 | |
| 4144 | 4149 | function hevc_put_hevc_qpel_hv4_8_end_neon |
| 4145 | 4150 | load_qpel_filterh x5, x4 |
| 4151 | +1: | |
| 4146 | 4152 | ldr d16, [sp] |
| 4147 | 4153 | ldr d17, [sp, x7] |
| 4148 | 4154 | add sp, sp, x7, lsl #1 |
| @@ -4194,9 +4200,16 @@ function hevc_put_hevc_qpel_hv6_8_end_neon · 45 unmodified lines | ||
| 4194 | 4200 | ret |
| 4195 | 4201 | endfunc |
| 4196 | 4202 | |
| 4203 | +function vvc_put_qpel_hv8_8_end_neon | |
| 4204 | + vvc_load_qpel_filterh x5 | |
| 4205 | + mov x7, #(VVC_MAX_PB_SIZE * 2) | |
| 4206 | + b 1f | |
| 4207 | +endfunc | |
| 4208 | + | |
| 4197 | 4209 | function hevc_put_hevc_qpel_hv8_8_end_neon |
| 4198 | 4210 | mov x7, #128 |
| 4199 | 4211 | load_qpel_filterh x5, x4 |
| 4212 | +1: | |
| 4200 | 4213 | ldr q16, [sp] |
| 4201 | 4214 | ldr q17, [sp, x7] |
| 4202 | 4215 | add sp, sp, x7, lsl #1 |
| @@ -4247,9 +4260,16 @@ function hevc_put_hevc_qpel_hv12_8_end_neon · 44 unmodified lines | ||
| 4247 | 4260 | ret |
| 4248 | 4261 | endfunc |
| 4249 | 4262 | |
| 4263 | +function vvc_put_qpel_hv16_8_end_neon | |
| 4264 | + vvc_load_qpel_filterh x5 | |
| 4265 | + mov x7, #(VVC_MAX_PB_SIZE * 2) | |
| 4266 | + b 1f | |
| 4267 | +endfunc | |
| 4268 | + | |
| 4250 | 4269 | function hevc_put_hevc_qpel_hv16_8_end_neon |
| 4251 | 4270 | mov x7, #128 |
| 4252 | 4271 | load_qpel_filterh x5, x4 |
| 4272 | +1: | |
| 4253 | 4273 | ld1 {v16.8h, v17.8h}, [sp], x7 |
| 4254 | 4274 | ld1 {v18.8h, v19.8h}, [sp], x7 |
| 4255 | 4275 | ld1 {v20.8h, v21.8h}, [sp], x7 |
| @@ -4272,6 +4292,12 @@ function hevc_put_hevc_qpel_hv16_8_end_neon · 16 unmodified lines | ||
| 4272 | 4292 | ret |
| 4273 | 4293 | endfunc |
| 4274 | 4294 | |
| 4295 | +function vvc_put_qpel_hv32_8_end_neon | |
| 4296 | + vvc_load_qpel_filterh x5 | |
| 4297 | + mov x7, #(VVC_MAX_PB_SIZE * 2) | |
| 4298 | + b 0f | |
| 4299 | +endfunc | |
| 4300 | + | |
| 4275 | 4301 | function hevc_put_hevc_qpel_hv32_8_end_neon |
| 4276 | 4302 | mov x7, #128 |
| 4277 | 4303 | load_qpel_filterh x5, x4 |
| @@ -4325,6 +4351,25 @@ function ff_hevc_put_hevc_qpel_hv4_8_\suffix, export=1 · 47 unmodified lines | ||
| 4325 | 4351 | b hevc_put_hevc_qpel_hv4_8_end_neon |
| 4326 | 4352 | endfunc |
| 4327 | 4353 | |
| 4354 | +function ff_vvc_put_qpel_hv4_8_\suffix, export=1 | |
| 4355 | + add w10, w3, #8 | |
| 4356 | + lsl x10, x10, #8 | |
| 4357 | + mov x14, sp | |
| 4358 | + sub sp, sp, x10 // tmp_array | |
| 4359 | + stp x5, x30, [sp, #-48]! | |
| 4360 | + stp x0, x3, [sp, #16] | |
| 4361 | + str x14, [sp, #32] | |
| 4362 | + add x0, sp, #48 | |
| 4363 | + sub x1, x1, x2, lsl #1 | |
| 4364 | + add x3, x3, #7 | |
| 4365 | + sub x1, x1, x2 | |
| 4366 | + bl X(ff_vvc_put_qpel_h4_8_\suffix) | |
| 4367 | + ldr x14, [sp, #32] | |
| 4368 | + ldp x0, x3, [sp, #16] | |
| 4369 | + ldp x5, x30, [sp], #48 | |
| 4370 | + b vvc_put_qpel_hv4_8_end_neon | |
| 4371 | +endfunc | |
| 4372 | + | |
| 4328 | 4373 | function ff_hevc_put_hevc_qpel_hv6_8_\suffix, export=1 |
| 4329 | 4374 | add w10, w3, #8 |
| 4330 | 4375 | mov x7, #128 |
| @@ -4364,6 +4409,25 @@ function ff_hevc_put_hevc_qpel_hv8_8_\suffix, export=1 · 33 unmodified lines | ||
| 4364 | 4409 | b hevc_put_hevc_qpel_hv8_8_end_neon |
| 4365 | 4410 | endfunc |
| 4366 | 4411 | |
| 4412 | +function ff_vvc_put_qpel_hv8_8_\suffix, export=1 | |
| 4413 | + add w10, w3, #8 | |
| 4414 | + lsl x10, x10, #8 | |
| 4415 | + sub x1, x1, x2, lsl #1 | |
| 4416 | + mov x14, sp | |
| 4417 | + sub sp, sp, x10 // tmp_array | |
| 4418 | + stp x5, x30, [sp, #-48]! | |
| 4419 | + stp x0, x3, [sp, #16] | |
| 4420 | + str x14, [sp, #32] | |
| 4421 | + add x0, sp, #48 | |
| 4422 | + add x3, x3, #7 | |
| 4423 | + sub x1, x1, x2 | |
| 4424 | + bl X(ff_vvc_put_qpel_h8_8_\suffix) | |
| 4425 | + ldr x14, [sp, #32] | |
| 4426 | + ldp x0, x3, [sp, #16] | |
| 4427 | + ldp x5, x30, [sp], #48 | |
| 4428 | + b vvc_put_qpel_hv8_8_end_neon | |
| 4429 | +endfunc | |
| 4430 | + | |
| 4367 | 4431 | function ff_hevc_put_hevc_qpel_hv12_8_\suffix, export=1 |
| 4368 | 4432 | add w10, w3, #8 |
| 4369 | 4433 | lsl x10, x10, #7 |
| @@ -4403,6 +4467,25 @@ function ff_hevc_put_hevc_qpel_hv16_8_\suffix, export=1 · 33 unmodified lines | ||
| 4403 | 4467 | b hevc_put_hevc_qpel_hv16_8_end_neon |
| 4404 | 4468 | endfunc |
| 4405 | 4469 | |
| 4470 | +function ff_vvc_put_qpel_hv16_8_\suffix, export=1 | |
| 4471 | + add w10, w3, #8 | |
| 4472 | + lsl x10, x10, #8 | |
| 4473 | + sub x1, x1, x2, lsl #1 | |
| 4474 | + mov x14, sp | |
| 4475 | + sub sp, sp, x10 // tmp_array | |
| 4476 | + stp x5, x30, [sp, #-48]! | |
| 4477 | + stp x0, x3, [sp, #16] | |
| 4478 | + str x14, [sp, #32] | |
| 4479 | + add x3, x3, #7 | |
| 4480 | + add x0, sp, #48 | |
| 4481 | + sub x1, x1, x2 | |
| 4482 | + bl X(ff_vvc_put_qpel_h16_8_\suffix) | |
| 4483 | + ldr x14, [sp, #32] | |
| 4484 | + ldp x0, x3, [sp, #16] | |
| 4485 | + ldp x5, x30, [sp], #48 | |
| 4486 | + b vvc_put_qpel_hv16_8_end_neon | |
| 4487 | +endfunc | |
| 4488 | + | |
| 4406 | 4489 | function ff_hevc_put_hevc_qpel_hv24_8_\suffix, export=1 |
| 4407 | 4490 | stp x4, x5, [sp, #-64]! |
| 4408 | 4491 | stp x2, x3, [sp, #16] |
| @@ -4439,6 +4522,26 @@ function ff_hevc_put_hevc_qpel_hv32_8_\suffix, export=1 · 30 unmodified lines | ||
| 4439 | 4522 | b hevc_put_hevc_qpel_hv32_8_end_neon |
| 4440 | 4523 | endfunc |
| 4441 | 4524 | |
| 4525 | +function ff_vvc_put_qpel_hv32_8_\suffix, export=1 | |
| 4526 | + add w10, w3, #8 | |
| 4527 | + sub x1, x1, x2, lsl #1 | |
| 4528 | + lsl x10, x10, #8 | |
| 4529 | + sub x1, x1, x2 | |
| 4530 | + mov x14, sp | |
| 4531 | + sub sp, sp, x10 // tmp_array | |
| 4532 | + stp x5, x30, [sp, #-48]! | |
| 4533 | + stp x0, x3, [sp, #16] | |
| 4534 | + str x14, [sp, #32] | |
| 4535 | + add x3, x3, #7 | |
| 4536 | + add x0, sp, #48 | |
| 4537 | + mov w6, #32 | |
| 4538 | + bl X(ff_vvc_put_qpel_h32_8_\suffix) | |
| 4539 | + ldr x14, [sp, #32] | |
| 4540 | + ldp x0, x3, [sp, #16] | |
| 4541 | + ldp x5, x30, [sp], #48 | |
| 4542 | + b vvc_put_qpel_hv32_8_end_neon | |
| 4543 | +endfunc | |
| 4544 | + | |
| 4442 | 4545 | function ff_hevc_put_hevc_qpel_hv48_8_\suffix, export=1 |
| 4443 | 4546 | stp x4, x5, [sp, #-64]! |
| 4444 | 4547 | stp x2, x3, [sp, #16] |
| @@ -4472,6 +4575,43 @@ function ff_hevc_put_hevc_qpel_hv64_8_\suffix, export=1 · 27 unmodified lines | ||
| 4472 | 4575 | ldr x30, [sp], #16 |
| 4473 | 4576 | ret |
| 4474 | 4577 | endfunc |
| 4578 | + | |
| 4579 | +function ff_vvc_put_qpel_hv64_8_\suffix, export=1 | |
| 4580 | + stp x4, x5, [sp, #-64]! | |
| 4581 | + stp x2, x3, [sp, #16] | |
| 4582 | + stp x0, x1, [sp, #32] | |
| 4583 | + str x30, [sp, #48] | |
| 4584 | + mov x6, #32 | |
| 4585 | + bl X(ff_vvc_put_qpel_hv32_8_\suffix) | |
| 4586 | + ldp x0, x1, [sp, #32] | |
| 4587 | + ldp x2, x3, [sp, #16] | |
| 4588 | + ldp x4, x5, [sp], #48 | |
| 4589 | + add x1, x1, #32 | |
| 4590 | + add x0, x0, #64 | |
| 4591 | + mov x6, #32 | |
| 4592 | + bl X(ff_vvc_put_qpel_hv32_8_\suffix) | |
| 4593 | + ldr x30, [sp], #16 | |
| 4594 | + ret | |
| 4595 | +endfunc | |
| 4596 | + | |
| 4597 | +function ff_vvc_put_qpel_hv128_8_\suffix, export=1 | |
| 4598 | + stp x4, x5, [sp, #-64]! | |
| 4599 | + stp x2, x3, [sp, #16] | |
| 4600 | + stp x0, x1, [sp, #32] | |
| 4601 | + str x30, [sp, #48] | |
| 4602 | + mov x6, #64 | |
| 4603 | + bl X(ff_vvc_put_qpel_hv64_8_\suffix) | |
| 4604 | + ldp x0, x1, [sp, #32] | |
| 4605 | + ldp x2, x3, [sp, #16] | |
| 4606 | + ldp x4, x5, [sp], #48 | |
| 4607 | + add x1, x1, #64 | |
| 4608 | + add x0, x0, #128 | |
| 4609 | + mov x6, #64 | |
| 4610 | + bl X(ff_vvc_put_qpel_hv64_8_\suffix) | |
| 4611 | + ldr x30, [sp], #16 | |
| 4612 | + ret | |
| 4613 | +endfunc | |
| 4614 | + | |
| 4475 | 4615 | .endm |
| 4476 | 4616 | |
| 4477 | 4617 | qpel_hv neon |
| @@ -67,6 +67,13 @@ void ff_vvc_dsp_init_aarch64(VVCDSPContext *const c, const int bd) · 66 unmodified lines | ||
| 67 | 67 | c->inter.put[0][5][1][0] = |
| 68 | 68 | c->inter.put[0][6][1][0] = ff_vvc_put_qpel_v8_8_neon; |
| 69 | 69 | |
| 70 | + c->inter.put[0][1][1][1] = ff_vvc_put_qpel_hv4_8_neon; | |
| 71 | + c->inter.put[0][2][1][1] = ff_vvc_put_qpel_hv8_8_neon; | |
| 72 | + c->inter.put[0][3][1][1] = ff_vvc_put_qpel_hv16_8_neon; | |
| 73 | + c->inter.put[0][4][1][1] = ff_vvc_put_qpel_hv32_8_neon; | |
| 74 | + c->inter.put[0][5][1][1] = ff_vvc_put_qpel_hv64_8_neon; | |
| 75 | + c->inter.put[0][6][1][1] = ff_vvc_put_qpel_hv128_8_neon; | |
| 76 | + | |
| 70 | 77 | c->inter.put_uni[0][1][0][0] = ff_vvc_put_pel_uni_pixels4_8_neon; |
| 71 | 78 | c->inter.put_uni[0][2][0][0] = ff_vvc_put_pel_uni_pixels8_8_neon; |
| 72 | 79 | c->inter.put_uni[0][3][0][0] = ff_vvc_put_pel_uni_pixels16_8_neon; |
| @@ -103,6 +110,13 @@ void ff_vvc_dsp_init_aarch64(VVCDSPContext *const c, const int bd) · 30 unmodified lines | ||
| 103 | 110 | c->inter.put[0][4][0][1] = ff_vvc_put_qpel_h32_8_neon_i8mm; |
| 104 | 111 | c->inter.put[0][5][0][1] = ff_vvc_put_qpel_h64_8_neon_i8mm; |
| 105 | 112 | c->inter.put[0][6][0][1] = ff_vvc_put_qpel_h128_8_neon_i8mm; |
| 113 | + | |
| 114 | + c->inter.put[0][1][1][1] = ff_vvc_put_qpel_hv4_8_neon_i8mm; | |
| 115 | + c->inter.put[0][2][1][1] = ff_vvc_put_qpel_hv8_8_neon_i8mm; | |
| 116 | + c->inter.put[0][3][1][1] = ff_vvc_put_qpel_hv16_8_neon_i8mm; | |
| 117 | + c->inter.put[0][4][1][1] = ff_vvc_put_qpel_hv32_8_neon_i8mm; | |
| 118 | + c->inter.put[0][5][1][1] = ff_vvc_put_qpel_hv64_8_neon_i8mm; | |
| 119 | + c->inter.put[0][6][1][1] = ff_vvc_put_qpel_hv128_8_neon_i8mm; | |
| 106 | 120 | } |
| 107 | 121 | } else if (bd == 10) { |
| 108 | 122 | c->alf.filter[LUMA] = alf_filter_luma_10_neon; |