Frank Barchard 8d440c181c [libyuv] Upgrade x86 SIMD to AVX2/AVX-512 with 32-bit & row_win parity
Upgrade all remaining SSE2 and SSSE3 max-ISA kernels across row, scale,
rotate, and compare to AVX2 while removing superseded pre-AVX2 versions.
Implement AVX2 for ARGBDetectRow, HalfRow, HalfRow_16,
HalfWidthRow_16To8_Odd, AYUVTo{Y,UV,VU}Row, AR30To{ARGB,ABGR,AB30}Row,
and TransposeWx8_16, and port all remaining Arm NEON (or higher) kernels
to AVX2 (TransposeWxH_32, ScaleRowDown2*_16, ScaleUVRowDown2*,
ScaleUVRowDownEven, ScaleColsUp2, GaussCol*, Scale*Samples, and
UnpackMT2T).

Port 32-bit x86 (-m32 -fPIC) inline assembly across row_gcc.cc,
rotate_gcc.cc, and compare_gcc.cc (including 5-GPR PIC support for
I422ToAR30Row and I444/I422/I210/I410AlphaToARGBRow) so x86_32 matches
x64 SIMD coverage across all 187 supported row/rotate/compare kernels.
Handle 1..7 remainder elements directly in inline assembly without
calling *_C in ARGBDetectRow_AVX2, ARGBSepiaRow_AVX2,
ARGBColorMatrixRow_AVX2, ARGBQuantizeRow_AVX2, ARGBShadeRow_AVX2,
ARGBAffineRow_AVX2, GaussRow*_AVX2, GaussCol*_AVX2, and
*ColorTableRow_AVX2. Fix unsigned 16-bit packing in
ScaleRowUp2_{Linear,Bilinear}_16_SSE2.

Add 64-bit AVX-512 (AVX512BW, AVX512VBMI, and AVX512VNNI, including
SumSquareError_AVX512VNNI) implementations in *_gcc.cc and *_win.cc
wherever Arm64 exceeds NEON, and handle arbitrary tail widths via
opmasks in Mirror*_AVX512BW without _Any_ wrappers. Bring row_win.cc,
scale_win.cc, rotate_win.cc, and compare_win.cc C++ intrinsics (and
64-bit VISUALC_HAS_AVX2) to 100% parity with *_gcc.cc for MSVC and
MemorySanitizer.

Wire YUY2ToUVRow_HVX and UYVYToUVRow_HVX in YUY2ToI420 and UYVYToI420,
implement all 13 missing ScaleUV*_16_C kernels so UVScale_16 supports
downscaling and general upscaling, make Ssim8x8, TransposeWxH,
TransposeUVWxH, and TransposeWxH_16 static internal helpers, clean up
HAS_* guards, enable direct row unittests so all 279 *_C functions have
active test coverage, and add Intel AMX-TF32 (kCpuHasAMXTF32, CPUID
leaf 7 subleaf 1 EAX bit 4, LIBYUV_DISABLE_AMXTF32) detection.

Mark 16-bit RGB formats (RGB565, ARGB1555, and ARGB4444) and legacy
fixed-matrix 16-bit RGB-to-YUV row functions as deprecated in headers
and GEMINI.md, using two-step ARGB wrapper row functions in
row_common.cc.

AMD Zen 6 Benchmark (1280 width, 10000 iterations):
----------------------------------------------------------------
Function                  Before (ms)  After (ms)    Improvement
----------------------------------------------------------------
ARGB1555ToARGBRow                0.83        0.49          1.69x
ARGB1555ToUVRow                 16.00        3.21          4.99x
ARGB1555ToYRow                   7.82        1.38          5.66x
ARGB4444ToUVRow                 15.04        2.58          5.83x
ARGB4444ToYRow                   7.42        1.07          6.94x
ARGBAffineRow                    3.51        2.75          1.28x
ARGBColorMatrixRow               4.09        1.13          3.63x
ARGBColorTableRow               11.21        8.93          1.26x
ARGBLumaColorTableRow           10.01       10.21          0.98x
ARGBQuantizeRow                  2.23        1.21          1.84x
ARGBSepiaRow                     3.29        0.81          4.04x
ARGBSetRow                       0.21        0.21          1.02x
ARGBShadeRow                     1.66        0.87          1.91x
ARGBToRGB565DitherRow            1.22        0.50          2.43x
ARGBToRGB565Row                  1.09        0.44          2.47x
ByteToFloatRow                   0.88        0.41          2.14x
Convert8To8Row                   0.21        0.11          1.88x
CopyRow_16                       0.11        0.11          0.97x
DetileRow                        0.21        0.12          1.75x
DetileRow_16                     0.23        0.14          1.67x
DetileSplitUVRow                 0.29        0.21          1.38x
DivideRow_16                     0.14        0.11          1.30x
GaussRow                         3.29        1.27          2.59x
GaussRow_F32                     1.93        0.89          2.17x
HalfFloatRow                     1.16        0.74          1.57x
I210AlphaToARGBRow               1.83        0.92          2.00x
I210ToAR30Row                    2.21        0.96          2.30x
I210ToARGBRow                    1.75        0.87          2.00x
I212ToAR30Row                    2.21        0.96          2.31x
I212ToARGBRow                    1.75        0.87          2.01x
I410AlphaToARGBRow               1.73        0.86          2.00x
I410ToAR30Row                    2.04        0.89          2.28x
I410ToARGBRow                    1.64        0.82          2.00x
I422ToARGB1555Row                2.94        2.27          1.30x
I422ToARGB4444Row                2.94        2.27          1.29x
I422ToRGB565Row                  2.63        1.27          2.07x
I422ToRGBARow                    1.51        0.82          1.83x
I444AlphaToARGBRow               1.52        0.87          1.73x
I444ToARGBRow                    1.48        0.81          1.82x
I444ToRGB24Row                   2.13        0.72          2.98x
MergeUVRow_16                    0.87        0.32          2.74x
P210ToAR30Row                    1.77        0.70          2.54x
P210ToARGBRow                    1.38        0.62          2.24x
P410ToAR30Row                    1.94        0.85          2.28x
P410ToARGBRow                    1.45        0.77          1.90x
RGB565ToUVRow                   15.84        2.88          5.49x
RGB565ToYRow                     7.82        1.22          6.42x
RGBColorTableRow                 8.42        6.95          1.21x
SetRow                           0.11        0.11          1.04x
SobelRow                         0.80        0.43          1.87x
SobelToPlaneRow                  0.27        0.12          2.25x
SobelXRow                        1.58        0.85          1.85x
SobelXYRow                       0.80        0.55          1.44x
SobelYRow                        1.58        0.85          1.85x
UYVYToARGBRow                    1.28        0.65          1.96x
UYVYToUVRow                      0.38        0.21          1.78x
UYVYToYRow                       0.21        0.11          1.87x
YUY2ToARGBRow                    1.28        0.65          1.96x
YUY2ToUVRow                      0.40        0.21          1.87x
YUY2ToYRow                       0.21        0.11          1.88x
----------------------------------------------------------------

Row/Rotate/Compare SIMD ISA per *_C (* = uncalled in library):
------------------------------------------------------------------------
C Function                       arm64    x86_32   x64        row_win
------------------------------------------------------------------------
AB64ToARGBRow_C                  NEON     AVX2     AVX2       AVX2
ABGRToAR30Row_C                  NEON     AVX2     AVX512BW   AVX512BW
AR30ToAB30Row_C                  NEON     AVX2     AVX512BW   AVX512BW
AR30ToABGRRow_C                  NEON     AVX2     AVX512BW   AVX512BW
AR30ToARGBRow_C                  NEON     AVX2     AVX512BW   AVX512BW
AR64ShuffleRow_C                 NEON     AVX2     AVX512BW   AVX512BW
AR64ToAB64Row_C                  NEON     AVX2     AVX512BW   AVX512BW
AR64ToARGBRow_C                  NEON     AVX2     AVX2       AVX2
ARGB1555ToARGBRow_C              SVE2     AVX2     AVX512BW   AVX512BW
ARGB1555ToUVMatrixRow_C          NEON     AVX2     AVX2       AVX2
ARGB1555ToUVRow_C *              NEON     AVX2     AVX2       AVX2
ARGB1555ToYMatrixRow_C           NEON     AVX2     AVX2       AVX2
ARGB1555ToYRow_C *               NEON     AVX2     AVX2       AVX2
ARGB4444ToARGBRow_C              NEON     AVX2     AVX2       AVX2
ARGB4444ToUVMatrixRow_C          NEON     AVX2     AVX2       AVX2
ARGB4444ToUVRow_C *              NEON     AVX2     AVX2       AVX2
ARGB4444ToYMatrixRow_C           NEON     AVX2     AVX2       AVX2
ARGB4444ToYRow_C *               NEON     AVX2     AVX2       AVX2
ARGBAddRow_C                     NEON     AVX2     AVX2       AVX2
ARGBAffineRow_C *                NEON     AVX2     AVX2       AVX2
ARGBAlphaBlendRow_C              SME      AVX2     AVX512BW   AVX512BW
ARGBAttenuateRow_C               NEON     AVX2     AVX512BW   AVX512BW
ARGBBlendRow_C                   NEON     AVX2     AVX512BW   AVX512BW
ARGBColorMatrixRow_C             I8MM     AVX2     AVX512VNNI AVX512VNNI
ARGBColorTableRow_C              NEON     AVX2     AVX2       AVX2
ARGBCopyAlphaRow_C               NEON     AVX2     AVX2       AVX2
ARGBCopyYToAlphaRow_C            NEON     AVX2     AVX512BW   AVX512BW
ARGBDetectRow_C                  -        AVX2     AVX2       AVX2
ARGBExtractAlphaRow_C            NEON     AVX2     AVX512BW   AVX512BW
ARGBGrayRow_C                    DOTPROD  AVX2     AVX512VNNI AVX512VNNI
ARGBLumaColorTableRow_C          NEON     AVX2     AVX2       AVX2
ARGBMirrorRow_C                  NEON     AVX2     AVX512BW   AVX512BW
ARGBMultiplyRow_C                SME      AVX2     AVX512BW   AVX512BW
ARGBOrRow_C                      SME      AVX2     AVX512BW   AVX512BW
ARGBPolynomialRow_C              NEON     AVX2     AVX2       AVX2
ARGBQuantizeRow_C                NEON     AVX2     AVX2       AVX2
ARGBSepiaRow_C                   DOTPROD  AVX2     AVX512VNNI AVX512VNNI
ARGBSetRow_C                     NEON     AVX2     AVX2       AVX2
ARGBShadeRow_C                   NEON     AVX2     AVX2       AVX2
ARGBShuffleRow_C                 NEON     AVX2     AVX512BW   AVX512BW
ARGBSubtractRow_C                NEON     AVX2     AVX2       AVX2
ARGBToAB64Row_C                  NEON     AVX2     AVX2       AVX2
ARGBToABGRRow_C                  NEON     AVX2     AVX512BW   AVX512BW
ARGBToAR30Row_C                  NEON     AVX2     AVX512BW   AVX512BW
ARGBToAR64Row_C                  NEON     AVX2     AVX2       AVX2
ARGBToARGB1555Row_C              NEON     AVX2     AVX2       AVX2
ARGBToARGB4444Row_C              NEON     AVX2     AVX2       AVX2
ARGBToBGRARow_C                  NEON     AVX2     AVX512BW   AVX512BW
ARGBToRAWRow_C                   SVE2     AVX2     AVX512BW   AVX512BW
ARGBToRGB24Row_C                 SVE2     AVX2     AVX512BW   AVX512BW
ARGBToRGB565DitherRow_C          SVE2     AVX2     AVX512BW   AVX512BW
ARGBToRGB565Row_C                SVE2     AVX2     AVX512BW   AVX512BW
ARGBToRGBARow_C                  NEON     AVX2     AVX512BW   AVX512BW
ARGBToUV444MatrixRow_C           I8MM     AVX2     AVX512VNNI AVX512VNNI
ARGBToUVMatrixRow_C              SME      AVX2     AVX512VNNI AVX512VNNI
ARGBToYMatrixRow_C               SME      AVX2     AVX512VNNI AVX512VNNI
ARGBUnattenuateRow_C             NEON     AVX2     AVX2       AVX2
AYUVToUVRow_C                    SVE2     AVX2     AVX512VBMI AVX512VBMI
AYUVToVURow_C                    SVE2     AVX2     AVX512VBMI AVX512VBMI
AYUVToYRow_C                     NEON     AVX2     AVX512VBMI AVX512VBMI
BlendPlaneRow_C                  NEON     AVX2     AVX512BW   AVX512BW
ByteToFloatRow_C                 NEON     AVX2     AVX2       AVX2
ComputeCumulativeSumRow_C        NEON     AVX2     AVX2       AVX2
Convert16To8Row_C                SME      AVX2     AVX512BW   AVX512BW
Convert8To16Row_C                SME      AVX2     AVX512BW   AVX512BW
Convert8To8Row_C                 SME      AVX2     AVX512BW   AVX512BW
CopyRow_16_C                     NEON     AVX2     AVX2       AVX2
CopyRow_C                        SME      AVX      AVX512BW   AVX512BW
CumulativeSumToAverageRow_C      NEON     AVX2     AVX2       AVX2
DetileRow_16_C                   NEON     AVX2     AVX2       AVX2
DetileRow_C                      NEON     AVX2     AVX2       AVX2
DetileSplitUVRow_C               NEON     AVX2     AVX2       AVX2
DetileToYUY2_C                   NEON     AVX2     AVX2       AVX2
DivideRow_16_C                   SVE2     AVX2     AVX512BW   AVX512BW
GaussCol_C *                     NEON     AVX2     AVX2       AVX2
GaussCol_F32_C                   NEON     AVX2     AVX2       AVX2
GaussRow_C *                     NEON     AVX2     AVX2       AVX2
GaussRow_F32_C                   NEON     AVX2     AVX2       AVX2
HalfFloatRow_C                   SVE2     AVX2     AVX512BW   AVX512BW
HalfMergeUVRow_C                 SVE2     AVX2     AVX512BW   AVX512BW
HalfRow_16To8_C                  SME      AVX2     AVX512BW   AVX512BW
HalfRow_16_C                     -        AVX2     AVX2       AVX2
HalfRow_C                        -        AVX2     AVX2       AVX2
HalfWidthRow_16To8_C             SME      AVX2     AVX512BW   AVX512BW
HalfWidthRow_16To8_Odd_C         -        AVX2     AVX2       AVX2
HammingDistance_C                DOTPROD  AVX2     AVX512BW   AVX512BW
HashDjb2_C                       NEON     AVX2     AVX512BW   AVX512BW
I210AlphaToARGBRow_C             SME      AVX2     AVX512BW   AVX512BW
I210ToAR30Row_C                  SME      AVX2     AVX512BW   AVX512BW
I210ToARGBRow_C                  SME      AVX2     AVX512BW   AVX512BW
I212ToAR30Row_C                  SME      AVX2     AVX512BW   AVX512BW
I212ToARGBRow_C                  SME      AVX2     AVX512BW   AVX512BW
I400ToARGBRow_C                  SME      AVX2     AVX512BW   AVX512BW
I410AlphaToARGBRow_C             SME      AVX2     AVX512BW   AVX512BW
I410ToAR30Row_C                  SME      AVX2     AVX512BW   AVX512BW
I410ToARGBRow_C                  SME      AVX2     AVX512BW   AVX512BW
I422AlphaToARGBRow_C             SME      AVX2     AVX512BW   AVX512BW
I422ToAR30Row_C                  SME      AVX2     AVX512BW   AVX512BW
I422ToARGB1555Row_C              SME      AVX2     AVX512BW   AVX512BW
I422ToARGB4444Row_C              SME      AVX2     AVX512BW   AVX512BW
I422ToARGBRow_C                  SME      AVX2     AVX512BW   AVX512BW
I422ToRGB24Row_C                 SME      AVX2     AVX512VBMI AVX512VBMI
I422ToRGB565Row_C                SME      AVX2     AVX512BW   AVX512BW
I422ToRGBARow_C                  SME      AVX2     AVX512BW   AVX512BW
I422ToUYVYRow_C                  NEON     AVX2     AVX2       AVX2
I422ToYUY2Row_C                  NEON     AVX2     AVX2       AVX2
I444AlphaToARGBRow_C             SME      AVX2     AVX512BW   AVX512BW
I444ToARGBRow_C                  SME      AVX2     AVX512BW   AVX512BW
I444ToRGB24Row_C                 SME      AVX2     AVX512VBMI AVX512VBMI
InterpolateRow_16_C              SME      AVX2     AVX512BW   AVX512BW
InterpolateRow_C                 SME      AVX2     AVX512BW   AVX512BW
J400ToARGBRow_C                  NEON     AVX2     AVX512BW   AVX512BW
MergeAR64Row_C                   NEON     AVX2     AVX2       AVX2
MergeARGB16To8Row_C              NEON     AVX2     AVX2       AVX2
MergeARGBRow_C                   NEON     AVX2     AVX2       AVX2
MergeRGBRow_C                    NEON     AVX2     AVX512VBMI AVX512VBMI
MergeUVRow_16_C                  SME      AVX2     AVX512BW   AVX512BW
MergeUVRow_C                     SME      AVX2     AVX512BW   AVX512BW
MergeXR30Row_C                   NEON     AVX2     AVX512BW   AVX512BW
MergeXR64Row_C                   NEON     AVX2     AVX2       AVX2
MergeXRGB16To8Row_C              NEON     AVX2     AVX2       AVX2
MergeXRGBRow_C                   NEON     AVX2     AVX2       AVX2
MirrorRow_16_C                   NEON     AVX2     AVX512BW   AVX512BW
MirrorRow_C                      NEON     AVX2     AVX512BW   AVX512BW
MirrorSplitUVRow_C               NEON     AVX2     AVX512BW   AVX512BW
MirrorUVRow_C                    NEON     AVX2     AVX512BW   AVX512BW
MultiplyRow_16_C                 SME      AVX2     AVX512BW   AVX512BW
NV12ToARGBRow_C                  SME      AVX2     AVX512BW   AVX512BW
NV12ToRGB24Row_C                 SME      AVX2     AVX512VBMI AVX512VBMI
NV12ToRGB565Row_C                NEON     AVX2     AVX2       AVX2
NV21ToARGBRow_C                  SME      AVX2     AVX512BW   AVX512BW
NV21ToRGB24Row_C                 SME      AVX2     AVX512VBMI AVX512VBMI
NV21ToYUV24Row_C                 NEON     AVX2     AVX2       AVX2
P210ToAR30Row_C                  SME      AVX2     AVX512BW   AVX512BW
P210ToARGBRow_C                  SME      AVX2     AVX512BW   AVX512BW
P410ToAR30Row_C                  SME      AVX2     AVX512BW   AVX512BW
P410ToARGBRow_C                  SME      AVX2     AVX512BW   AVX512BW
RAWToARGBRow_C                   SVE2     AVX2     AVX512BW   AVX512BW
RAWToRGB24Row_C                  SVE2     AVX2     AVX512VBMI AVX512VBMI
RAWToRGBARow_C                   SVE2     AVX2     AVX512VBMI AVX512VBMI
RGB24MirrorRow_C                 NEON     AVX2     AVX512VBMI AVX512VBMI
RGB24ToARGBRow_C                 SVE2     AVX2     AVX512BW   AVX512BW
RGB565ToARGBRow_C                NEON     AVX2     AVX2       AVX2
RGB565ToUVMatrixRow_C            NEON     AVX2     AVX2       AVX2
RGB565ToUVRow_C *                NEON     AVX2     AVX2       AVX2
RGB565ToYMatrixRow_C             NEON     AVX2     AVX2       AVX2
RGB565ToYRow_C *                 NEON     AVX2     AVX2       AVX2
RGBAToARGBRow_C                  NEON     AVX2     AVX512BW   AVX512BW
RGBColorTableRow_C               NEON     AVX2     AVX2       AVX2
RGBToUV444MatrixRow_C            NEON     AVX2     AVX512BW   AVX512BW
RGBToUVMatrixRow_C               NEON     AVX2     AVX512BW   AVX512BW
RGBToYMatrixRow_C                DOTPROD  AVX2     AVX512BW   AVX512BW
ScaleMaxSamples_C *              NEON     AVX2     AVX2       AVX2
ScaleSamples_C *                 NEON     AVX2     AVX2       AVX2
ScaleSumSamples_C *              NEON     AVX2     AVX2       AVX2
SetRow_C                         NEON     AVX2     AVX2       AVX2
SobelRow_C                       NEON     AVX2     AVX2       AVX2
SobelToPlaneRow_C                NEON     AVX2     AVX2       AVX2
SobelXRow_C                      NEON     AVX2     AVX2       AVX2
SobelXYRow_C                     NEON     AVX2     AVX2       AVX2
SobelYRow_C                      NEON     AVX2     AVX2       AVX2
SplitARGBRow_C                   NEON     AVX2     AVX2       AVX2
SplitRGBRow_C                    NEON     AVX2     AVX2       AVX2
SplitUVRow_16_C                  NEON     AVX2     AVX2       AVX2
SplitUVRow_C                     SVE2     AVX2     AVX512BW   AVX512BW
SplitXRGBRow_C                   NEON     AVX2     AVX2       AVX2
Ssim4x4Row_C                     SME      AVX2     AVX512BW   AVX512BW
SsimWindowRow_C                  SME      AVX2     AVX512BW   AVX512BW
SumSquareError_C                 DOTPROD  AVX2     AVX512VNNI AVX512VNNI
SwapUVRow_C                      NEON     AVX2     AVX512BW   AVX512BW
TransposeUVWx16_C                -        AVX2     AVX512BW   AVX512BW
TransposeUVWx8_C                 NEON     AVX2     AVX2       AVX2
TransposeWx16_C                  NEON     AVX2     AVX512BW   AVX512BW
TransposeWx4_32_C *              SVE2     AVX2     AVX512BW   AVX512BW
TransposeWx8_16_C                SVE2     AVX2     AVX512BW   AVX512BW
TransposeWx8_C                   -        AVX2     AVX2       AVX2
TransposeWxH_32_C                NEON     AVX2     AVX2       AVX2
UYVYToARGBRow_C                  SME      AVX2     AVX512BW   AVX512BW
UYVYToUV422Row_C                 NEON     AVX2     AVX2       AVX2
UYVYToUVRow_C                    SVE2     AVX2     AVX512BW   AVX512BW
UYVYToYRow_C                     SVE2     AVX2     AVX512BW   AVX512BW
UnpackMT2T_C                     NEON     AVX2     AVX2       AVX2
YUY2ToARGBRow_C                  SME      AVX2     AVX512BW   AVX512BW
YUY2ToNVUVRow_C                  NEON     AVX2     AVX2       AVX2
YUY2ToUV422Row_C                 NEON     AVX2     AVX2       AVX2
YUY2ToUVRow_C                    SVE2     AVX2     AVX512BW   AVX512BW
YUY2ToYRow_C                     SVE2     AVX2     AVX512BW   AVX512BW
------------------------------------------------------------------------
SIMD (187 row/rot/cmp)           181 97%  187 100% 187 100%   187 100%
------------------------------------------------------------------------

Scale SIMD ISA supported per *_C function:
------------------------------------------------------------------------
C Function                       arm64    x86_32   x64        row_win
------------------------------------------------------------------------
FixedDiv1_C                      -        X86      X86        X86
FixedDiv_C                       -        X86      X86        X86
ScaleARGBCols64_C                -        -        -          -
ScaleARGBColsUp2_C               -        AVX2     AVX2       AVX2
ScaleARGBCols_C                  NEON     AVX2     AVX2       AVX2
ScaleARGBFilterCols64_C          -        -        -          -
ScaleARGBFilterCols_C            NEON     AVX2     AVX2       AVX2
ScaleARGBRowDown2Box_C           SME      AVX2     AVX2       AVX2
ScaleARGBRowDown2Linear_C        SME      AVX2     AVX2       AVX2
ScaleARGBRowDown2_C              SME      AVX2     AVX2       AVX2
ScaleARGBRowDownEvenBox_C        NEON     AVX2     AVX2       AVX2
ScaleARGBRowDownEven_C           NEON     AVX2     AVX2       AVX2
ScaleAddCols0_C                  -        -        -          -
ScaleAddCols1_16_C               -        -        -          -
ScaleAddCols1_C                  -        -        AVX512BW   AVX512BW
ScaleAddCols2_16_C               -        -        -          -
ScaleAddCols2_C                  -        -        AVX512BW   AVX512BW
ScaleAddRow_16_C                 -        -        -          -
ScaleAddRow_C                    NEON     AVX2     AVX512BW   AVX512BW
ScaleColsUp2_16_C                -        -        -          -
ScaleColsUp2_C                   -        AVX2     AVX2       AVX2
ScaleCols_16_C                   -        -        -          -
ScaleCols_C                      -        -        -          -
ScaleFilterCols64_16_C           -        -        -          -
ScaleFilterCols64_C              -        -        -          -
ScaleFilterCols_16_C             -        -        -          -
ScaleFilterCols_C                NEON     AVX2     AVX2       AVX2
ScaleRowDown2Box_16_C            SME      AVX2     AVX2       AVX2
ScaleRowDown2Box_C               SME      AVX2     AVX512BW   AVX512BW
ScaleRowDown2Box_Odd_C           -        -        AVX512BW   AVX512BW
ScaleRowDown2Linear_16_C         SME      AVX2     AVX2       AVX2
ScaleRowDown2Linear_C            SME      AVX2     AVX512BW   AVX512BW
ScaleRowDown2_16_C               SME      AVX2     AVX2       AVX2
ScaleRowDown2_C                  SME      AVX2     AVX512BW   AVX512BW
ScaleRowDown34_0_Box_16_C        -        -        -          -
ScaleRowDown34_0_Box_C           NEON     AVX2     AVX2       AVX2
ScaleRowDown34_16_C              -        -        -          -
ScaleRowDown34_1_Box_16_C        -        -        -          -
ScaleRowDown34_1_Box_C           NEON     AVX2     AVX2       AVX2
ScaleRowDown34_C                 NEON     AVX2     AVX2       AVX2
ScaleRowDown38_16_C              -        -        -          -
ScaleRowDown38_2_Box_16_C        -        -        -          -
ScaleRowDown38_2_Box_C           NEON     AVX2     AVX2       AVX2
ScaleRowDown38_3_Box_16_C        -        -        -          -
ScaleRowDown38_3_Box_C           NEON     AVX2     AVX2       AVX2
ScaleRowDown38_C                 NEON     AVX2     AVX2       AVX2
ScaleRowDown4Box_16_C            -        -        -          -
ScaleRowDown4Box_C               NEON     AVX2     AVX2       AVX2
ScaleRowDown4_16_C               -        -        -          -
ScaleRowDown4_C                  NEON     AVX2     AVX2       AVX2
ScaleRowUp2_Bilinear_16_Any_C    NEON     AVX2     AVX2       AVX2
ScaleRowUp2_Bilinear_16_C        NEON     AVX2     AVX2       AVX2
ScaleRowUp2_Bilinear_Any_C       NEON     AVX2     AVX2       AVX2
ScaleRowUp2_Bilinear_C           NEON     AVX2     AVX2       AVX2
ScaleRowUp2_Linear_16_Any_C      NEON     AVX2     AVX2       AVX2
ScaleRowUp2_Linear_16_C          NEON     AVX2     AVX2       AVX2
ScaleRowUp2_Linear_Any_C         NEON     AVX2     AVX2       AVX2
ScaleRowUp2_Linear_C             NEON     AVX2     AVX2       AVX2
ScaleUVAddCols1_16_C             -        -        -          -
ScaleUVAddCols1_C                -        -        -          -
ScaleUVAddCols2_16_C             -        -        -          -
ScaleUVAddCols2_C                -        -        -          -
ScaleUVAddCols3_16_C             -        -        -          -
ScaleUVAddCols3_C                SME      AVX2     AVX512VBMI AVX512VBMI
ScaleUVCols64_16_C               -        -        -          -
ScaleUVCols64_C                  -        -        -          -
ScaleUVColsUp2_16_C              -        -        -          -
ScaleUVColsUp2_C                 -        -        -          -
ScaleUVCols_16_C                 -        -        -          -
ScaleUVCols_C                    -        -        -          -
ScaleUVFilterCols64_16_C         -        -        -          -
ScaleUVFilterCols64_C            -        -        -          -
ScaleUVFilterCols_16_C           -        -        -          -
ScaleUVFilterCols_C              -        -        -          -
ScaleUVRowDown2Box_16_C          -        -        -          -
ScaleUVRowDown2Box_C             SME      AVX2     AVX2       AVX2
ScaleUVRowDown2Linear_16_C       -        -        -          -
ScaleUVRowDown2Linear_C          SME      AVX2     AVX2       AVX2
ScaleUVRowDown2_16_C             -        -        -          -
ScaleUVRowDown2_C                SME      AVX2     AVX2       AVX2
ScaleUVRowDownEvenBox_16_C       -        -        -          -
ScaleUVRowDownEvenBox_C          -        -        -          -
ScaleUVRowDownEven_16_C          -        -        -          -
ScaleUVRowDownEven_C             NEON     AVX2     AVX2       AVX2
ScaleUVRowUp2_Bilinear_16_Any_C  NEON     AVX2     AVX2       AVX2
ScaleUVRowUp2_Bilinear_16_C      NEON     AVX2     AVX2       AVX2
ScaleUVRowUp2_Bilinear_Any_C     NEON     AVX2     AVX2       AVX2
ScaleUVRowUp2_Bilinear_C         NEON     AVX2     AVX2       AVX2
ScaleUVRowUp2_Linear_16_Any_C    NEON     AVX2     AVX2       AVX2
ScaleUVRowUp2_Linear_16_C        NEON     AVX2     AVX2       AVX2
ScaleUVRowUp2_Linear_Any_C       NEON     AVX2     AVX2       AVX2
ScaleUVRowUp2_Linear_C           NEON     AVX2     AVX2       AVX2
------------------------------------------------------------------------
SIMD (92 scale *_C)              44 48%   48 52%   51 55%     51 55%
------------------------------------------------------------------------

Test: libyuv_unittest
Bug: none
Change-Id: I2b4a832f2a7fe1fe93487b453240cd15c1f5f940
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8676400
Commit-Queue: Frank Barchard <fbarchard@google.com>
Reviewed-by: richard winterton <rrwinterton@gmail.com>
2026-10-29 12:46:05 -07:00
build_overrides [vpython] Migrate .vpython3 to vpython.toml 2026-09-18 00:28:26 -07:00
docs [libyuv] Upgrade x86 SIMD to AVX2/AVX-512 with 32-bit & row_win parity 2026-10-29 12:46:05 -07:00
include [libyuv] Upgrade x86 SIMD to AVX2/AVX-512 with 32-bit & row_win parity 2026-10-29 12:46:05 -07:00
infra/config Use default xcode version in libyuv 2025-11-24 07:54:14 -08:00
riscv_script [libyuv] Fix RISC-V CMake/GN/Bazel builds and C compiler driver linking 2026-09-28 10:59:30 -07:00
source [libyuv] Upgrade x86 SIMD to AVX2/AVX-512 with 32-bit & row_win parity 2026-10-29 12:46:05 -07:00
tools_libyuv Remove libyuv dependency on base/ 2025-01-08 09:04:21 -08:00
unit_test [libyuv] Upgrade x86 SIMD to AVX2/AVX-512 with 32-bit & row_win parity 2026-10-29 12:46:05 -07:00
util [libyuv] Upgrade x86 SIMD to AVX2/AVX-512 with 32-bit & row_win parity 2026-10-29 12:46:05 -07:00
.clang-format clang-format libyuv 2016-11-07 17:37:23 -08:00
.gitignore DetilePlane and unittest for NEON 2022-01-31 20:05:55 +00:00
.gn [build] Use hermetic python3 for script_executable in .gn 2026-09-28 06:02:39 -07:00
Android.bp [libyuv] Add Qualcomm Hexagon HVX SIMD support 2026-10-19 14:16:18 -07:00
Android.mk [libyuv] Add Qualcomm Hexagon HVX SIMD support 2026-10-19 14:16:18 -07:00
AUTHORS Fix same-width vertical point upsampling 2026-08-24 19:28:50 -07:00
BUILD.bazel [libyuv] Add WASM SIMD128 and Relaxed SIMD for RAWToRGB24Row 2026-10-05 17:45:41 -07:00
BUILD.gn [libyuv] Add Qualcomm Hexagon HVX SIMD support 2026-10-19 14:16:18 -07:00
CM_linux_packages.cmake Use grep extended regex for version 2024-11-13 02:11:17 +00:00
CMakeLists.txt [libyuv] Add Qualcomm Hexagon HVX SIMD support 2026-10-19 14:16:18 -07:00
codereview.settings [infra] remove no longer supported git cl upload setting. 2021-04-28 12:47:52 +00:00
DEPS [build] Use hermetic python3 for script_executable in .gn 2026-09-28 06:02:39 -07:00
DIR_METADATA Move metadata in OWNERS files to DIR_METADATA files 2021-02-09 19:34:43 +00:00
download_vs_toolchain.py Update pylintrc to a pep-8 like style 2024-12-18 05:38:56 -08:00
GEMINI.md [libyuv] Upgrade x86 SIMD to AVX2/AVX-512 with 32-bit & row_win parity 2026-10-29 12:46:05 -07:00
libyuv.bzl [libyuv] Simplify RVV configuration in BUILD.bazel and libyuv.bzl 2026-09-08 17:50:17 -07:00
libyuv.gni [libyuv] Fix RISC-V CMake/GN/Bazel builds and C compiler driver linking 2026-09-28 10:59:30 -07:00
libyuv.gyp Stop setting --dynamic-linker for target_os="android" 2026-05-27 04:34:07 -07:00
libyuv.gypi [libyuv] Add Qualcomm Hexagon HVX SIMD support 2026-10-19 14:16:18 -07:00
LICENSE Update Copyright notice to follow new chromium conventions. 2012-08-08 19:04:24 +00:00
linux.mk [libyuv] Optimize SsimWindowRow with SIMD and use compare_win on x86 2026-10-20 15:00:52 -07:00
OWNERS Remove magjed from OWNERS 2026-08-24 10:43:21 -07:00
PATENTS LibYuv: Adding PATENT and LICENSE files 2011-10-25 16:15:49 +00:00
PRESUBMIT.py Update pylintrc to a pep-8 like style 2024-12-18 05:38:56 -08:00
public.mk use unix line endings 2018-06-20 23:19:59 +00:00
pylintrc Update pylintrc to a pep-8 like style 2024-12-18 05:38:56 -08:00
README.chromium [libyuv] Upgrade x86 SIMD to AVX2/AVX-512 with 32-bit & row_win parity 2026-10-29 12:46:05 -07:00
README.md Update README.md and environment_variables.md for Arm 2024-09-20 00:29:33 +00:00
vpython.toml [vpython] Migrate .vpython3 to vpython.toml 2026-09-18 00:28:26 -07:00
vpython.toml.uv.lock [vpython] Migrate .vpython3 to vpython.toml 2026-09-18 00:28:26 -07:00
winarm.mk NV12 Copy, include scale_uv.h 2020-12-08 18:54:16 +00:00
WORKSPACE.bazel Add Bazel build support 2026-04-15 18:20:26 -07:00

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/SVE2/SME 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.