Skip to content

Commit e8556a5

Browse files
committed
add loongarch64 build support
1 parent b406bb2 commit e8556a5

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

Source/GmmLib/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,8 @@ endif()
167167

168168
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^aarch")
169169
set(GMMLIB_MARCH "armv8-a+fp+simd")
170+
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^loongarch")
171+
set(GMMLIB_MARCH "la464")
170172
elseif("${GMMLIB_MARCH}" STREQUAL "")
171173
set(GMMLIB_MARCH "corei7")
172174
endif()
@@ -443,6 +445,18 @@ include_directories(BEFORE ${PROJECT_SOURCE_DIR})
443445

444446
if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^aarch")
445447
include_directories(${GFX_DEVELOPMENT_DIR}/third_party/sse2neon)
448+
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^loongarch")
449+
find_path(SIMDE_INCLUDE_DIR
450+
NAMES simde/simde-common.h # A key SIMDE header
451+
PATHS /usr/include /usr/local/include # Default paths
452+
DOC "Path to SIMDE headers"
453+
)
454+
if(SIMDE_INCLUDE_DIR)
455+
include_directories(${SIMDE_INCLUDE_DIR})
456+
message(STATUS "Found SIMDE: ${SIMDE_INCLUDE_DIR}")
457+
else()
458+
message(FATAL_ERROR "SIMDE not found. Install it or set SIMDE_INCLUDE_DIR manually.")
459+
endif()
446460
endif()
447461

448462
set(headers

Source/GmmLib/Linux.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ SET (GMMLIB_COMPILER_FLAGS_COMMON
5454

5555
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^aarch")
5656
list(APPEND GMMLIB_COMPILER_FLAGS_COMMON "-DUSE_NEON")
57+
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^loongarch")
58+
list(APPEND GMMLIB_COMPILER_FLAGS_COMMON "-Wno-attributes")
5759
else()
5860
list (APPEND GMMLIB_COMPILER_FLAGS_COMMON
5961
-Wall
@@ -145,6 +147,9 @@ endforeach()
145147
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^aarch")
146148
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
147149
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
150+
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^loongarch")
151+
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
152+
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
148153
else()
149154
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m${GMMLIB_ARCH}")
150155
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m${GMMLIB_ARCH}")

Source/GmmLib/Utility/CpuSwizzleBlt/CpuSwizzleBlt.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,9 @@ extern void CpuSwizzleBlt(CPU_SWIZZLE_BLT_SURFACE *pDest, CPU_SWIZZLE_BLT_SURFAC
375375
#include <intrin.h>
376376
#elif defined(__ARM_ARCH)
377377
#include <sse2neon.h>
378+
#elif defined(__loongarch64)
379+
#define SIMDE_X86_SSE2_ENABLE_NATIVE_ALIASES
380+
#include <simde/x86/sse2.h>
378381
#elif((defined __clang__) ||(__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)))
379382
#include <cpuid.h>
380383
#include <x86intrin.h>
@@ -749,6 +752,9 @@ void CpuSwizzleBlt( // #########################################################
749752
#elif(defined(__ARM_ARCH))
750753
#define MOVNTDQA_R(Reg, Src) ((Reg) = (Reg))
751754
StreamingLoadSupported = 0;
755+
#elif(defined(__loongarch64))
756+
#define MOVNTDQA_R(Reg, Src) ((Reg) = (Reg))
757+
StreamingLoadSupported = 0;
752758
#elif((defined __clang__) || (__GNUC__ > 4) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 5))
753759
#define MOVNTDQA_R(Reg, Src) ((Reg) = _mm_stream_load_si128((__m128i *)(Src)))
754760
unsigned int eax, ebx, ecx, edx;
@@ -1148,7 +1154,11 @@ void CpuSwizzleBlt( // #########################################################
11481154

11491155
} // foreach(y)
11501156

1151-
_mm_sfence(); // Flush Non-Temporal Writes
1157+
#if(defined(__loongarch64))
1158+
__sync_synchronize();
1159+
#else
1160+
_mm_sfence(); // Flush Non-Temporal Writes
1161+
#endif
11521162

11531163
#if(_MSC_VER)
11541164
#pragma warning(pop)

0 commit comments

Comments
 (0)