From efd164d64ee4aab463e00f69e0de7f53ca91865d Mon Sep 17 00:00:00 2001 From: Frank Barchard Date: Wed, 5 Jun 2024 13:02:01 -0700 Subject: [PATCH] Disable RVV ScaleDownBy4 if compiler option is not enabled - Some configs have int64 elements off by default. Disable ScaleDownBy4 row function to avoid compile error Bug: 344954354 Change-Id: Ie0d74daea72375eff6438ab54cb2803d68d67e52 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/5598460 Reviewed-by: James Zern --- include/libyuv/scale_row.h | 2 ++ source/scale_uv.cc | 12 +++++++++--- unit_test/cpu_test.cc | 3 +++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/include/libyuv/scale_row.h b/include/libyuv/scale_row.h index cc3b8f6b5..40f728b79 100644 --- a/include/libyuv/scale_row.h +++ b/include/libyuv/scale_row.h @@ -182,7 +182,9 @@ extern "C" { #define HAS_SCALEADDROW_RVV // TODO: Test ScaleARGBRowDownEven_RVV and enable it // #define HAS_SCALEARGBROWDOWNEVEN_RVV +#if defined(__riscv_zve64x) #define HAS_SCALEUVROWDOWN4_RVV +#endif #define HAS_SCALEUVROWDOWNEVEN_RVV #define HAS_SCALEARGBROWDOWN2_RVV #define HAS_SCALEARGBROWDOWN2BOX_RVV diff --git a/source/scale_uv.cc b/source/scale_uv.cc index 0931c89a9..31c27e913 100644 --- a/source/scale_uv.cc +++ b/source/scale_uv.cc @@ -327,10 +327,16 @@ static void ScaleUVDownEven(int src_width, } } #endif -#if defined(HAS_SCALEUVROWDOWNEVEN_RVV) +#if defined(HAS_SCALEUVROWDOWNEVEN_RVV) || defined(HAS_SCALEUVROWDOWN4_RVV) if (TestCpuFlag(kCpuHasRVV) && !filtering) { - ScaleUVRowDownEven = - (col_step == 4) ? ScaleUVRowDown4_RVV : ScaleUVRowDownEven_RVV; + #if defined(HAS_SCALEUVROWDOWNEVEN_RVV) + ScaleUVRowDownEven = ScaleUVRowDownEven_RVV; + #endif + #if defined(HAS_SCALEUVROWDOWN4_RVV) + if (col_step == 4) { + ScaleUVRowDownEven = ScaleUVRowDown4_RVV; + } + #endif } #endif diff --git a/unit_test/cpu_test.cc b/unit_test/cpu_test.cc index 829d7eb97..325249364 100644 --- a/unit_test/cpu_test.cc +++ b/unit_test/cpu_test.cc @@ -144,6 +144,9 @@ TEST_F(LibYUVBaseTest, TestCompilerMacros) { #ifdef __riscv_v_intrinsic printf("__riscv_v_intrinsic %d\n", __riscv_v_intrinsic); #endif +#ifdef __riscv_zve64x + printf("__riscv_zve64x %d\n", __riscv_zve64x); +#endif #ifdef __APPLE__ printf("__APPLE__ %d\n", __APPLE__); #endif