Merge pull request #19486 from fpetrogalli:dotprod_fast-3.4
authorFrancesco Petrogalli <25690309+fpetrogalli@users.noreply.github.com>
Thu, 11 Feb 2021 13:24:09 +0000 (13:24 +0000)
committerGitHub <noreply@github.com>
Thu, 11 Feb 2021 13:24:09 +0000 (13:24 +0000)
commit6ee23c9b85e33e0c9af417467e39a8165ef9c89e
treeb466bffb171959ded3e7e134b2777babe9812cb2
parentcac5b0fe5a3e06718a6cb408d6468ff87428ef2a
Merge pull request #19486 from fpetrogalli:dotprod_fast-3.4

* [hal][neon] Optimize the v_dotprod_fast intrinsics for aarch64.

On Armv8 in AArch64 execution mode, we can skip the sequence

   v<op>_<ty>(vget_high_<ty>(x), vget_high_<ty>(y))

in favour of

   v<op>_high_<ty>(x, y)

This has better changes for recent compilers to use less data movement
operations and better register allocation. See for example:

   https://godbolt.org/z/bPq7vd

* [hal][neon] Fix build failure on armv7.

* [hal][neon] Address review comments in PR.

PR: https://github.com/opencv/opencv/pull/19486

* [hal][neon] Define macro to check for the AArch64 execution state of Armv8.

* [hal][neon] Fix macro definition for AArch64.

The fix is needed to prevent warnings when building for Armv7.
modules/core/include/opencv2/core/hal/intrin_neon.hpp