ARGBToYMatrixRow_SVE2 fix for ARGBToI400

- set full accumulators to 0
 - uzp1 to convert uint16 to uint8

Bug: 546962730
Change-Id: I19334c3d0da479348f0c1df0a892ca76eb7acc23
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8263170
Commit-Queue: Frank Barchard <fbarchard@google.com>
Commit-Queue: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Wan-Teh Chang <wtc@google.com>
This commit is contained in:
Frank Barchard 2026-08-16 15:37:27 -07:00 committed by libyuv-scoped@luci-project-accounts.iam.gserviceaccount.com
parent 5bbceb1bb2
commit 0da8e419df
2 changed files with 14 additions and 13 deletions

View File

@ -583,7 +583,7 @@ extern "C" {
#define HAS_ARGBTORGB565DITHERROW_SVE2
#define HAS_ARGBTORGB565ROW_SVE2
#define HAS_ARGBTOUVMATRIXROW_SVE2
// #define HAS_ARGBTOYMATRIXROW_SVE2 // Disabled: Bug 546962730
#define HAS_ARGBTOYMATRIXROW_SVE2
#define HAS_AYUVTOUVROW_SVE2
#define HAS_AYUVTOVUROW_SVE2
// #define HAS_CONVERT16TO8ROW_SVE2 // Disabled: NEON version is faster for 128 bit vectors.
@ -642,7 +642,7 @@ extern "C" {
defined(__aarch64__)
#define HAS_ARGBMULTIPLYROW_SME
#define HAS_ARGBTOUVMATRIXROW_SME
// #define HAS_ARGBTOYMATRIXROW_SME // Disabled: Bug 546962730
#define HAS_ARGBTOYMATRIXROW_SME // Disabled: Bug 546962730
#define HAS_CONVERT16TO8ROW_SME
#define HAS_CONVERT8TO16ROW_SME
#define HAS_CONVERT8TO8ROW_SME

View File

@ -2056,10 +2056,10 @@ static const int8_t kABGRToUVJCoefficients[] = {
\
"subs %w[width], %w[width], %w[vl], lsl #2 \n" /* VL per loop */ \
\
"fmov s16, wzr \n" \
"fmov s17, wzr \n" \
"fmov s20, wzr \n" \
"fmov s21, wzr \n" \
"mov z16.b, #0 \n" \
"mov z17.b, #0 \n" \
"mov z20.b, #0 \n" \
"mov z21.b, #0 \n" \
\
"usdot z16.s, z0.b, z24.b \n" \
"usdot z17.s, z1.b, z24.b \n" \
@ -2150,18 +2150,19 @@ static inline void ARGBToUVMatrixRow_SVE_SC(const uint8_t* src_argb,
"ld1w {z2.s}, " p3 "/z, [%[src], #2, mul vl] \n" \
"ld1w {z3.s}, " p4 "/z, [%[src], #3, mul vl] \n" \
"incb %[src], all, mul #4 \n" \
"fmov s16, wzr \n" \
"fmov s17, wzr \n" \
"fmov s18, wzr \n" \
"fmov s19, wzr \n" \
"mov z16.b, #0 \n" \
"mov z17.b, #0 \n" \
"mov z18.b, #0 \n" \
"mov z19.b, #0 \n" \
"udot z16.s, z0.b, z24.b \n" \
"udot z17.s, z1.b, z24.b \n" \
"udot z18.s, z2.b, z24.b \n" \
"udot z19.s, z3.b, z24.b \n" \
"uzp1 z16.h, z16.h, z17.h \n" \
"uzp1 z18.h, z18.h, z19.h \n" \
"addhnb z20.b, z16.h, z25.h \n" \
"addhnt z20.b, z18.h, z25.h \n" \
"addhnb z16.b, z16.h, z25.h \n" \
"addhnb z18.b, z18.h, z25.h \n" \
"uzp1 z20.b, z16.b, z18.b \n" \
"st1b {z20.b}, " p5 ", [%[dst_y]] \n" \
"incb %[dst_y] \n" \
"subs %w[width], %w[width], %w[vl], lsl #2 \n"
@ -2209,7 +2210,7 @@ static inline void ARGBToYMatrixRow_SVE_SC(const uint8_t* src_argb,
[vl2] "r"(vl * 2), // %[vl2]
[vl3] "r"(vl * 3) // %[vl3]
: "cc", "memory", "z0", "z1", "z2", "z3", "z16", "z17", "z18", "z19",
"z24", "z25", "p0", "p1", "p2", "p3", "p4", "p5");
"z20", "z24", "z25", "p0", "p1", "p2", "p3", "p4", "p5");
}
#endif // !defined(LIBYUV_DISABLE_SVE) && defined(__aarch64__)