Skip to content

Commit fdc1cdb

Browse files
authored
Merge pull request #3898 from martin-frbg/zen4fix
Fix compiler option setting for AVX512-capable ZEN targets
2 parents 60dfba0 + 19a696f commit fdc1cdb

3 files changed

Lines changed: 57 additions & 2 deletions

File tree

Makefile.x86_64

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,28 @@ endif
130130
endif
131131
endif
132132

133+
ifeq ($(CORE), ZEN)
134+
ifdef HAVE_AVX512VL
135+
ifndef NO_AVX512
136+
CCOMMON_OPT += -march=skylake-avx512
137+
ifneq ($(F_COMPILER), NAG)
138+
FCOMMON_OPT += -march=skylake-avx512
139+
endif
140+
ifeq ($(OSNAME), CYGWIN_NT)
141+
CCOMMON_OPT += -fno-asynchronous-unwind-tables
142+
FCOMMON_OPT += -fno-asynchronous-unwind-tables
143+
endif
144+
ifeq ($(OSNAME), WINNT)
145+
ifeq ($(C_COMPILER), GCC)
146+
CCOMMON_OPT += -fno-asynchronous-unwind-tables
147+
FCOMMON_OPT += -fno-asynchronous-unwind-tables
148+
endif
149+
endif
150+
endif
151+
endif
152+
endif
153+
154+
133155
ifdef HAVE_AVX2
134156
ifndef NO_AVX2
135157
ifeq ($(C_COMPILER), GCC)

cmake/cc.cmake

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,21 @@ if (${CORE} STREQUAL SAPPHIRERAPIDS)
144144
endif ()
145145
endif ()
146146

147+
if (${CORE} STREQUAL ZEN)
148+
if (HAVE_AVX512VL)
149+
if (NOT DYNAMIC_ARCH)
150+
if (NOT NO_AVX512)
151+
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
152+
if (${GCC_VERSION} VERSION_GREATER 13.0 OR ${GCC_VERSION} VERSION_EQUAL 13.0)
153+
set (CCOMMON_OPT "${CCOMMON_OPT} -march=znver4")
154+
else ()
155+
set (CCOMMON_OPT "${CCOMMON_OPT} -march=skylake-avx512")
156+
endif ()
157+
endif ()
158+
endif ()
159+
endif ()
160+
endif ()
161+
147162
if (${CORE} STREQUAL A64FX)
148163
if (NOT DYNAMIC_ARCH)
149164
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)

cmake/system.cmake

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,27 @@ if (DEFINED TARGET)
195195
endif()
196196
endif()
197197
if (${TARGET} STREQUAL SKYLAKEX AND NOT NO_AVX512)
198-
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=skylake-avx512")
198+
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=skylake-avx512")
199199
endif()
200-
if ((${TARGET} STREQUAL HASWELL OR ${TARGET} STREQUAL ZEN) AND NOT NO_AVX2)
200+
201+
if (((${TARGET} STREQUAL ZEN) AND HAVE_AVX512VL) AND NOT NO_AVX512)
202+
if (${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
203+
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
204+
if (${CMAKE_C_COMPILER_VERSION} VERSION_GREATER 12.99)
205+
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=znver4")
206+
else()
207+
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=skylake-avx512")
208+
endif()
209+
elseif (${CMAKE_C_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_C_COMPILER_ID} STREQUAL "AppleClang")
210+
if (${CMAKE_C_COMPILER_VERSION} VERSION_GREATER 15.99)
211+
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=znver4")
212+
else()
213+
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=skylake-avx512")
214+
endif()
215+
endif()
216+
endif()
217+
218+
if ((${TARGET} STREQUAL HASWELL OR (${TARGET} STREQUAL ZEN AND NOT HAVE_AVX512VL)) AND NOT NO_AVX2)
201219
if (${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
202220
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
203221
if (${GCC_VERSION} VERSION_GREATER 4.7 OR ${GCC_VERSION} VERSION_EQUAL 4.7)

0 commit comments

Comments
 (0)