| @@ -72,6 +72,11 @@ endconst · 71 unmodified lines |
| 72 | 72 | sxtl v0.8h, v0.8b |
| 73 | 73 | .endm |
| 74 | 74 | |
| 75 | +.macro vvc_load_epel_filterh freg |
| 76 | + ld1 {v0.8b}, [\freg] |
| 77 | + sxtl v0.8h, v0.8b |
| 78 | +.endm |
| 79 | + |
| 75 | 80 | .macro calc_epelh dst, src0, src1, src2, src3 |
| 76 | 81 | smull \dst\().4s, \src0\().4h, v0.h[0] |
| 77 | 82 | smlal \dst\().4s, \src1\().4h, v0.h[1] |
| @@ -2299,10 +2304,16 @@ endfunc · 2221 unmodified lines |
| 2299 | 2304 | DISABLE_I8MM |
| 2300 | 2305 | #endif |
| 2301 | 2306 | |
| 2307 | +function vvc_put_epel_hv4_8_end_neon |
| 2308 | + vvc_load_epel_filterh x5 |
| 2309 | + mov x10, #(VVC_MAX_PB_SIZE * 2) |
| 2310 | + b 0f |
| 2311 | +endfunc |
| 2302 | 2312 | |
| 2303 | 2313 | function hevc_put_hevc_epel_hv4_8_end_neon |
| 2304 | 2314 | load_epel_filterh x5, x4 |
| 2305 | 2315 | mov x10, #(HEVC_MAX_PB_SIZE * 2) |
| 2316 | +0: |
| 2306 | 2317 | ldr d16, [sp] |
| 2307 | 2318 | ldr d17, [sp, x10] |
| 2308 | 2319 | add sp, sp, x10, lsl #1 |
| @@ -2339,9 +2350,16 @@ function hevc_put_hevc_epel_hv6_8_end_neon · 30 unmodified lines |
| 2339 | 2350 | 2: ret |
| 2340 | 2351 | endfunc |
| 2341 | 2352 | |
| 2353 | +function vvc_put_epel_hv8_8_end_neon |
| 2354 | + vvc_load_epel_filterh x5 |
| 2355 | + mov x10, #(VVC_MAX_PB_SIZE * 2) |
| 2356 | + b 0f |
| 2357 | +endfunc |
| 2358 | + |
| 2342 | 2359 | function hevc_put_hevc_epel_hv8_8_end_neon |
| 2343 | 2360 | load_epel_filterh x5, x4 |
| 2344 | 2361 | mov x10, #(HEVC_MAX_PB_SIZE * 2) |
| 2362 | +0: |
| 2345 | 2363 | ldr q16, [sp] |
| 2346 | 2364 | ldr q17, [sp, x10] |
| 2347 | 2365 | add sp, sp, x10, lsl #1 |
| @@ -2379,9 +2397,16 @@ function hevc_put_hevc_epel_hv12_8_end_neon · 31 unmodified lines |
| 2379 | 2397 | 2: ret |
| 2380 | 2398 | endfunc |
| 2381 | 2399 | |
| 2400 | +function vvc_put_epel_hv16_8_end_neon |
| 2401 | + vvc_load_epel_filterh x5 |
| 2402 | + mov x10, #(VVC_MAX_PB_SIZE * 2) |
| 2403 | + b 0f |
| 2404 | +endfunc |
| 2405 | + |
| 2382 | 2406 | function hevc_put_hevc_epel_hv16_8_end_neon |
| 2383 | 2407 | load_epel_filterh x5, x4 |
| 2384 | 2408 | mov x10, #(HEVC_MAX_PB_SIZE * 2) |
| 2409 | +0: |
| 2385 | 2410 | ld1 {v16.8h, v17.8h}, [sp], x10 |
| 2386 | 2411 | ld1 {v18.8h, v19.8h}, [sp], x10 |
| 2387 | 2412 | ld1 {v20.8h, v21.8h}, [sp], x10 |
| @@ -2437,6 +2462,21 @@ function ff_hevc_put_hevc_epel_hv4_8_\suffix, export=1 · 49 unmodified lines |
| 2437 | 2462 | b hevc_put_hevc_epel_hv4_8_end_neon |
| 2438 | 2463 | endfunc |
| 2439 | 2464 | |
| 2465 | +function ff_vvc_put_epel_hv4_8_\suffix, export=1 |
| 2466 | + add w10, w3, #3 |
| 2467 | + lsl x10, x10, #8 |
| 2468 | + sub sp, sp, x10 // tmp_array |
| 2469 | + stp x5, x30, [sp, #-32]! |
| 2470 | + stp x0, x3, [sp, #16] |
| 2471 | + add x0, sp, #32 |
| 2472 | + sub x1, x1, x2 |
| 2473 | + add w3, w3, #3 |
| 2474 | + bl X(ff_vvc_put_epel_h4_8_\suffix) |
| 2475 | + ldp x0, x3, [sp, #16] |
| 2476 | + ldp x5, x30, [sp], #32 |
| 2477 | + b vvc_put_epel_hv4_8_end_neon |
| 2478 | +endfunc |
| 2479 | + |
| 2440 | 2480 | function ff_hevc_put_hevc_epel_hv6_8_\suffix, export=1 |
| 2441 | 2481 | add w10, w3, #3 |
| 2442 | 2482 | lsl x10, x10, #7 |
| @@ -2467,6 +2507,21 @@ function ff_hevc_put_hevc_epel_hv8_8_\suffix, export=1 · 24 unmodified lines |
| 2467 | 2507 | b hevc_put_hevc_epel_hv8_8_end_neon |
| 2468 | 2508 | endfunc |
| 2469 | 2509 | |
| 2510 | +function ff_vvc_put_epel_hv8_8_\suffix, export=1 |
| 2511 | + add w10, w3, #3 |
| 2512 | + lsl x10, x10, #8 |
| 2513 | + sub sp, sp, x10 // tmp_array |
| 2514 | + stp x5, x30, [sp, #-32]! |
| 2515 | + stp x0, x3, [sp, #16] |
| 2516 | + add x0, sp, #32 |
| 2517 | + sub x1, x1, x2 |
| 2518 | + add w3, w3, #3 |
| 2519 | + bl X(ff_vvc_put_epel_h8_8_\suffix) |
| 2520 | + ldp x0, x3, [sp, #16] |
| 2521 | + ldp x5, x30, [sp], #32 |
| 2522 | + b vvc_put_epel_hv8_8_end_neon |
| 2523 | +endfunc |
| 2524 | + |
| 2470 | 2525 | function ff_hevc_put_hevc_epel_hv12_8_\suffix, export=1 |
| 2471 | 2526 | add w10, w3, #3 |
| 2472 | 2527 | lsl x10, x10, #7 |
| @@ -2497,6 +2552,21 @@ function ff_hevc_put_hevc_epel_hv16_8_\suffix, export=1 · 24 unmodified lines |
| 2497 | 2552 | b hevc_put_hevc_epel_hv16_8_end_neon |
| 2498 | 2553 | endfunc |
| 2499 | 2554 | |
| 2555 | +function ff_vvc_put_epel_hv16_8_\suffix, export=1 |
| 2556 | + add w10, w3, #3 |
| 2557 | + lsl x10, x10, #8 |
| 2558 | + sub sp, sp, x10 // tmp_array |
| 2559 | + stp x5, x30, [sp, #-32]! |
| 2560 | + stp x0, x3, [sp, #16] |
| 2561 | + add x0, sp, #32 |
| 2562 | + sub x1, x1, x2 |
| 2563 | + add w3, w3, #3 |
| 2564 | + bl X(ff_vvc_put_epel_h16_8_\suffix) |
| 2565 | + ldp x0, x3, [sp, #16] |
| 2566 | + ldp x5, x30, [sp], #32 |
| 2567 | + b vvc_put_epel_hv16_8_end_neon |
| 2568 | +endfunc |
| 2569 | + |
| 2500 | 2570 | function ff_hevc_put_hevc_epel_hv24_8_\suffix, export=1 |
| 2501 | 2571 | add w10, w3, #3 |
| 2502 | 2572 | lsl x10, x10, #7 |
| @@ -2530,6 +2600,24 @@ function ff_hevc_put_hevc_epel_hv32_8_\suffix, export=1 · 27 unmodified lines |
| 2530 | 2600 | ret |
| 2531 | 2601 | endfunc |
| 2532 | 2602 | |
| 2603 | +function ff_vvc_put_epel_hv32_8_\suffix, export=1 |
| 2604 | + stp x4, x5, [sp, #-64]! |
| 2605 | + stp x2, x3, [sp, #16] |
| 2606 | + stp x0, x1, [sp, #32] |
| 2607 | + str x30, [sp, #48] |
| 2608 | + mov x6, #16 |
| 2609 | + bl X(ff_vvc_put_epel_hv16_8_\suffix) |
| 2610 | + ldp x0, x1, [sp, #32] |
| 2611 | + ldp x2, x3, [sp, #16] |
| 2612 | + ldp x4, x5, [sp], #48 |
| 2613 | + add x0, x0, #32 |
| 2614 | + add x1, x1, #16 |
| 2615 | + mov x6, #16 |
| 2616 | + bl X(ff_vvc_put_epel_hv16_8_\suffix) |
| 2617 | + ldr x30, [sp], #16 |
| 2618 | + ret |
| 2619 | +endfunc |
| 2620 | + |
| 2533 | 2621 | function ff_hevc_put_hevc_epel_hv48_8_\suffix, export=1 |
| 2534 | 2622 | stp x4, x5, [sp, #-64]! |
| 2535 | 2623 | stp x2, x3, [sp, #16] |
| @@ -2579,6 +2667,43 @@ function ff_hevc_put_hevc_epel_hv64_8_\suffix, export=1 · 43 unmodified lines |
| 2579 | 2667 | ldr x30, [sp], #16 |
| 2580 | 2668 | ret |
| 2581 | 2669 | endfunc |
| 2670 | + |
| 2671 | +function ff_vvc_put_epel_hv64_8_\suffix, export=1 |
| 2672 | + stp x4, x5, [sp, #-64]! |
| 2673 | + stp x2, x3, [sp, #16] |
| 2674 | + stp x0, x1, [sp, #32] |
| 2675 | + str x30, [sp, #48] |
| 2676 | + mov x6, #32 |
| 2677 | + bl X(ff_vvc_put_epel_hv32_8_\suffix) |
| 2678 | + ldp x0, x1, [sp, #32] |
| 2679 | + ldp x2, x3, [sp, #16] |
| 2680 | + ldp x4, x5, [sp], #48 |
| 2681 | + add x0, x0, #64 |
| 2682 | + add x1, x1, #32 |
| 2683 | + mov x6, #32 |
| 2684 | + bl X(ff_vvc_put_epel_hv32_8_\suffix) |
| 2685 | + ldr x30, [sp], #16 |
| 2686 | + ret |
| 2687 | +endfunc |
| 2688 | + |
| 2689 | +function ff_vvc_put_epel_hv128_8_\suffix, export=1 |
| 2690 | + stp x4, x5, [sp, #-64]! |
| 2691 | + stp x2, x3, [sp, #16] |
| 2692 | + stp x0, x1, [sp, #32] |
| 2693 | + str x30, [sp, #48] |
| 2694 | + mov x6, #64 |
| 2695 | + bl X(ff_vvc_put_epel_hv64_8_\suffix) |
| 2696 | + ldp x0, x1, [sp, #32] |
| 2697 | + ldp x2, x3, [sp, #16] |
| 2698 | + ldp x4, x5, [sp], #48 |
| 2699 | + add x0, x0, #128 |
| 2700 | + add x1, x1, #64 |
| 2701 | + mov x6, #64 |
| 2702 | + bl X(ff_vvc_put_epel_hv64_8_\suffix) |
| 2703 | + ldr x30, [sp], #16 |
| 2704 | + ret |
| 2705 | +endfunc |
| 2706 | + |
| 2582 | 2707 | .endm |
| 2583 | 2708 | |
| 2584 | 2709 | epel_hv neon |