Skip to content

Commit 81b8c0e

Browse files
committed
Loongson MMI: Merge with MIPS64/add auto-detection
Modern Loongson processors are MIPS64-compatible, and MMI instructions are now supported in the mainline of GCC. Thus, this commit adds compile-time and run-time auto-detection of MMI instructions and moves the MMI SIMD extensions for libjpeg-turbo from simd/loongson/ to simd/mips64/. That will allow MMI and MSA instructions to co-exist in the same build once #377 has been integrated. Based on: FlyGoat/libjpeg-turbo@82953dd Closes #383
1 parent 52fef34 commit 81b8c0e

20 files changed

Lines changed: 119 additions & 9 deletions

simd/CMakeLists.txt

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -314,24 +314,48 @@ if(CMAKE_POSITION_INDEPENDENT_CODE OR ENABLE_SHARED)
314314
endif()
315315

316316
###############################################################################
317-
# Loongson (Intrinsics)
317+
# MIPS64 (Intrinsics)
318318
###############################################################################
319319

320-
elseif(CPU_TYPE STREQUAL "loongson")
320+
elseif(CPU_TYPE STREQUAL "loongson" OR CPU_TYPE MATCHES "mips64*")
321321

322-
set(SIMD_SOURCES loongson/jccolor-mmi.c loongson/jcgray-mmi.c
323-
loongson/jcsample-mmi.c loongson/jdcolor-mmi.c loongson/jdsample-mmi.c
324-
loongson/jdmerge-mmi.c loongson/jfdctfst-mmi.c loongson/jfdctint-mmi.c
325-
loongson/jidctfst-mmi.c loongson/jidctint-mmi.c loongson/jquanti-mmi.c)
322+
set(CMAKE_REQUIRED_FLAGS -Wa,-mloongson-mmi,-mloongson-ext)
323+
324+
check_c_source_compiles("
325+
int main(void) {
326+
int c = 0, a = 0, b = 0;
327+
asm (
328+
\"paddb %0, %1, %2\"
329+
: \"=f\" (c)
330+
: \"f\" (a), \"f\" (b)
331+
);
332+
return c;
333+
}" HAVE_MMI)
334+
335+
unset(CMAKE_REQUIRED_FLAGS)
336+
337+
if(NOT HAVE_MMI)
338+
simd_fail("SIMD extensions not available for this CPU")
339+
return()
340+
endif()
341+
342+
set(SIMD_SOURCES mips64/jccolor-mmi.c mips64/jcgray-mmi.c mips64/jcsample-mmi.c
343+
mips64/jdcolor-mmi.c mips64/jdmerge-mmi.c mips64/jdsample-mmi.c
344+
mips64/jfdctfst-mmi.c mips64/jfdctint-mmi.c mips64/jidctfst-mmi.c
345+
mips64/jidctint-mmi.c mips64/jquanti-mmi.c)
326346

327347
if(CMAKE_COMPILER_IS_GNUCC)
328348
foreach(file ${SIMD_SOURCES})
329349
set_property(SOURCE ${file} APPEND_STRING PROPERTY COMPILE_FLAGS
330350
" -fno-strict-aliasing")
331351
endforeach()
332352
endif()
353+
foreach(file ${SIMD_SOURCES})
354+
set_property(SOURCE ${file} APPEND_STRING PROPERTY COMPILE_FLAGS
355+
" -Wa,-mloongson-mmi,-mloongson-ext")
356+
endforeach()
333357

334-
add_library(simd OBJECT ${SIMD_SOURCES} loongson/jsimd.c)
358+
add_library(simd OBJECT ${SIMD_SOURCES} mips64/jsimd.c)
335359

336360
if(CMAKE_POSITION_INDEPENDENT_CODE OR ENABLE_SHARED)
337361
set_target_properties(simd PROPERTIES POSITION_INDEPENDENT_CODE 1)

0 commit comments

Comments
 (0)