Marcos Ashton Iglesias
278eeeb16e
avcodec/x86/hevc: add SSSE3 pred_planar
...
Implements planar intra prediction for 8 bit. x86 has no HEVC intra
prediction at all; aarch64 NEON already covers planar, DC and angular.
Every term except (size-1-x)*left[y] is linear in y, so for a group of
eight columns they collapse into one running accumulator whose increment
left[size]-top[x] is loop invariant. Running columns outermost keeps that
accumulator and its delta in registers, so a row costs one pmullw and two
paddw with no reload of top[]. 16x16 and 32x32 run two groups together,
sharing the left[y] broadcast and writing a row with one 16 byte store.
Words suffice throughout: each coefficient pair sums to size, so the
largest value is 2*32*255 + 32 = 16352. SSSE3 rather than SSE2 since
pshufb does the broadcasts and the byte to word widening.
checkasm --bench on a Core Ultra 7 155H:
hevc_pred_planar_4x4_8_c: 18.4
hevc_pred_planar_4x4_8_ssse3: 5.5 ( 3.35x)
hevc_pred_planar_8x8_8_c: 83.1
hevc_pred_planar_8x8_8_ssse3: 16.3 ( 5.10x)
hevc_pred_planar_16x16_8_c: 224.8
hevc_pred_planar_16x16_8_ssse3: 47.3 ( 4.75x)
hevc_pred_planar_32x32_8_c: 629.5
hevc_pred_planar_32x32_8_ssse3: 196.5 ( 3.20x)
Part of #23022 .
2026-08-27 11:45:46 +00:00
..
2026-06-17 17:34:24 +09:00
2026-08-19 22:25:07 +02:00
2026-08-19 22:25:07 +02:00
2026-07-31 04:00:56 +00:00
2026-08-27 11:45:46 +00:00
2026-08-13 00:29:25 +02:00
2026-08-19 22:25:07 +02:00
2026-07-11 11:10:12 -03:00
2026-08-19 22:25:07 +02:00
2026-08-19 22:25:07 +02:00
2026-08-23 13:46:55 +02:00
2026-08-18 13:58:14 +09:00
2026-07-07 13:06:58 +00:00
2026-08-27 11:45:46 +00:00
2026-07-19 20:41:52 +08:00
2026-07-01 21:05:27 +09:00
2026-07-19 20:41:52 +08:00
2026-07-19 20:41:53 +08:00
2026-08-23 13:35:29 -03:00
2026-08-23 13:35:21 -03:00
2026-07-01 21:05:27 +09:00
2026-07-01 21:05:27 +09:00
2026-05-20 10:59:02 -03:00
2026-07-19 23:50:55 +08:00
2026-04-17 16:46:52 +02:00
2026-04-17 16:46:52 +02:00
2026-08-10 22:01:35 +00:00
2026-08-19 15:29:46 +00:00
2026-08-19 15:29:46 +00:00
2026-07-02 17:53:20 -03:00
2026-07-02 17:53:20 -03:00
2026-08-26 15:53:44 +00:00
2026-08-26 15:53:44 +00:00
2026-08-26 15:53:44 +00:00
2026-06-07 02:57:25 +00:00
2026-06-11 14:06:20 +00:00
2026-07-02 14:38:46 +00:00
2026-06-12 00:47:12 +00:00
2026-07-28 17:54:07 +02:00
2026-05-03 14:54:27 +00:00
2026-06-19 09:48:56 +00:00
2026-03-31 14:07:31 +00:00
2026-04-07 14:54:21 +00:00
2026-06-19 08:44:30 +00:00
2026-06-19 08:44:30 +00:00
2026-03-30 13:23:56 +00:00
2026-03-11 10:23:35 +01:00
2026-04-28 12:29:37 +00:00
2026-03-13 04:39:52 +01:00
2026-07-03 01:51:06 +00:00
2026-07-11 11:10:12 -03:00
2026-07-11 17:10:50 +09:00
2026-05-19 17:43:53 +09:00
2026-03-14 19:31:45 +01:00
2026-08-17 14:57:07 +09:00
2026-04-28 12:29:37 +00:00
2026-05-25 03:18:53 +00:00
2026-04-25 22:44:39 +02:00
2026-05-06 15:27:21 +02:00
2026-07-11 11:10:12 -03:00
2026-07-11 11:10:12 -03:00
2026-08-21 03:35:19 +00:00
2026-08-21 03:35:19 +00:00
2026-07-28 08:39:15 +00:00
2026-06-23 19:15:57 +02:00
2026-08-14 10:31:57 -03:00
2026-06-23 19:15:57 +02:00
2026-04-28 12:29:37 +00:00
2026-04-28 12:29:37 +00:00
2026-04-28 12:29:37 +00:00
2026-04-28 12:29:37 +00:00
2026-07-06 13:27:25 -03:00
2026-07-07 19:04:42 +00:00
2026-08-13 20:46:10 +00:00
2026-07-06 13:26:02 -03:00
2026-07-06 13:26:02 -03:00
2026-07-06 13:26:02 -03:00
2026-07-06 13:26:02 -03:00
2026-03-15 19:27:07 -03:00
2026-04-28 12:29:37 +00:00
2026-08-11 20:20:16 +02:00
2026-08-11 20:20:16 +02:00
2026-08-11 20:20:16 +02:00
2026-08-11 20:20:16 +02:00
2026-07-02 16:45:04 +09:00
2026-07-28 18:04:35 +00:00
2026-06-20 21:19:56 -03:00
2026-05-08 09:35:38 +02:00
2026-05-08 09:35:38 +02:00
2026-06-12 00:43:44 +00:00
2026-06-12 00:43:44 +00:00
2026-06-12 00:43:44 +00:00
2026-06-13 15:57:19 +00:00
2026-08-01 14:45:45 +00:00
2026-03-15 19:20:06 -03:00
2026-03-15 19:20:06 -03:00
2026-08-09 15:01:31 -03:00
2026-04-28 12:24:54 +00:00
2026-05-08 09:35:38 +02:00
2026-05-08 09:35:38 +02:00
2026-07-31 13:18:57 +00:00
2026-07-28 17:54:07 +02:00
2026-03-07 19:21:38 -03:00
2026-07-28 17:54:07 +02:00
2026-08-14 18:28:09 +02:00
2026-06-16 10:11:32 -03:00
2026-04-28 14:31:19 +02:00
2026-08-14 10:31:57 -03:00
2026-05-30 13:57:13 +00:00
2026-06-03 20:35:41 +00:00
2026-08-19 22:35:29 +00:00
2026-07-28 08:39:15 +00:00
2026-07-28 08:39:15 +00:00
2026-08-21 08:25:47 +00:00
2026-06-13 11:21:14 +00:00
2026-06-13 11:21:14 +00:00
2026-08-21 08:25:47 +00:00
2026-08-21 08:25:47 +00:00
2026-07-13 21:13:25 +02:00
2026-07-13 21:13:25 +02:00
2026-07-13 21:13:25 +02:00
2026-07-13 21:13:25 +02:00
2026-07-13 21:13:25 +02:00
2026-07-11 19:32:17 -03:00
2026-04-28 12:29:37 +00:00
2026-07-11 19:32:17 -03:00
2026-07-11 19:32:17 -03:00
2026-07-11 19:32:17 -03:00
2026-04-27 20:13:23 +00:00
2026-04-27 20:13:23 +00:00
2026-04-28 12:29:37 +00:00
2026-07-15 01:36:36 +00:00
2026-06-05 03:02:04 +00:00
2026-05-03 16:56:43 +02:00
2026-07-22 14:52:57 +02:00
2026-08-09 17:29:55 +02:00
2026-08-09 17:29:55 +02:00
2026-08-09 17:29:55 +02:00
2026-08-09 17:26:53 +02:00
2026-08-09 17:26:51 +02:00
2026-08-09 17:26:51 +02:00
2026-08-06 15:19:52 +00:00
2026-07-31 04:00:56 +00:00
2026-07-31 04:00:56 +00:00
2026-04-28 12:29:37 +00:00
2026-04-28 12:29:37 +00:00
2026-03-10 13:52:18 +01:00
2026-04-28 12:29:37 +00:00
2026-07-29 21:07:17 +00:00
2026-03-22 00:33:26 +00:00
2026-04-28 12:29:37 +00:00
2026-04-28 12:29:37 +00:00
2026-06-24 13:49:42 -07:00
2026-07-28 08:39:15 +00:00
2026-07-02 17:53:20 -03:00
2026-04-28 12:29:37 +00:00
2026-08-14 10:31:57 -03:00
2026-08-14 18:28:09 +02:00
2026-04-09 01:14:39 +02:00
2026-06-23 19:15:57 +02:00
2026-06-23 19:15:57 +02:00
2026-06-05 03:02:04 +00:00
2026-07-13 00:57:26 +00:00
2026-06-06 21:32:08 +00:00
2026-05-31 20:04:02 +09:00
2026-06-03 14:12:50 +09:00
2026-08-02 22:11:27 +09:00
2026-05-31 20:03:57 +09:00
2026-05-31 20:03:57 +09:00
2026-03-20 15:50:09 +00:00
2026-07-31 19:37:52 +00:00
2026-08-17 14:57:07 +09:00
2026-06-28 00:22:09 +00:00
2026-04-28 12:29:37 +00:00
2026-05-17 17:49:59 +00:00
2026-04-08 21:33:43 +02:00
2026-04-28 12:29:37 +00:00
2026-03-10 13:52:19 +01:00
2026-07-23 10:39:47 -03:00
2026-03-07 20:14:36 +01:00
2026-08-11 21:16:28 +02:00
2026-07-14 19:45:02 +00:00
2026-08-11 21:16:28 +02:00
2026-08-11 21:16:28 +02:00
2026-05-10 17:16:38 +02:00
2026-08-26 00:41:35 +00:00
2026-08-13 00:29:25 +02:00
2026-08-13 00:29:25 +02:00
2026-08-14 13:39:48 +00:00
2026-07-16 07:19:35 +00:00
2026-06-07 18:55:16 +00:00
2026-05-03 12:42:47 +00:00
2026-06-02 19:50:39 -03:00
2026-08-26 00:41:35 +00:00
2026-08-13 00:29:25 +02:00
2026-04-16 07:36:01 +02:00
2026-04-16 07:36:01 +02:00
2026-04-16 07:36:01 +02:00
2026-07-14 19:45:02 +00:00
2026-08-13 00:29:25 +02:00
2026-08-13 00:29:25 +02:00
2026-08-13 00:29:25 +02:00
2026-07-05 17:47:56 +00:00
2026-07-05 17:47:56 +00:00
2026-08-16 18:35:04 +02:00
2026-08-16 18:35:04 +02:00
2026-03-15 19:20:06 -03:00
2026-03-15 19:20:06 -03:00
2026-06-23 19:15:57 +02:00
2026-06-02 19:50:39 -03:00
2026-06-07 18:55:16 +00:00
2026-05-13 19:35:33 +00:00
2026-03-10 13:52:19 +01:00
2026-07-05 09:02:40 +02:00
2026-08-12 20:05:32 +02:00
2026-08-12 20:05:32 +02:00
2026-08-02 02:19:05 +02:00
2026-08-02 02:19:05 +02:00
2026-08-12 20:05:32 +02:00
2026-08-17 14:57:07 +09:00
2026-08-21 08:25:47 +00:00
2026-07-14 19:45:02 +00:00
2026-07-14 19:45:02 +00:00
2026-06-03 20:35:41 +00:00
2026-04-28 12:29:37 +00:00
2026-04-28 12:29:37 +00:00
2026-04-28 12:29:37 +00:00
2026-08-02 16:06:47 +00:00
2026-06-23 19:15:57 +02:00
2026-06-02 19:50:39 -03:00
2026-08-25 16:10:16 +00:00
2026-07-07 17:31:26 +00:00
2026-03-27 13:56:00 +00:00
2026-06-13 21:40:40 +00:00
2026-04-28 12:29:37 +00:00
2026-03-09 18:39:33 -03:00
2026-07-02 18:24:32 +02:00
2026-04-06 14:07:59 -03:00
2026-08-19 09:25:40 -03:00
2026-08-19 09:25:40 -03:00
2026-04-06 14:07:59 -03:00
2026-04-06 14:07:59 -03:00
2026-08-12 02:50:23 +00:00
2026-05-03 12:40:44 +00:00
2026-06-02 19:50:39 -03:00
2026-08-14 10:31:57 -03:00
2026-07-13 01:08:03 +00:00
2026-08-17 14:49:03 -03:00
2026-08-26 12:28:53 -03:00
2026-08-24 22:02:56 -03:00
2026-05-01 07:40:25 -04:00
2026-07-11 11:10:12 -03:00
2026-06-19 15:18:54 +02:00
2026-07-11 11:10:12 -03:00
2026-08-03 11:08:57 +00:00
2026-07-11 11:10:12 -03:00
2026-07-11 11:10:12 -03:00
2026-07-11 11:10:12 -03:00
2026-04-28 12:29:37 +00:00
2026-07-11 11:10:12 -03:00
2026-06-23 19:15:57 +02:00
2026-08-14 10:31:57 -03:00
2026-06-23 19:15:57 +02:00
2026-05-03 18:23:00 +02:00
2026-05-03 18:23:03 +02:00
2026-05-03 18:23:05 +02:00
2026-07-01 21:05:22 +09:00
2026-07-01 21:05:22 +09:00
2026-07-07 17:35:58 +00:00
2026-07-07 17:35:58 +00:00
2026-07-03 01:55:02 +00:00
2026-05-25 02:05:30 +00:00
2026-08-23 13:46:55 +02:00
2026-07-20 02:35:53 +00:00
2026-07-14 13:54:39 +00:00
2026-04-22 10:48:24 +03:00
2026-07-05 09:02:40 +02:00
2026-06-13 15:55:40 +00:00
2026-07-11 02:09:25 +00:00
2026-07-11 02:09:25 +00:00
2026-03-07 20:14:36 +01:00
2026-07-11 11:10:12 -03:00
2026-03-10 13:52:19 +01:00
2026-06-16 09:18:23 -03:00
2026-06-16 09:18:23 -03:00
2026-07-14 19:45:02 +00:00
2026-08-11 21:17:13 +02:00
2026-08-11 21:17:13 +02:00
2026-07-14 19:45:02 +00:00
2026-03-07 20:14:36 +01:00
2026-03-07 20:14:36 +01:00
2026-04-28 12:29:37 +00:00
2026-03-10 13:52:18 +01:00
2026-04-16 07:36:01 +02:00
2026-05-03 18:22:31 +02:00
2026-05-03 18:22:27 +02:00
2026-04-06 10:39:17 +02:00
2026-04-06 10:39:17 +02:00
2026-07-22 14:52:57 +02:00
2026-06-05 01:27:39 +00:00
2026-06-26 21:14:51 +00:00
2026-07-11 11:10:12 -03:00
2026-05-02 21:39:02 +00:00
2026-07-16 15:02:09 +02:00
2026-07-16 15:02:09 +02:00
2026-07-16 15:02:09 +02:00
2026-07-16 15:02:09 +02:00
2026-07-16 15:02:09 +02:00
2026-07-16 15:02:09 +02:00
2026-07-16 15:02:09 +02:00
2026-07-16 15:02:09 +02:00
2026-07-16 15:02:09 +02:00
2026-07-16 15:02:09 +02:00
2026-07-16 15:02:09 +02:00
2026-06-24 18:51:12 +00:00
2026-06-24 18:51:12 +00:00
2026-06-24 18:51:12 +00:00
2026-08-02 16:06:47 +00:00
2026-07-14 19:45:02 +00:00
2026-06-10 02:15:53 +00:00
2026-06-10 12:34:38 +00:00
2026-06-23 19:15:57 +02:00
2026-06-23 19:15:57 +02:00
2026-06-23 19:15:57 +02:00
2026-04-28 12:29:37 +00:00
2026-06-23 17:15:02 +02:00
2026-06-23 17:15:02 +02:00
2026-06-23 17:15:02 +02:00
2026-07-28 17:39:23 +02:00
2026-07-28 17:54:07 +02:00
2026-07-28 17:39:23 +02:00
2026-05-16 13:55:22 -03:00
2026-05-03 10:25:54 +00:00
2026-04-20 12:54:31 +02:00
2026-07-31 13:34:50 +00:00
2026-05-25 15:09:20 +00:00
2026-07-21 17:41:31 -04:00
2026-07-05 09:02:40 +02:00
2026-05-17 12:17:16 +09:00
2026-06-10 02:38:36 +09:00
2026-05-17 12:02:52 +09:00
2026-05-17 12:17:16 +09:00
2026-05-17 12:17:16 +09:00
2026-08-17 14:57:07 +09:00
2026-04-28 12:29:37 +00:00
2026-07-01 21:05:27 +09:00
2026-07-19 20:41:48 +08:00
2026-08-14 12:44:25 +00:00
2026-08-14 10:41:40 +02:00
2026-08-09 17:29:30 +02:00
2026-08-09 17:29:30 +02:00
2026-03-28 22:07:54 -03:00
2026-06-02 20:51:32 +00:00
2026-07-11 11:10:12 -03:00
2026-05-03 13:25:30 +00:00
2026-06-28 21:52:21 +00:00
2026-03-10 13:52:19 +01:00
2026-04-28 12:29:37 +00:00
2026-07-29 21:20:49 +00:00
2026-06-13 15:54:44 +00: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-06-13 15:54:44 +00:00
2026-03-18 18:05:20 +01:00
2026-05-16 13:55:22 -03:00
2026-06-13 22:03:59 +00: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-04-17 16:46:52 +02:00
2026-08-10 19:52:20 +02:00
2026-07-27 03:33:28 +00:00
2026-05-03 18:22:24 +02:00
2026-04-28 12:29:37 +00:00
2026-04-28 12:29:37 +00:00
2026-04-28 12:29:37 +00:00
2026-04-13 12:51:35 +02:00
2026-04-13 12:51:35 +02:00
2026-08-16 18:35:04 +02:00
2026-04-13 12:46:24 +02:00
2026-04-13 12:46:24 +02:00
2026-06-17 02:27:33 +02:00
2026-04-28 12:29:37 +00:00
2026-04-28 12:29:37 +00:00
2026-08-13 13:17:59 +02:00
2026-04-28 12:29:37 +00:00
2026-07-13 16:13:04 +00:00
2026-07-30 00:12:22 +00:00
2026-04-28 12:29:37 +00:00
2026-06-11 13:58:45 +00:00
2026-08-09 17:25:23 +02:00
2026-08-09 17:22:44 +02:00
2026-08-09 17:25:23 +02:00
2026-08-09 17:25:23 +02:00
2026-08-09 17:25:23 +02:00
2026-08-09 17:25:23 +02:00
2026-08-09 17:25:23 +02:00
2026-04-28 12:29:37 +00:00
2026-08-02 16:06:47 +00:00
2026-03-10 13:52:18 +01:00
2026-04-28 12:29:37 +00:00
2026-06-23 19:15:57 +02:00
2026-08-10 20:22:42 +02:00
2026-08-21 08:25:47 +00:00
2026-08-21 08:25:47 +00:00
2026-08-21 08:25:47 +00:00
2026-04-28 12:29:37 +00:00
2026-04-28 12:29:37 +00:00
2026-04-28 12:29:37 +00:00
2026-08-22 17:48:39 +00:00
2026-04-28 12:29:37 +00:00
2026-07-14 19:45:02 +00:00
2026-08-01 16:50:06 +02:00
2026-06-06 19:07:39 +00:00
2026-04-28 12:29:37 +00:00
2026-05-03 18:22:07 +02:00
2026-04-28 12:29:37 +00:00
2026-06-23 19:15:57 +02:00
2026-07-28 17:54:07 +02:00
2026-08-14 10:31:57 -03: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-04-12 22:15:51 +00:00
2026-05-17 03:47:23 +00:00
2026-07-29 04:37:36 +00:00
2026-04-28 12:29:37 +00:00
2026-05-30 13:10:07 +02:00
2026-05-30 13:10:07 +02:00
2026-07-13 00:58:16 +00:00
2026-07-11 11:10:12 -03:00
2026-06-14 22:04:42 +02:00
2026-03-10 13:52:19 +01:00
2026-07-30 06:51:57 +00:00
2026-07-30 06:51:57 +00:00
2026-07-30 06:51:57 +00:00
2026-07-30 06:51:57 +00:00
2026-08-17 14:57:07 +09:00
2026-08-05 16:04:37 +09:00
2026-08-21 14:06:57 +00:00
2026-08-17 14:57:07 +09:00
2026-08-17 14:57:07 +09:00
2026-08-02 22:11:28 +09:00
2026-08-15 18:02:17 +09:00
2026-08-17 06:48:49 +00:00
2026-08-17 06:48:49 +00:00
2026-08-05 16:04:37 +09:00
2026-08-17 14:57:07 +09:00
2026-08-15 18:34:14 +09:00
2026-08-15 18:34:14 +09:00
2026-08-17 14:57:07 +09:00
2026-08-17 14:57:07 +09:00
2026-08-17 14:57:07 +09:00
2026-08-17 14:57:07 +09:00
2026-08-05 16:04:37 +09:00
2026-05-09 11:44:39 -03:00
2026-08-12 17:21:07 +02:00
2026-04-28 12:29:37 +00:00
2026-06-23 19:15:57 +02:00
2026-06-19 04:33:18 +00:00
2026-04-28 12:29:37 +00:00
2026-05-03 02:36:54 +00:00
2026-03-13 23:22:54 +01:00
2026-03-16 10:24:33 +00:00
2026-05-03 13:22:37 +00:00