From 2f74e7a78486ea6c977b3d09527a2bb2f12d44c9 Mon Sep 17 00:00:00 2001 From: yuanhecai Date: Wed, 26 Aug 2026 16:12:59 +0800 Subject: [PATCH] loongarch: Fix per-ISA build flags Compile LSX and LASX sources separately (-mlsx vs -mlasx) to avoid emitting LASX instructions in LSX kernels, which crashed on LSX-only CPUs. Change-Id: I56003cee9bb750cdac8fa19a5c95efb8889ba9e0 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8294723 Reviewed-by: Wan-Teh Chang Commit-Queue: Wan-Teh Chang Reviewed-by: Frank Barchard --- CMakeLists.txt | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 77e0527fc..4006a59d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,13 +40,10 @@ set ( ly_common_source_files ${ly_src_dir}/rotate.cc ${ly_src_dir}/rotate_common.cc ${ly_src_dir}/rotate_gcc.cc - ${ly_src_dir}/rotate_lsx.cc ${ly_src_dir}/rotate_win.cc ${ly_src_dir}/row_any.cc ${ly_src_dir}/row_common.cc ${ly_src_dir}/row_gcc.cc - ${ly_src_dir}/row_lasx.cc - ${ly_src_dir}/row_lsx.cc ${ly_src_dir}/row_rvv.cc ${ly_src_dir}/row_win.cc ${ly_src_dir}/scale_any.cc @@ -54,7 +51,6 @@ set ( ly_common_source_files ${ly_src_dir}/scale.cc ${ly_src_dir}/scale_common.cc ${ly_src_dir}/scale_gcc.cc - ${ly_src_dir}/scale_lsx.cc ${ly_src_dir}/scale_rgb.cc ${ly_src_dir}/scale_rvv.cc ${ly_src_dir}/scale_uv.cc @@ -162,10 +158,21 @@ if(LOONGARCH64) return 0; }" SUPPORTS_LASX) if(SUPPORTS_LSX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlsx") + # These kernels use only LSX (128-bit) instructions and must not be + # compiled with -mlasx, which would let the compiler emit 256-bit LASX + # code (e.g. for stack-array copies) and crash on LSX-only CPUs. + add_library(${ly_lib_name}_lsx OBJECT + ${ly_src_dir}/rotate_lsx.cc + ${ly_src_dir}/row_lsx.cc + ${ly_src_dir}/scale_lsx.cc) + target_compile_options(${ly_lib_name}_lsx PRIVATE -mlsx) + list(APPEND ly_lib_parts $) endif() if(SUPPORTS_LASX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlasx") + add_library(${ly_lib_name}_lasx OBJECT + ${ly_src_dir}/row_lasx.cc) + target_compile_options(${ly_lib_name}_lasx PRIVATE -mlasx) + list(APPEND ly_lib_parts $) endif() endif()