[AArch64] Use full vectors in ARGB1555To{Y,UV}Row_NEON

The existing RGB555TOARGB macro only makes use of 64 bit wide vectors
rather than the full 128 bits available, so unroll it to allow us to
process more data per instruction.

For ARGB1555ToUVRow_NEON we already have enough data available each
iteration to make use of full vectors, but for ARGB1555ToYRow_NEON we
also need to adjust the "any" kernel to allow us to process 16 elements
per iteration.

Reduction in runtimes observed compared to the existing Neon kernels:

            | ARGB1555ToUVRow | ARGB1555ToYRow
 Cortex-A55 |          -28.8% |         -35.3%
Cortex-A510 |          -34.0% |         -48.5%
 Cortex-A76 |          -36.7% |         -25.1%
Cortex-A720 |          -29.7% |         -31.1%
  Cortex-X1 |          -31.6% |         -19.7%
  Cortex-X2 |          -27.6% |         -22.7%

Bug: libyuv:976
Change-Id: Idd745c133b5fb65001652a59f01ac1aa3bb42067
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/5631540
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: Justin Green <greenjustin@google.com>
2 files changed
tree: 3613d8b5c315791ff203e58b92b6b7a26624ae2f
  1. build_overrides/
  2. docs/
  3. include/
  4. infra/
  5. riscv_script/
  6. source/
  7. tools_libyuv/
  8. unit_test/
  9. util/
  10. .clang-format
  11. .gitignore
  12. .gn
  13. .vpython
  14. .vpython3
  15. Android.bp
  16. Android.mk
  17. AUTHORS
  18. BUILD.gn
  19. CM_linux_packages.cmake
  20. CMakeLists.txt
  21. codereview.settings
  22. DEPS
  23. DIR_METADATA
  24. download_vs_toolchain.py
  25. libyuv.gni
  26. libyuv.gyp
  27. libyuv.gypi
  28. LICENSE
  29. linux.mk
  30. OWNERS
  31. PATENTS
  32. PRESUBMIT.py
  33. public.mk
  34. pylintrc
  35. README.chromium
  36. README.md
  37. winarm.mk
README.md

libyuv is an open source project that includes YUV scaling and conversion functionality.

  • Scale YUV to prepare content for compression, with point, bilinear or box filter.
  • Convert to YUV from webcam formats for compression.
  • Convert to RGB formats for rendering/effects.
  • Rotate by 90/180/270 degrees to adjust for mobile devices in portrait mode.
  • Optimized for SSSE3/AVX2 on x86/x64.
  • Optimized for Neon on Arm.
  • Optimized for MSA on Mips.
  • Optimized for RVV on RISC-V.

Development

See Getting started for instructions on how to get started developing.

You can also browse the docs directory for more documentation.