Martin Storsjö
383d96aa22
aarch64: vp9: Add NEON optimizations of VP9 MC functions
...
This work is sponsored by, and copyright, Google.
These are ported from the ARM version; it is essentially a 1:1
port with no extra added features, but with some hand tuning
(especially for the plain copy/avg functions). The ARM version
isn't very register starved to begin with, so there's not much
to be gained from having more spare registers here - we only
avoid having to clobber callee-saved registers.
Examples of runtimes vs the 32 bit version, on a Cortex A53:
ARM AArch64
vp9_avg4_neon: 27.2 23.7
vp9_avg8_neon: 56.5 54.7
vp9_avg16_neon: 169.9 167.4
vp9_avg32_neon: 585.8 585.2
vp9_avg64_neon: 2460.3 2294.7
vp9_avg_8tap_smooth_4h_neon: 132.7 125.2
vp9_avg_8tap_smooth_4hv_neon: 478.8 442.0
vp9_avg_8tap_smooth_4v_neon: 126.0 93.7
vp9_avg_8tap_smooth_8h_neon: 241.7 234.2
vp9_avg_8tap_smooth_8hv_neon: 690.9 646.5
vp9_avg_8tap_smooth_8v_neon: 245.0 205.5
vp9_avg_8tap_smooth_64h_neon: 11273.2 11280.1
vp9_avg_8tap_smooth_64hv_neon: 22980.6 22184.1
vp9_avg_8tap_smooth_64v_neon: 11549.7 10781.1
vp9_put4_neon: 18.0 17.2
vp9_put8_neon: 40.2 37.7
vp9_put16_neon: 97.4 99.5
vp9_put32_neon/armv8: 346.0 307.4
vp9_put64_neon/armv8: 1319.0 1107.5
vp9_put_8tap_smooth_4h_neon: 126.7 118.2
vp9_put_8tap_smooth_4hv_neon: 465.7 434.0
vp9_put_8tap_smooth_4v_neon: 113.0 86.5
vp9_put_8tap_smooth_8h_neon: 229.7 221.6
vp9_put_8tap_smooth_8hv_neon: 658.9 621.3
vp9_put_8tap_smooth_8v_neon: 215.0 187.5
vp9_put_8tap_smooth_64h_neon: 10636.7 10627.8
vp9_put_8tap_smooth_64hv_neon: 21076.8 21026.9
vp9_put_8tap_smooth_64v_neon: 9635.0 9632.4
These are generally about as fast as the corresponding ARM
routines on the same CPU (at least on the A53), in most cases
marginally faster.
The speedup vs C code is pretty much the same as for the 32 bit
case; on the A53 it's around 6-13x for ther larger 8tap filters.
The exact speedup varies a little, since the C versions generally
don't end up exactly as slow/fast as on 32 bit.
Signed-off-by: Martin Storsjö <martin@martin.st >
2016-11-10 11:15:56 +02:00
..
2016-11-10 11:15:56 +02:00
2016-11-04 21:37:53 +02:00
2016-10-18 00:10:36 +02:00
2016-09-29 14:48:03 +02:00
2016-11-08 17:21:02 +01:00
2016-05-13 14:55:56 +02:00
2016-11-08 17:54:34 +01:00
2016-08-17 12:16:42 +02:00
2016-11-02 10:33:36 +01:00
2016-05-04 18:16:21 +02:00
2016-06-07 13:09:57 +02:00
2016-10-01 00:46:25 +02:00
2016-10-01 00:45:55 +02:00
2016-10-01 00:46:25 +02:00
2016-10-01 00:46:25 +02:00
2016-09-22 09:47:52 +02:00
2016-05-27 15:49:48 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-06-06 12:03:20 -04:00
2016-11-08 17:54:34 +01:00
2016-09-08 21:58:22 +01:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-09-22 09:47:52 +02:00
2016-09-22 09:47:52 +02:00
2016-10-12 11:06:58 -04:00
2016-06-13 13:31:21 -04:00
2016-06-07 13:09:57 +02:00
2016-06-07 13:09:57 +02:00
2016-11-02 10:33:39 +01:00
2016-10-16 20:27:16 +02:00
2016-10-28 13:24:44 +02:00
2016-09-29 14:48:03 +02:00
2016-09-29 14:48:03 +02:00
2016-11-08 17:54:34 +01:00
2016-11-03 20:17:12 +01:00
2016-05-04 18:16:21 +02:00
2016-05-04 15:14:14 +02:00
2016-08-26 11:48:15 +02:00
2016-08-26 11:48:15 +02:00
2016-08-26 11:48:15 +02:00
2016-08-26 11:48:15 +02:00
2016-08-26 11:48:15 +02:00
2016-05-04 18:16:21 +02:00
2016-08-24 14:45:08 +02:00
2016-09-22 09:47:52 +02:00
2016-05-04 18:16:21 +02:00
2016-09-04 12:19:47 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-09-29 14:48:03 +02:00
2016-04-26 16:30:18 -04:00
2016-05-25 16:37:43 +02:00
2016-05-04 18:16:21 +02:00
2016-10-28 13:24:44 +02:00
2016-10-27 12:21:46 +02:00
2016-11-03 17:43:55 +01:00
2016-05-04 18:16:21 +02:00
2016-06-07 13:09:57 +02:00
2016-09-29 14:48:03 +02:00
2016-06-08 18:51:56 +02:00
2016-08-17 12:16:42 +02:00
2016-10-28 13:24:44 +02:00
2016-10-28 13:24:44 +02:00
2016-09-14 14:12:36 +02:00
2016-10-28 13:24:55 +02:00
2016-10-28 13:24:44 +02:00
2016-06-21 22:09:35 +03:00
2016-10-16 20:26:40 +02:00
2016-10-05 18:37:27 +02:00
2016-11-07 10:05:12 +01:00
2016-09-29 17:54:23 +02:00
2016-09-29 17:54:23 +02:00
2016-09-29 17:54:23 +02:00
2016-09-29 17:54:23 +02:00
2016-09-29 17:54:23 +02:00
2016-09-29 17:54:23 +02:00
2016-09-29 17:54:23 +02:00
2016-05-04 18:16:21 +02:00
2016-09-07 11:30:17 +02:00
2016-09-07 11:30:17 +02:00
2016-06-07 13:09:57 +02:00
2016-06-07 13:09:57 +02:00
2016-05-04 18:16:21 +02:00
2016-10-16 20:27:16 +02:00
2016-08-17 12:16:42 +02:00
2016-09-29 14:48:03 +02:00
2016-09-29 14:48:03 +02:00
2016-05-04 18:16:21 +02:00
2016-06-08 18:51:57 +02:00
2016-08-17 12:16:42 +02:00
2016-08-17 12:16:42 +02:00
2016-06-07 13:09:57 +02:00
2016-10-29 18:32:21 +02:00
2016-05-04 18:16:21 +02:00
2016-11-08 17:54:34 +01:00
2016-11-08 17:54:34 +01:00
2016-06-07 13:09:57 +02:00
2016-11-08 17:54:34 +01:00
2016-05-04 18:16:21 +02:00
2016-05-22 20:22:43 +02:00
2016-08-17 12:22:29 +02:00
2016-06-07 13:22:22 +02:00
2016-06-07 13:22:22 +02:00
2016-06-07 13:22:22 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-06-08 18:51:56 +02:00
2016-11-03 17:43:55 +01:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-06-21 11:17:53 +02:00
2016-06-21 11:11:26 +02:00
2016-08-11 10:52:54 +02:00
2016-10-27 12:21:46 +02:00
2016-04-24 10:06:25 +02:00
2016-06-21 11:13:29 +02:00
2016-06-21 11:11:26 +02:00
2016-04-24 10:06:23 +02:00
2016-06-21 11:11:26 +02:00
2016-06-21 11:17:28 +02:00
2016-06-21 11:13:29 +02:00
2016-06-21 11:17:28 +02:00
2016-06-21 11:11:26 +02:00
2016-11-08 17:54:34 +01:00
2016-07-11 16:29:57 +02:00
2016-08-17 12:16:42 +02:00
2016-06-21 11:15:44 +02:00
2016-04-24 10:06:24 +02:00
2016-07-15 15:33:54 +02:00
2016-06-21 11:17:28 +02:00
2016-05-04 18:16:21 +02:00
2016-09-29 14:48:04 +02:00
2016-09-29 14:48:04 +02:00
2016-06-21 11:11:26 +02:00
2016-06-21 11:11:26 +02:00
2016-10-02 11:41:45 +02:00
2016-07-15 15:33:54 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-06-21 11:11:26 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-07-13 18:18:46 -04:00
2016-05-04 18:16:21 +02:00
2016-10-28 11:22:22 +02:00
2016-10-21 10:11:20 +02:00
2016-10-16 20:26:40 +02:00
2016-10-16 20:26:40 +02:00
2016-10-16 20:26:17 +02:00
2016-10-16 20:26:28 +02:00
2016-10-21 10:11:20 +02:00
2016-10-16 20:26:28 +02:00
2016-11-08 17:54:34 +01:00
2016-11-08 17:54:34 +01:00
2016-10-16 20:26:47 +02:00
2016-10-21 10:11:20 +02:00
2016-11-03 20:17:12 +01:00
2016-10-21 10:11:20 +02:00
2016-11-08 11:22:29 -05:00
2016-10-21 10:11:20 +02:00
2016-10-16 20:26:17 +02:00
2016-07-18 15:27:13 +02:00
2016-10-22 17:33:35 +02:00
2016-10-16 20:26:17 +02:00
2016-10-16 20:26:17 +02:00
2016-07-25 19:38:18 +02:00
2016-06-07 13:09:57 +02:00
2016-06-07 13:09:57 +02:00
2016-05-17 10:29:27 +02:00
2016-05-17 10:29:27 +02:00
2016-10-02 17:13:36 +02:00
2016-05-04 18:16:21 +02:00
2016-09-29 14:48:03 +02:00
2016-11-02 10:33:39 +01:00
2016-05-04 15:14:14 +02:00
2016-09-07 11:30:18 +02:00
2016-09-07 11:30:18 +02:00
2016-05-04 18:16:21 +02:00
2016-06-07 13:09:57 +02:00
2016-06-07 13:09:57 +02:00
2016-11-03 20:17:12 +01:00
2016-05-04 18:16:21 +02:00
2016-06-07 13:09:57 +02:00
2016-05-04 18:16:21 +02:00
2016-06-07 13:09:57 +02:00
2016-11-03 15:50:48 +01:00
2016-09-29 14:48:03 +02:00
2016-09-29 14:48:03 +02:00
2016-05-04 18:16:21 +02:00
2016-06-08 18:51:56 +02:00
2016-09-04 11:57:15 +02:00
2016-09-04 11:57:15 +02:00
2016-09-04 11:57:15 +02:00
2016-09-04 11:57:15 +02:00
2016-08-17 12:16:42 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-09-29 14:48:03 +02:00
2016-05-04 18:16:21 +02:00
2016-05-29 16:43:11 +02:00
2016-05-04 18:16:21 +02:00
2016-06-28 14:17:43 +03:00
2016-06-28 14:17:43 +03:00
2016-07-15 13:36:21 +03:00
2016-07-15 13:36:23 +03:00
2016-11-08 17:54:34 +01:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-11-08 17:54:34 +01:00
2016-06-21 19:54:42 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-08-26 13:25:59 +02:00
2016-07-23 08:27:29 +02:00
2016-04-21 12:25:42 -04:00
2016-11-07 10:16:10 +02:00
2016-05-04 18:16:21 +02:00
2016-07-20 18:59:36 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-11-07 22:42:00 +01:00
2016-06-20 15:45:51 -04:00
2016-10-16 20:27:16 +02:00
2016-08-17 12:16:42 +02:00
2016-05-05 10:48:34 +02:00
2016-06-07 13:09:57 +02:00
2016-07-29 15:59:48 +02:00
2016-11-08 17:54:34 +01:00
2016-05-04 18:16:21 +02:00
2016-05-03 15:45:10 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-10-02 19:35:12 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-06-07 13:09:57 +02:00
2016-06-07 13:09:57 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-16 10:51:17 +02:00
2016-08-17 12:16:42 +02:00
2016-05-04 18:16:21 +02:00
2016-06-29 12:31:03 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-06-29 12:31:03 +02:00
2016-06-07 13:09:57 +02:00
2016-10-27 12:21:46 +02:00
2016-05-04 18:16:21 +02:00
2016-09-29 17:54:24 +02:00
2016-09-29 17:54:24 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-09-28 10:01:52 +02:00
2016-09-16 16:28:07 +02:00
2016-05-04 18:16:21 +02:00
2016-07-31 08:19:27 +02:00
2016-05-04 18:16:21 +02:00
2016-08-17 12:16:42 +02:00
2016-05-04 18:16:21 +02:00
2016-06-07 13:09:57 +02:00
2016-05-04 18:16:21 +02:00
2016-06-07 13:09:57 +02:00
2016-08-17 12:16:42 +02:00
2016-08-17 12:16:42 +02:00
2016-05-04 18:16:21 +02:00
2016-09-29 17:54:24 +02:00
2016-09-29 17:54:24 +02:00
2016-09-29 17:54:24 +02:00
2016-09-29 17:54:24 +02:00
2016-09-29 17:54:24 +02:00
2016-09-29 17:54:24 +02:00
2016-09-29 17:54:24 +02:00
2016-09-29 17:54:24 +02:00
2016-09-29 17:54:24 +02:00
2016-05-04 18:16:21 +02:00
2016-06-07 13:09:57 +02:00
2016-06-07 13:09:57 +02:00
2016-05-04 18:16:21 +02:00
2016-09-24 19:03:10 +02:00
2016-09-24 19:03:10 +02:00
2016-10-09 20:58:10 +02:00
2016-09-24 19:03:10 +02:00
2016-06-24 22:30:54 +03:00
2016-06-08 18:51:57 +02:00
2016-11-08 11:22:29 -05:00
2016-07-22 19:08:13 +02:00
2016-11-08 17:54:34 +01:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-08-18 17:06:46 +02:00
2016-05-11 12:21:25 +02:00
2016-09-14 14:12:36 +02:00
2016-09-14 14:12:36 +02:00
2016-11-03 17:43:55 +01:00
2016-05-04 18:16:21 +02:00
2016-08-17 12:16:42 +02:00
2016-06-12 20:27:53 +02:00
2016-08-26 11:50:21 +02:00
2016-08-26 11:50:21 +02:00
2016-08-26 11:50:21 +02:00
2016-11-10 09:00:11 +01:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-07-31 08:19:27 +02:00
2016-08-18 17:06:46 +02:00
2016-11-07 12:48:00 +01:00
2016-11-07 12:48:00 +01:00
2016-07-03 09:13:29 +02:00
2016-06-21 19:53:38 +02:00
2016-11-07 12:48:00 +01:00
2016-07-03 09:13:29 +02:00
2016-07-22 19:08:13 +02:00
2016-10-16 20:26:28 +02:00
2016-11-07 12:48:00 +01:00
2016-06-21 19:53:38 +02:00
2016-05-04 18:16:21 +02:00
2016-05-11 12:22:49 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-06-07 13:09:57 +02:00
2016-05-04 18:16:21 +02:00
2016-08-17 12:16:42 +02:00
2016-07-20 19:03:31 +02:00
2016-07-20 18:59:36 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-17 10:29:27 +02:00
2016-05-17 10:29:27 +02:00
2016-06-29 15:25:42 -04:00
2016-06-29 15:25:42 -04:00
2016-10-29 18:32:21 +02:00
2016-08-17 12:16:42 +02:00
2016-05-04 18:16:21 +02:00
2016-10-02 15:42:03 -04:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-25 16:37:43 +02:00
2016-05-04 18:16:21 +02:00
2016-05-25 16:37:43 +02:00
2016-05-04 18:16:21 +02:00
2016-05-25 16:37:43 +02:00
2016-09-29 14:48:04 +02:00
2016-11-03 20:17:12 +01:00
2016-08-03 08:26:40 +02:00
2016-05-04 18:16:21 +02:00
2016-06-06 12:05:02 -04:00
2016-11-08 17:54:34 +01:00
2016-09-29 14:48:03 +02:00
2016-09-29 14:48:03 +02:00
2016-09-29 14:48:03 +02:00
2016-06-07 13:09:57 +02:00
2016-06-07 13:09:57 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-10-28 13:28:36 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-09-04 11:57:15 +02:00
2016-05-04 18:16:21 +02:00
2016-06-07 13:09:57 +02:00
2016-11-03 15:52:12 +01:00
2016-06-07 13:09:57 +02:00
2016-06-07 13:09:57 +02:00
2016-06-07 13:09:57 +02:00
2016-11-08 17:54:34 +01:00
2016-06-29 15:25:42 -04:00
2016-09-28 10:01:52 +02:00
2016-05-04 18:16:21 +02:00
2016-05-05 10:48:34 +02:00
2016-06-07 13:09:57 +02:00
2016-06-29 15:25:42 -04:00
2016-06-21 09:38:56 -04:00
2016-06-07 13:09:57 +02:00
2016-06-07 13:09:57 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-11-08 17:54:34 +01:00
2016-10-12 21:33:34 +02:00
2016-09-08 13:51:30 +02:00
2016-09-08 13:51:30 +02:00
2016-09-08 13:51:30 +02:00
2016-10-24 20:17:47 +01:00
2016-08-30 22:16:01 +01:00
2016-10-02 20:23:18 +01:00
2016-10-21 10:11:20 +02:00
2016-09-28 22:54:11 +01:00
2016-10-17 21:07:25 +01:00
2016-10-17 21:07:25 +01:00
2016-10-24 20:17:47 +01:00
2016-08-30 21:45:59 +01:00
2016-08-30 21:45:59 +01:00
2016-08-30 21:45:59 +01:00
2016-09-09 18:56:18 +01:00
2016-08-30 22:16:01 +01:00
2016-06-07 13:09:57 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-06-07 13:09:57 +02:00
2016-08-18 17:06:46 +02:00
2016-09-29 14:48:04 +02:00
2016-09-29 14:48:03 +02:00
2016-06-21 11:11:26 +02:00
2016-06-21 11:13:29 +02:00
2016-10-16 20:26:40 +02:00
2016-06-21 11:11:26 +02:00
2016-05-04 18:16:21 +02:00
2016-11-08 11:22:29 -05:00
2016-05-17 10:29:27 +02:00
2016-08-18 17:06:46 +02:00
2016-06-07 13:09:57 +02:00
2016-06-07 13:09:57 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-08-26 11:36:26 +02:00
2016-08-26 11:36:26 +02:00
2016-11-08 17:54:34 +01:00
2016-08-26 11:50:22 +02:00
2016-08-26 11:36:26 +02:00
2016-09-08 21:58:22 +01:00
2016-09-08 21:58:22 +01:00
2016-07-10 14:52:16 +03:00
2016-10-04 10:54:07 +02:00
2016-11-10 11:15:56 +02:00
2016-11-10 11:15:56 +02:00
2016-11-10 11:15:56 +02:00
2016-08-11 10:54:44 +02:00
2016-08-26 11:50:22 +02:00
2016-08-26 11:50:22 +02:00
2016-08-26 11:50:22 +02:00
2016-08-26 11:50:22 +02:00
2016-05-04 18:16:21 +02:00
2016-06-07 13:09:57 +02:00
2016-06-07 13:09:57 +02:00
2016-08-17 12:16:42 +02:00
2016-05-04 18:16:21 +02:00
2016-08-17 12:16:42 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-08-30 22:06:47 +02:00
2016-09-29 14:48:03 +02:00
2016-09-29 14:48:03 +02:00
2016-05-04 18:16:21 +02:00
2016-06-07 13:09:57 +02:00
2016-05-11 12:21:25 +02:00
2016-09-29 14:48:03 +02:00
2016-11-08 17:54:34 +01:00
2016-06-07 13:09:57 +02:00
2016-05-04 15:14:14 +02:00
2016-05-04 18:16:21 +02:00