1
0
mirror of https://git.ffmpeg.org/ffmpeg.git synced 2026-11-08 11:07:56 +03:00
Files
ffmpeg/libavcodec
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-02-18 15:35:30 +01:00
2015-07-27 15:24:58 +01:00
…
…
…
2016-03-23 09:25:30 +01: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-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
2015-07-20 15:06:50 +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-02-18 15:35:30 +01:00
2015-07-27 15:24:58 +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
2014-12-18 23:27:14 +01:00
…
2014-09-02 03:45:21 -07:00
2014-09-02 03:45:21 -07:00
2016-05-04 18:16:21 +02:00
2016-01-11 21:51:11 +01:00
…
…
2015-07-27 15:24:58 +01:00
…
…
2015-07-27 15:24:58 +01:00
2015-07-27 15:24:58 +01:00
2014-11-14 20:25:02 +01:00
…
…
…
2015-07-20 15:06:50 +01:00
2016-03-20 08:15:01 +01:00
2016-05-04 18:16:21 +02:00
2015-07-27 15:24:58 +01:00
2015-10-08 21:55:31 +02:00
2015-11-30 10:58:46 -05:00
2015-11-30 10:58:46 -05:00
2016-05-04 18:16:21 +02:00
2015-07-20 15:06:50 +01:00
2015-07-27 15:24:58 +01:00
…
2016-05-04 18:16:21 +02:00
2015-07-27 15:24:58 +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
2014-09-16 04:42:32 -07:00
2015-12-23 11:50:08 +01:00
2015-09-12 13:39:37 +02:00
2015-05-31 15:03:30 +02:00
…
…
2016-04-26 16:30:18 -04:00
2015-07-27 15:24:58 +01:00
2014-09-09 01:39:47 -07:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2014-12-18 23:22:59 +01:00
2015-07-27 15:24:58 +01:00
2014-09-09 05:30:28 -07:00
2014-09-09 05:30:28 -07:00
2016-06-07 13:09:57 +02:00
2014-09-09 05:30:28 -07:00
…
2015-07-27 15:24:58 +01:00
…
…
2016-05-04 18:16:21 +02:00
2015-07-01 01:08:15 +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-03-01 10:18:28 +01: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
2015-07-27 15:24:58 +01:00
…
…
2015-11-02 16:29:46 +01:00
2015-07-20 15:06:50 +01:00
2014-09-02 04:03:45 -07:00
2016-05-04 18:16:21 +02:00
2015-07-27 15:24:58 +01:00
2015-11-30 10:58:46 -05:00
2015-12-05 12:12:26 +01:00
2016-05-04 18:16:21 +02:00
…
2016-08-17 12:22:29 +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-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-17 12:16: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-05-04 18:16:21 +02:00
2015-07-27 16:21:14 +01:00
2015-07-27 16:00:22 +01:00
2015-07-27 16:00:22 +01:00
2016-10-21 10:11:20 +02:00
2016-07-18 15:27:13 +02:00
…
2015-04-19 22:37:23 +01:00
2015-04-19 22:37:23 +01:00
2015-04-19 22:36:48 +01:00
2015-03-17 13:34:23 +00: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-03-29 13:41:09 +02:00
2016-03-22 17:12:20 -04: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
2015-07-27 15:24:58 +01:00
…
…
2015-07-27 15:24:58 +01:00
2016-05-04 18:16:21 +02:00
…
2014-07-18 17:27:54 +02:00
2016-06-28 14:17:43 +03:00
2016-06-28 14:17:43 +03: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
2015-07-09 21:36:19 +02:00
2016-07-23 08:27:29 +02:00
2016-05-04 18:16:21 +02:00
2015-07-27 15:24:58 +01:00
2014-11-14 20:25:52 +01:00
2014-11-25 02:00:06 +00: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
2015-09-02 21:56:22 +02:00
…
…
…
2015-07-27 15:24:58 +01:00
2016-06-20 15:45:51 -04:00
2016-05-05 10:48:34 +02: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
2015-07-27 15:24:58 +01:00
2015-07-27 15:24:58 +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-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2015-09-30 16:44:33 +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
2015-07-27 15:24:58 +01:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-10-09 20:58:10 +02:00
2016-06-08 18:51:57 +02:00
2015-07-27 15:24:58 +01:00
2016-05-04 18:16:21 +02:00
…
2016-05-04 18:16:21 +02:00
2015-07-27 15:24:58 +01:00
2015-07-20 15:06:50 +01:00
2016-05-11 12:21:25 +02:00
…
…
…
2016-05-04 18:16:21 +02:00
…
…
…
2016-06-12 20:27:53 +02:00
2015-05-31 15:03:31 +02:00
2015-07-27 15:24:58 +01:00
2016-05-04 18:16:21 +02:00
2015-07-27 15:24:58 +01:00
2016-07-22 19:08:13 +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-05-04 18:16:21 +02:00
2015-07-27 15:24:58 +01:00
2016-01-21 15:33:19 -05:00
…
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
2016-06-29 15:25:42 -04:00
2016-06-29 15:25:42 -04: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
2015-06-12 12:29:46 +01:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
…
…
…
2015-07-27 15:24:58 +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
…
2015-07-27 15:24:58 +01:00
…
2016-09-28 10:01:52 +02:00
2016-05-04 18:16:21 +02:00
2015-06-22 15:23:08 +01:00
…
2015-07-27 15:24:58 +01:00
…
…
2016-02-18 15:35:30 +01:00
2015-07-27 15:24:58 +01:00
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
…
2015-07-27 15:24:58 +01:00
…
2016-10-12 21:33:34 +02:00
2016-02-01 13:40:07 +01:00
2016-02-01 13:40:07 +01:00
2015-07-27 15:24:58 +01:00
2015-07-20 15:06:50 +01:00
2016-03-30 09:10:26 +02:00
2016-03-30 09:10:26 +02:00
2015-07-27 15:24:58 +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
…
2015-07-27 15:24:58 +01:00
2016-06-21 11:11:26 +02:00
2016-05-04 18:16:21 +02:00
2015-07-27 15:24:58 +01:00
…
2016-05-04 18:16:21 +02:00
2016-05-04 18:16:21 +02:00
…
…
2016-09-08 21:58:22 +01:00
2016-09-08 21:58:22 +01:00
2016-03-25 15:23:56 +01:00
…
…
…
2016-08-11 10:54:44 +02:00
…
…
2016-05-04 18:16:21 +02:00
2014-09-03 03:09:08 -07: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-03-29 13:41:09 +02:00
2016-05-04 18:16:21 +02:00
2015-07-20 15:06:50 +01:00
…
…
2015-07-27 15:24:58 +01:00
2016-05-11 12:21:25 +02:00
2014-09-02 14:41:13 -07:00
…
…
2015-07-20 15:06:50 +01:00
2016-06-07 13:09:57 +02:00
2016-05-04 18:16:21 +02:00
2015-07-20 15:06:50 +01:00