Jeongkeun Kim
de18feb0f0
avutil/aarch64: add pixelutils 32x32 SAD NEON implementation
...
This adds a NEON-optimized function for computing 32x32 Sum of Absolute
Differences (SAD) on AArch64, addressing a gap where x86 had SSE2/AVX2
implementations but AArch64 lacked equivalent coverage.
The implementation mirrors the existing sad8 and sad16 NEON functions,
employing a 4-row unrolled loop with UABAL and UABAL2 instructions for
efficient load-compute interleaving, and four 8x16-bit accumulators to
handle the wider 32-byte rows.
Benchmarks on AWS Graviton3 (Neoverse V1, c7g.xlarge) using checkasm:
sad_32x32_0: C 146.4 cycles -> NEON 98.1 cycles (1.49x speedup)
sad_32x32_1: C 141.4 cycles -> NEON 98.9 cycles (1.43x speedup)
sad_32x32_2: C 140.7 cycles -> NEON 95.0 cycles (1.48x speedup)
Signed-off-by: Jeongkeun Kim <variety0724@gmail.com >
2026-04-19 19:27:55 +00:00
..
2026-04-19 19:27:55 +00:00
2026-03-09 10:17:26 +01:00
2024-09-09 06:20:11 -04:00
2026-03-09 10:17:26 +01:00
2026-04-01 04:33:44 +00:00
2026-03-09 10:17:26 +01:00
2026-04-13 16:12:31 +02:00
2025-08-03 13:48:47 +02:00
2026-04-18 21:21:11 +02:00
2022-02-24 12:56:49 +01:00
2021-04-27 10:43:13 -03:00
2025-09-11 18:32:23 -03:00
2022-10-17 09:56:47 +02:00
2025-04-05 20:46:40 -03:00
2026-03-28 23:25:54 +01:00
2022-10-17 09:56:47 +02:00
2024-06-20 17:02:50 -03:00
2023-01-13 21:26:13 +02:00
2026-02-20 11:59:37 +01:00
2026-03-22 15:55:54 +00:00
2023-09-12 09:20:13 +02:00
2023-09-12 09:20:13 +02:00
2026-02-13 09:21:02 +01:00
2024-07-21 17:02:12 +02:00
2025-07-22 19:56:34 +02:00
2025-07-22 01:35:01 +02:00
2025-05-07 15:35:47 +02:00
2024-05-13 03:26:57 +02:00
2022-02-24 12:56:49 +01:00
2025-08-31 09:37:59 +02:00
2024-03-04 17:45:00 +01:00
2026-03-21 00:34:50 +00:00
2022-02-24 12:56:49 +01:00
2024-07-21 17:02:13 +02:00
2021-09-17 13:28:09 -03:00
2022-02-24 12:56:49 +01:00
2022-10-17 09:55:19 +02:00
2022-11-11 12:24:23 +01:00
2026-03-10 13:52:18 +01:00
2025-08-03 13:48:47 +02:00
2019-04-19 17:10:20 +05:30
2025-11-19 17:46:06 +00:00
2024-12-15 14:05:15 +01:00
2024-12-15 14:05:15 +01:00
2024-12-04 16:43:06 +08:00
2026-03-11 14:03:36 +00:00
2026-03-11 14:03:36 +00:00
2026-03-11 14:03:36 +00:00
2026-03-11 14:03:36 +00:00
2022-10-17 09:56:47 +02:00
2025-11-01 12:41:23 -03:00
2025-10-24 22:24:54 +00:00
2022-02-24 12:56:49 +01:00
2022-02-24 12:56:49 +01:00
2022-10-17 09:56:47 +02:00
2024-03-31 00:08:43 +01:00
2022-10-17 09:56:47 +02:00
2025-04-07 23:38:09 -03:00
2025-08-03 13:48:47 +02:00
2022-02-24 12:56:49 +01:00
2022-10-17 09:55:19 +02:00
2024-04-03 16:16:25 +02:00
2026-02-04 15:25:18 +00:00
2025-01-28 15:26:00 -03:00
2019-06-01 17:43:48 +08:00
2026-03-02 11:55:30 +01:00
2023-09-07 00:42:10 +02:00
2018-06-27 13:43:38 +02:00
2026-03-06 17:28:00 +01:00
2024-04-25 14:13:47 +01:00
2026-03-03 03:28:37 +01:00
2023-11-18 19:55:42 +01:00
2024-07-11 20:26:23 +08:00
2024-06-27 20:54:42 +08:00
2024-03-07 08:53:30 -03:00
2024-03-27 17:07:22 +01:00
2025-11-24 16:48:31 +01:00
2022-09-03 15:41:44 +02:00
2024-12-15 14:02:29 +01:00
2024-03-27 17:07:22 +01:00
2024-03-31 00:08:43 +01:00
2025-08-03 13:48:47 +02:00
2025-11-30 22:20:13 +01:00
2024-03-15 12:51:15 +01:00
2022-08-19 22:09:36 +02:00
2022-08-19 22:09:36 +02:00
2025-11-30 22:20:13 +01:00
2025-03-28 14:33:08 -03:00
2025-03-28 14:33:08 -03:00
2025-09-02 17:05:50 +02:00
2026-04-09 20:01:00 +00:00
2022-06-21 13:27:46 +03:00
2022-08-19 22:09:36 +02:00
2022-08-19 22:09:36 +02:00
2024-03-18 01:48:46 +01:00
2021-07-22 14:34:31 +02:00
2026-04-09 20:01:00 +00:00
2026-04-09 20:01:00 +00:00
2022-03-01 09:08:43 +08:00
2025-08-03 13:48:47 +02:00
2025-07-22 19:56:34 +02:00
2021-07-22 14:34:31 +02:00
2026-03-31 11:33:00 +00:00
2026-03-31 11:17:51 +00:00
2026-03-11 10:23:35 +01:00
2025-08-03 13:48:47 +02:00
2025-11-27 22:11:57 +01:00
2023-09-28 19:23:51 +02:00
2026-01-26 10:39:10 +00:00
2026-01-26 10:39:10 +00:00
2023-12-21 16:15:23 +08:00
2025-12-01 03:15:25 +00:00
2025-09-08 15:44:47 +00:00
2025-09-03 20:21:51 -05:00
2018-03-22 23:18:53 +00:00
2024-11-05 10:28:03 +08:00
2025-07-18 14:44:39 +08:00
2023-01-26 23:31:37 +08:00
2023-01-26 23:31:37 +08:00
2025-07-18 14:44:39 +08:00
2025-07-18 14:44:39 +08:00
2025-12-03 11:52:54 +01:00
2025-08-03 13:48:47 +02:00
2025-08-03 13:48:47 +02:00
2025-08-03 13:48:47 +02:00
2022-07-05 15:20:08 +02:00
2025-12-08 21:31:13 +00:00
2026-01-18 03:33:04 +00:00
2024-03-07 08:53:31 -03:00
2026-02-19 16:52:58 +00:00
2024-07-05 19:13:43 +08:00
2026-04-12 20:50:38 +08:00
2026-03-14 17:05:06 +00:00
2025-07-18 14:44:39 +08:00
2025-08-03 13:48:47 +02:00
2026-02-08 21:58:06 -03:00
2025-12-29 11:59:36 -03:00
2024-03-31 00:08:43 +01:00
2025-12-23 03:39:16 +00:00
2023-12-13 18:51:32 +01:00
2022-10-24 20:11:20 +02:00
2022-02-24 12:56:49 +01:00
2025-12-03 11:52:54 +01:00
2025-06-12 14:17:37 +03:00
2024-08-26 10:26:59 +02:00
2025-08-03 13:48:47 +02:00
2025-03-22 03:35:28 +01:00
2025-11-30 22:20:13 +01:00
2024-06-01 18:05:58 +03:00
2025-12-13 21:33:11 +00:00
2025-08-03 13:48:47 +02:00
2022-02-24 12:56:49 +01:00
2024-06-18 15:24:12 +08:00
2021-07-21 16:35:27 +02:00
2021-07-29 22:02:05 +02:00
2026-04-05 22:23:08 +02:00
2024-06-20 17:02:50 -03:00
2024-04-11 11:46:18 -03:00
2023-05-29 00:45:28 +02:00
2025-08-03 13:48:47 +02:00
2023-09-07 00:42:10 +02:00
2021-07-22 14:34:31 +02:00
2025-06-13 11:36:20 +03:00
2024-03-31 00:08:43 +01:00
2023-09-07 00:42:10 +02:00
2023-09-07 00:42:10 +02:00
2021-07-22 14:34:31 +02:00
2021-12-18 11:55:47 -08:00
2026-03-12 18:26:42 +01:00
2025-08-03 13:48:47 +02:00
2024-11-16 20:58:49 +01:00
2022-10-17 09:56:47 +02:00
2024-03-31 00:08:43 +01:00
2025-11-06 21:46:43 +01:00
2025-09-02 17:05:50 +02:00
2026-03-09 10:17:26 +01:00
2022-02-24 12:56:49 +01:00
2025-11-06 21:46:43 +01:00
2022-02-24 12:56:49 +01:00
2025-02-13 11:41:51 +02:00
2023-07-05 10:25:12 -07:00
2024-11-16 20:58:49 +01:00
2025-08-03 13:48:47 +02:00
2022-02-24 12:56:49 +01:00
2025-08-03 13:48:47 +02:00
2025-05-22 15:12:54 +02:00
2025-08-03 13:48:47 +02:00
2025-09-26 16:15:46 +00:00
2021-07-22 14:34:31 +02:00
2023-09-12 09:17:28 +02:00
2026-04-05 00:19:09 +00:00
2024-01-16 01:34:57 +01:00
2022-02-24 12:56:49 +01:00
2021-07-22 14:34:31 +02:00
2022-02-24 12:56:49 +01:00
2021-07-22 14:34:31 +02:00
2026-04-09 20:01:00 +00:00
2025-03-03 18:10:10 -03:00
2026-03-10 13:52:18 +01:00
2019-07-21 11:26:36 +02:00
2025-09-26 16:15:46 +00:00
2025-07-31 10:58:36 +02:00
2025-07-31 10:58:36 +02:00
2026-03-25 01:32:20 +00:00
2024-06-28 13:16:57 -03:00
2025-07-01 22:41:56 +02:00
2025-08-03 13:48:47 +02:00
2022-02-24 12:56:49 +01:00
2025-08-15 19:54:01 +00:00
2023-09-07 00:42:10 +02:00
2018-04-26 19:41:19 +02:00
2019-05-02 13:50:31 -03:00
2020-12-28 01:12:26 -03:00
2025-03-02 18:43:08 +01:00
2025-03-02 18:43:08 +01:00
2026-03-13 22:48:32 +01:00
2024-01-14 14:58:57 +01:00
2024-08-05 21:16:26 +03:00
2024-06-30 09:11:44 +02:00
2024-03-25 21:30:51 +01:00
2021-07-22 14:34:31 +02:00
2022-02-24 12:56:49 +01:00
2022-10-17 09:51:47 +02:00
2019-08-02 01:19:52 +01:00
2019-08-02 01:19:52 +01:00
2020-02-13 17:10:34 +00:00
2023-09-07 00:42:10 +02:00
2025-12-13 15:14:38 +00:00
2025-08-07 07:36:33 +00:00
2025-08-03 13:48:47 +02:00
2026-02-13 09:21:02 +01:00
2026-02-20 11:59:37 +01:00
2022-10-17 09:56:47 +02:00
2022-03-17 11:11:17 +02:00
2024-03-31 00:08:42 +01:00
2026-04-09 20:01:00 +00:00
2023-01-31 14:22:54 +02:00
2023-10-30 10:30:05 -03:00
2023-08-08 09:46:11 +02:00
2025-08-03 13:48:47 +02:00
2026-02-19 19:42:31 +01:00
2026-02-26 14:10:21 +01:00
2026-02-19 19:42:31 +01:00
2026-02-26 14:10:21 +01:00
2024-10-06 06:04:36 +02:00
2026-03-31 23:47:39 +02:00
2026-02-26 14:10:21 +01:00
2024-10-27 09:37:46 +01:00
2025-07-22 09:47:18 -03:00
2025-07-22 09:47:18 -03:00
2022-02-24 12:56:49 +01:00
2026-01-12 17:28:41 +01:00