Jun Zhao
89c21b5ab7
lavc/hevc: add aarch64 NEON for Planar prediction
...
Add NEON-optimized implementation for HEVC intra Planar prediction at
8-bit depth, supporting all block sizes (4x4 to 32x32).
Planar prediction implements bilinear interpolation using an incremental
base update: base_{y+1}[x] = base_y[x] - (top[x] - left[N]), reducing
per-row computation from 4 multiply-adds to 1 subtract + 1 multiply.
Uses rshrn for rounded narrowing shifts, eliminating manual rounding
bias. All left[y] values are broadcast in the NEON domain, avoiding
GP-to-NEON transfers.
4x4 interleaves row computations across 4 rows to break dependencies.
16x16 uses v19-v22 for persistent base/decrement vectors, avoiding
callee-saved register spills. 32x32 processes 8 rows per loop iteration
(4 iterations total) to reduce code size while maintaining full NEON
utilization.
Speedup over C on Apple M4 (checkasm --bench):
4x4: 2.25x 8x8: 6.40x 16x16: 9.72x 32x32: 3.21x
Signed-off-by: Jun Zhao <barryjzhao@tencent.com >
2026-03-30 14:32:10 +00:00
..
2026-03-14 21:23:53 +01:00
2026-03-30 14:32:10 +00:00
2026-03-28 11:25:38 +01:00
2026-03-25 12:19:46 +00:00
2026-03-30 14:32:10 +00:00
2026-03-16 11:51:49 +01:00
2026-03-17 16:40:05 +00:00
2026-03-27 18:48:48 +01:00
2026-03-05 14:02:39 +00:00
2026-03-24 18:12:00 +01:00
2026-03-30 13:51:53 +02:00
2026-03-03 01:10:09 +01:00
2026-03-07 19:21:38 -03:00
2026-03-28 12:18:37 +00:00
2026-03-28 22:07:54 -03:00
2026-03-11 10:23:35 +01:00
2026-03-11 10:23:35 +01:00
2026-03-11 10:23:35 +01:00
2026-03-30 13:23:56 +00:00
2026-03-11 10:23:35 +01:00
2026-03-13 04:39:52 +01:00
2026-03-14 19:31:44 +01:00
2026-03-14 19:31:45 +01:00
2026-03-03 13:52:58 -03:00
2026-03-28 22:07:54 -03:00
2026-03-07 20:14:36 +01:00
2026-03-15 19:27:07 -03:00
2026-03-10 13:52:18 +01:00
2026-03-14 21:23:17 +01:00
2026-03-15 19:20:06 -03:00
2026-03-15 19:20:06 -03:00
2026-03-24 11:12:25 -03:00
2026-03-13 09:18:42 -03:00
2026-03-10 13:52:18 +01:00
2026-03-07 19:22:14 -03:00
2026-03-07 19:21:38 -03:00
2026-03-04 14:25:00 +00:00
2026-03-28 22:07:54 -03:00
2026-03-28 22:07:54 -03:00
2026-03-10 13:52:18 +01:00
2026-03-22 00:33:26 +00:00
2026-03-10 13:52:19 +01:00
2026-03-02 12:01:15 +01:00
2026-03-03 13:07:46 +01:00
2026-03-03 13:07:46 +01:00
2026-03-14 23:24:11 +01:00
2026-03-20 15:50:09 +00:00
2026-03-20 15:50:09 +00:00
2026-03-10 19:31:00 +01:00
2026-03-10 13:52:19 +01:00
2026-03-02 18:41:13 +01:00
2026-03-07 20:14:36 +01:00
2026-03-02 17:51:45 +01:00
2026-03-14 16:52:58 +00:00
2026-03-03 13:07:46 +01:00
2026-03-15 19:20:06 -03:00
2026-03-15 19:20:06 -03:00
2026-03-18 13:25:08 -03:00
2026-03-10 13:52:19 +01:00
2026-03-04 22:31:19 +00:00
2026-03-04 22:31:19 +00:00
2026-03-01 12:04:14 +01:00
2026-03-15 17:25:12 -03:00
2026-03-03 00:35:21 +01:00
2026-03-27 13:56:00 +00:00
2026-03-09 18:39:33 -03:00
2026-03-13 09:18:42 -03:00
2026-03-28 18:33:12 -03:00
2026-03-13 09:18:42 -03:00
2026-03-13 16:09:40 +00:00
2026-03-13 16:09:40 +00:00
2026-03-13 02:49:59 +01:00
2026-03-28 22:07:54 -03:00
2026-03-17 13:39:59 -07:00
2026-03-06 23:25:29 +01:00
2026-03-28 23:25:31 +01:00
2026-03-20 04:40:06 +00:00
2026-03-12 14:47:01 +01:00
2026-03-12 14:47:01 +01:00
2026-03-07 20:14:36 +01:00
2026-03-10 13:52:19 +01:00
2026-03-07 20:14:36 +01:00
2026-03-07 20:14:36 +01:00
2026-03-03 13:07:46 +01:00
2026-03-04 10:40:12 +00:00
2026-03-10 13:52:18 +01:00
2026-03-07 20:14:36 +01:00
2026-03-28 20:14:13 +00:00
2026-03-10 15:08:16 +00:00
2026-03-07 20:14:36 +01:00
2026-03-07 19:21:44 -03:00
2026-03-07 19:22:40 -03:00
2026-03-25 16:48:12 +00:00
2026-03-06 02:33:59 +01:00
2026-03-05 14:02:39 +00:00
2026-03-05 14:02:39 +00:00
2026-03-05 14:02:39 +00:00
2026-03-05 14:02:39 +00:00
2026-03-13 09:18:42 -03:00
2026-03-28 22:07:54 -03:00
2026-03-10 13:52:19 +01:00
2026-03-07 20:14:36 +01:00
2026-03-07 20:14:36 +01:00
2026-03-07 20:14:36 +01:00
2026-03-18 18:05:20 +01:00
2026-03-28 11:25:38 +01:00
2026-03-28 11:25:38 +01:00
2026-03-28 11:25:38 +01:00
2026-03-28 11:25:38 +01:00
2026-03-28 11:25:38 +01:00
2026-03-02 19:01:46 +01:00
2026-03-02 19:01:46 +01:00
2026-03-05 01:23:40 +01:00
2026-03-06 23:08:03 +01:00
2026-03-10 13:52:18 +01:00
2026-03-12 14:47:01 +01:00
2026-03-17 13:39:59 -07:00
2026-03-19 14:44:40 +01:00
2026-03-19 14:44:40 +01:00
2026-03-19 14:44:40 +01:00
2026-03-28 22:07:54 -03:00
2026-03-03 02:41:05 +01:00
2026-03-10 13:52:19 +01:00
2026-03-25 14:31:34 +00:00
2026-03-07 15:14:25 +01:00
2026-03-10 13:52:18 +01:00
2026-03-13 23:22:54 +01:00
2026-03-16 10:24:33 +00:00