FFmpeg/libavcodec
Martin Storsjö 3c9546dfaf aarch64: vp9: Add NEON itxfm routines
This work is sponsored by, and copyright, Google.

These are ported from the ARM version; thanks to the larger
amount of registers available, we can do the 16x16 and 32x32
transforms in slices 8 pixels wide instead of 4. This gives
a speedup of around 1.4x compared to the 32 bit version.

The fact that aarch64 doesn't have the same d/q register
aliasing makes some of the macros quite a bit simpler as well.

Examples of runtimes vs the 32 bit version, on a Cortex A53:
                                       ARM  AArch64
vp9_inv_adst_adst_4x4_add_neon:       90.0     87.7
vp9_inv_adst_adst_8x8_add_neon:      400.0    354.7
vp9_inv_adst_adst_16x16_add_neon:   2526.5   1827.2
vp9_inv_dct_dct_4x4_add_neon:         74.0     72.7
vp9_inv_dct_dct_8x8_add_neon:        271.0    256.7
vp9_inv_dct_dct_16x16_add_neon:     1960.7   1372.7
vp9_inv_dct_dct_32x32_add_neon:    11988.9   8088.3
vp9_inv_wht_wht_4x4_add_neon:         63.0     57.7

The speedup vs C code (2-4x) is smaller than in the 32 bit case,
mostly because the C code ends up significantly faster (around
1.6x faster, with GCC 5.4) when built for aarch64.

Examples of runtimes vs C on a Cortex A57 (for a slightly older version
of the patch):
                                A57 gcc-5.3   neon
vp9_inv_adst_adst_4x4_add_neon:       152.2   60.0
vp9_inv_adst_adst_8x8_add_neon:       948.2  288.0
vp9_inv_adst_adst_16x16_add_neon:    4830.4 1380.5
vp9_inv_dct_dct_4x4_add_neon:         153.0   58.6
vp9_inv_dct_dct_8x8_add_neon:         789.2  180.2
vp9_inv_dct_dct_16x16_add_neon:      3639.6  917.1
vp9_inv_dct_dct_32x32_add_neon:     20462.1 4985.0
vp9_inv_wht_wht_4x4_add_neon:          91.0   49.8

The asm is around factor 3-4 faster than C on the cortex-a57 and the asm
is around 30-50% faster on the a57 compared to the a53.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-11-14 00:10:13 +02:00
..
2016-11-11 14:16:42 +02:00
2016-11-13 18:44:00 +01:00
2016-08-17 12:16:42 +02:00
2016-06-07 13:09:57 +02:00
2016-06-06 12:03:20 -04:00
2016-09-08 21:58:22 +01:00
2016-06-07 13:09:57 +02:00
2016-08-17 12:16:42 +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-11-13 18:44:01 +01:00
2016-08-17 12:22:29 +02:00
2016-06-08 18:51:56 +02:00
2016-08-17 12:16:42 +02:00
2016-10-21 10:11:20 +02:00
2016-07-18 15:27:13 +02:00
2016-08-17 12:16:42 +02:00
2016-06-28 14:17:43 +03:00
2016-06-28 14:17:43 +03:00
2016-11-13 18:44:01 +01:00
2016-11-13 18:44:01 +01:00
2016-07-23 08:27:29 +02:00
2016-11-07 22:42:00 +01:00
2016-06-20 15:45:51 -04:00
2016-10-02 19:35:12 +02:00
2016-06-07 13:09:57 +02:00
2016-10-09 20:58:10 +02:00
2016-06-08 18:51:57 +02:00
2016-06-12 20:27:53 +02:00
2016-07-22 19:08:13 +02:00
2016-06-29 15:25:42 -04:00
2016-06-29 15:25:42 -04:00
2016-10-02 15:42:03 -04:00
2016-09-28 10:01:52 +02:00
2016-10-12 21:33:34 +02:00
2016-11-13 18:44:01 +01:00
2016-09-08 21:58:22 +01:00
2016-09-08 21:58:22 +01:00
2016-08-11 10:54:44 +02:00
2016-08-17 12:16:42 +02:00
2016-06-07 13:09:57 +02:00