Implement d117_predictor using Neon
authorGeorge Steed <george.steed@arm.com>
Tue, 7 Feb 2023 12:16:00 +0000 (12:16 +0000)
committerGeorge Steed <george.steed@arm.com>
Tue, 28 Feb 2023 11:33:21 +0000 (11:33 +0000)
commit360e9069b6cc1dd3a004728b876fb923413f4b11
tree3b594cc6f60aaf095ff4d56152b857b1179dea64
parenta7ab16aed1d75869c5fd096374a91698b419c1a7
Implement d117_predictor using Neon

Add Neon implementations of the d117 predictor for 4x4, 8x8, 16x16 and
32x32 block sizes. Also update tests to add new corresponding cases.

An explanation of the general implementation strategy is given in the
8x8 implementation body.

Speedups over the C code (higher is better):

Microarch.  | Compiler | Block | Speedup
Neoverse N1 |  LLVM 15 |   4x4 |    1.73
Neoverse N1 |  LLVM 15 |   8x8 |    5.24
Neoverse N1 |  LLVM 15 | 16x16 |    9.77
Neoverse N1 |  LLVM 15 | 32x32 |   14.13
Neoverse N1 |   GCC 12 |   4x4 |    2.04
Neoverse N1 |   GCC 12 |   8x8 |    4.70
Neoverse N1 |   GCC 12 | 16x16 |    8.64
Neoverse N1 |   GCC 12 | 32x32 |    4.57
Neoverse V1 |  LLVM 15 |   4x4 |    1.75
Neoverse V1 |  LLVM 15 |   8x8 |    6.79
Neoverse V1 |  LLVM 15 | 16x16 |    9.16
Neoverse V1 |  LLVM 15 | 32x32 |   14.47
Neoverse V1 |   GCC 12 |   4x4 |    1.75
Neoverse V1 |   GCC 12 |   8x8 |    6.00
Neoverse V1 |   GCC 12 | 16x16 |    7.63
Neoverse V1 |   GCC 12 | 32x32 |    4.32

Change-Id: I7228327b5be27ee7a68deecafa05be0bd2a40ff4
test/test_intra_pred_speed.cc
test/vp9_intrapred_test.cc
vpx_dsp/arm/intrapred_neon.c
vpx_dsp/vpx_dsp_rtcd_defs.pl