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 <wtc@google.com>
Commit-Queue: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Frank Barchard <fbarchard@google.com>
This commit is contained in:
yuanhecai 2026-08-26 16:12:59 +08:00 committed by libyuv-scoped@luci-project-accounts.iam.gserviceaccount.com
parent 60102bd795
commit 2f74e7a784

View File

@ -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 $<TARGET_OBJECTS:${ly_lib_name}_lsx>)
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 $<TARGET_OBJECTS:${ly_lib_name}_lasx>)
endif()
endif()