Fix undeclared register clobbers in x86 and NEON assembly

List of affected functions:
- ARGBToAB64Row_SSSE3 (row_gcc.cc): add xmm3 clobber
- ARGBToAB64Row_AVX2 (row_gcc.cc): add xmm3 clobber
- ARGBToAB64Row_NEON (row_neon64.cc): add v5, v6, v7 clobbers
- ARGBToUV444MatrixRow_NEON (row_neon.cc): add q13 clobber
- ARGBSepiaRow_NEON_DotProd (row_neon64.cc): add v23 clobber
- I422ToRGB24Row_NEON (row_neon.cc): remove dead d6 mutation
- I422ToRGB565Row_NEON (row_neon.cc): remove dead d6 mutation
- MergeAR64Row_NEON (row_neon.cc, row_neon64.cc): add q14, v30 clobbers
- MergeXR30Row_AVX2 (row_gcc.cc): add xmm6 clobber
- MergeXR64Row_NEON (row_neon.cc, row_neon64.cc): add q14, v30 clobbers
- NV12ToRGB24Row_NEON (row_neon.cc): remove dead d6 mutation
- NV12ToRGB565Row_NEON (row_neon.cc): remove dead d6 mutation
- NV21ToRGB24Row_NEON (row_neon.cc): remove dead d6 mutation
- RGBToUV444MatrixRow_NEON (row_neon.cc): add q13 clobber
- ScaleRowDown2Box_SSSE3 (scale_gcc.cc): add xmm4 clobber
- ScaleRowDown2Box_AVX2 (scale_gcc.cc): add xmm4 clobber
- SobelToPlaneRow_SSE2 (row_gcc.cc): remove dead xmm5 mutation
- UYVYToARGBRow_SSSE3 (row_gcc.cc): add xmm6, xmm7 clobbers

Test: ninja -C out/Release libyuv_unittest && ./out/Release/libyuv_unittest
Bug: 489489002
Change-Id: I0a8794be0423ef36d679a45e276738c2e42d2fb8
TAG=agy
CONV=16035e35-dcc9-4b8f-90f7-f17b299bc523
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8258080
Commit-Queue: Frank Barchard <fbarchard@google.com>
Reviewed-by: richard winterton <rrwinterton@gmail.com>
This commit is contained in:
Frank Barchard 2026-08-20 20:14:23 -07:00
parent 28ce69c274
commit 8d7ed8af35
4 changed files with 15 additions and 21 deletions

View File

@ -1160,7 +1160,7 @@ void ARGBToAB64Row_SSSE3(const uint8_t* src_argb,
"+r"(width) // %2
: "m"(kShuffleARGBToAB64Lo), // %3
"m"(kShuffleARGBToAB64Hi) // %4
: "memory", "cc", "xmm0", "xmm1", "xmm2");
: "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3");
}
void AR64ToARGBRow_SSSE3(const uint16_t* src_ar64,
@ -1259,7 +1259,7 @@ void ARGBToAB64Row_AVX2(const uint8_t* src_argb,
"+r"(width) // %2
: "m"(kShuffleARGBToAB64Lo), // %3
"m"(kShuffleARGBToAB64Hi) // %3
: "memory", "cc", "xmm0", "xmm1", "xmm2");
: "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3");
}
#endif
@ -2947,7 +2947,7 @@ void OMITFP UYVYToARGBRow_SSSE3(const uint8_t* uyvy_buf,
: [yuvconstants] "r"(yuvconstants), // %[yuvconstants]
[kShuffleUYVYY] "m"(kShuffleUYVYY), [kShuffleUYVYUV] "m"(kShuffleUYVYUV)
: "memory", "cc", YUVTORGB_REGS "xmm0", "xmm1", "xmm2", "xmm3", "xmm4",
"xmm5");
"xmm5", "xmm6", "xmm7");
}
void OMITFP P210ToARGBRow_SSSE3(const uint16_t* y_buf,
@ -6632,7 +6632,8 @@ void MergeXR30Row_AVX2(const uint16_t* src_r,
#else
: "rm"(shift) // %5
#endif
: "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5");
: "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5",
"xmm6");
}
#endif
@ -8700,8 +8701,6 @@ void SobelToPlaneRow_SSE2(const uint8_t* src_sobelx,
int width) {
asm volatile(
"sub %0,%1 \n"
"pcmpeqb %%xmm5,%%xmm5 \n"
"pslld $0x18,%%xmm5 \n"
// 8 pixel loop.
LABELALIGN

View File

@ -292,7 +292,6 @@ void I422ToRGB24Row_NEON(const uint8_t* src_y,
int width) {
asm volatile(
YUVTORGB_SETUP
"vmov.u8 d6, #255 \n"
"1: \n" //
READYUV422
"subs %[width], %[width], #8 \n" YUVTORGB RGBTORGB8
@ -323,7 +322,6 @@ void I422ToRGB565Row_NEON(const uint8_t* src_y,
int width) {
asm volatile(
YUVTORGB_SETUP
"vmov.u8 d6, #255 \n"
"1: \n" //
READYUV422 "subs %[width], %[width], #8 \n" YUVTORGB
RGBTORGB8 ARGBTORGB565
@ -494,7 +492,6 @@ void NV12ToRGB24Row_NEON(const uint8_t* src_y,
int width) {
asm volatile(
YUVTORGB_SETUP
"vmov.u8 d6, #255 \n"
"1: \n" //
READNV12 YUVTORGB RGBTORGB8
"subs %[width], %[width], #8 \n"
@ -516,7 +513,6 @@ void NV21ToRGB24Row_NEON(const uint8_t* src_y,
int width) {
asm volatile(
YUVTORGB_SETUP
"vmov.u8 d6, #255 \n"
"1: \n" //
READNV21 YUVTORGB RGBTORGB8
"subs %[width], %[width], #8 \n"
@ -538,7 +534,6 @@ void NV12ToRGB565Row_NEON(const uint8_t* src_y,
int width) {
asm volatile(
YUVTORGB_SETUP
"vmov.u8 d6, #255 \n"
"1: \n" //
READNV12 YUVTORGB RGBTORGB8
"subs %[width], %[width], #8 \n" ARGBTORGB565
@ -1063,7 +1058,7 @@ void MergeAR64Row_NEON(const uint16_t* src_r,
"+r"(width) // %5
: "r"(shift), // %6
"r"(mask) // %7
: "memory", "cc", "q0", "q1", "q2", "q3", "q15");
: "memory", "cc", "q0", "q1", "q2", "q3", "q14", "q15");
}
void MergeXR64Row_NEON(const uint16_t* src_r,
@ -1100,7 +1095,7 @@ void MergeXR64Row_NEON(const uint16_t* src_r,
"+r"(width) // %4
: "r"(shift), // %5
"r"(mask) // %6
: "memory", "cc", "q0", "q1", "q2", "q3", "q15");
: "memory", "cc", "q0", "q1", "q2", "q3", "q14", "q15");
}
void MergeARGB16To8Row_NEON(const uint16_t* src_r,
@ -1894,7 +1889,7 @@ void ARGBToUV444MatrixRow_NEON(const uint8_t* src_argb,
"r"(&c->kRGBToV), // %5
"r"(&c->kAddUV) // %6
: "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8",
"q10", "q11", "q12");
"q10", "q11", "q12", "q13");
}
// 8x1 pixels.
@ -1946,7 +1941,7 @@ void RGBToUV444MatrixRow_NEON(const uint8_t* src_rgb,
"r"(&c->kRGBToV), // %5
"r"(&c->kAddUV) // %6
: "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
"q10", "q11", "q12");
"q10", "q11", "q12", "q13");
}
// clang-format off

View File

@ -1701,7 +1701,7 @@ void MergeAR64Row_NEON(const uint16_t* src_r,
"+r"(width) // %5
: "r"(shift), // %6
"r"(mask) // %7
: "memory", "cc", "v0", "v1", "v2", "v3", "v31");
: "memory", "cc", "v0", "v1", "v2", "v3", "v30", "v31");
}
void MergeXR64Row_NEON(const uint16_t* src_r,
@ -1741,7 +1741,7 @@ void MergeXR64Row_NEON(const uint16_t* src_r,
"+r"(width) // %4
: "r"(shift), // %5
"r"(mask) // %6
: "memory", "cc", "v0", "v1", "v2", "v3", "v31");
: "memory", "cc", "v0", "v1", "v2", "v3", "v30", "v31");
}
void MergeARGB16To8Row_NEON(const uint16_t* src_r,
@ -2657,7 +2657,7 @@ void ARGBToAB64Row_NEON(const uint8_t* src_argb,
"+r"(dst_ab64), // %1
"+r"(width) // %2
: "r"(&kShuffleARGBToAB64[0]) // %3
: "cc", "memory", "v0", "v1", "v2", "v3", "v4");
: "cc", "memory", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7");
}
#endif // LIBYUV_USE_ST2
@ -4063,7 +4063,7 @@ void ARGBSepiaRow_NEON_DotProd(uint8_t* dst_argb, int width) {
: [coeffs] "r"(&kARGBSepiaRowCoeffs), // %[coeffs]
[indices] "r"(&kARGBSepiaRowAlphaIndices) // %[indices]
: "cc", "memory", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v20",
"v21", "v22", "v24", "v25", "v26", "v28", "v29", "v30");
"v21", "v22", "v23", "v24", "v25", "v26", "v28", "v29", "v30");
}
// Tranform 8 ARGB pixels (32 bytes) with color matrix.

View File

@ -187,7 +187,7 @@ void ScaleRowDown2Box_SSSE3(const uint8_t* src_ptr,
"+r"(dst_ptr), // %1
"+r"(dst_width) // %2
: "r"(src_stride) // %3
: "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm5");
: "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5");
}
#ifdef HAS_SCALEROWDOWN2_AVX2
@ -287,7 +287,7 @@ void ScaleRowDown2Box_AVX2(const uint8_t* src_ptr,
"+r"(dst_ptr), // %1
"+r"(dst_width) // %2
: "r"(src_stride) // %3
: "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm5");
: "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5");
}
#endif // HAS_SCALEROWDOWN2_AVX2