]> git.sesse.net Git - stockfish/blobdiff - src/Makefile
Add support for VNNI
[stockfish] / src / Makefile
index a48e7dcb3ccd481ae6868b8e430d15ba00756c41..0804cdd51a9dcfe7bafc5feb15b11a4ed0455c4f 100644 (file)
@@ -73,6 +73,7 @@ endif
 # avx2 = yes/no       --- -mavx2           --- Use Intel Advanced Vector Extensions 2
 # pext = yes/no       --- -DUSE_PEXT       --- Use pext x86_64 asm-instruction
 # avx512 = yes/no     --- -mavx512bw       --- Use Intel Advanced Vector Extensions 512
+# vnni = yes/no       --- -mavx512vnni     --- Use Intel Vector Neural Network Instructions 512
 # neon = yes/no       --- -DUSE_NEON       --- Use ARM SIMD architecture
 #
 # Note that Makefile is space sensitive, so when adding new architectures
@@ -86,12 +87,14 @@ sanitize = no
 bits = 64
 prefetch = no
 popcnt = no
+mmx = no
 sse = no
 ssse3 = no
 sse41 = no
 avx2 = no
 pext = no
 avx512 = no
+vnni = no
 neon = no
 ARCH = x86-64-modern
 
@@ -110,6 +113,7 @@ ifeq ($(ARCH),x86-32)
        arch = i386
        bits = 32
        prefetch = yes
+       mmx = yes
        sse = yes
 endif
 
@@ -188,6 +192,19 @@ ifeq ($(ARCH),x86-64-avx512)
        avx512 = yes
 endif
 
+ifeq ($(ARCH),x86-64-vnni)
+       arch = x86_64
+       prefetch = yes
+       popcnt = yes
+       sse = yes
+       ssse3 = yes
+       sse41 = yes
+       avx2 = yes
+       pext = yes
+       avx512 = yes
+       vnni = yes
+endif
+
 ifeq ($(ARCH),armv7)
        arch = armv7
        prefetch = yes
@@ -250,7 +267,7 @@ ifeq ($(COMP),gcc)
        ifneq ($(KERNEL),Darwin)
           LDFLAGS += -Wl,--no-as-needed
        endif
-       
+
        gccversion = $(shell $(CXX) --version)
        gccisclang = $(findstring clang,$(gccversion))
 endif
@@ -414,7 +431,14 @@ endif
 ifeq ($(avx512),yes)
        CXXFLAGS += -DUSE_AVX512
        ifeq ($(comp),$(filter $(comp),gcc clang mingw))
-               CXXFLAGS += -mavx512bw
+               CXXFLAGS += -mavx512f -mavx512bw
+       endif
+endif
+
+ifeq ($(vnni),yes)
+       CXXFLAGS += -DUSE_VNNI
+       ifeq ($(comp),$(filter $(comp),gcc clang mingw))
+               CXXFLAGS += -mavx512vnni -mavx512dq -mavx512vl
        endif
 endif
 
@@ -432,6 +456,13 @@ ifeq ($(ssse3),yes)
        endif
 endif
 
+ifeq ($(mmx),yes)
+       CXXFLAGS += -DUSE_MMX
+       ifeq ($(comp),$(filter $(comp),gcc clang mingw))
+               CXXFLAGS += -mmmx
+       endif
+endif
+
 ifeq ($(neon),yes)
        CXXFLAGS += -DUSE_NEON
 endif
@@ -463,6 +494,11 @@ ifeq ($(debug), no)
        ifeq ($(gccisclang),)
                CXXFLAGS += -flto
                LDFLAGS += $(CXXFLAGS) -flto=jobserver
+               ifneq ($(findstring MINGW,$(KERNEL)),)
+                       LDFLAGS += -save-temps
+               else ifneq ($(findstring MSYS,$(KERNEL)),)
+                       LDFLAGS += -save-temps
+               endif
        else
                CXXFLAGS += -flto=thin
                LDFLAGS += $(CXXFLAGS)
@@ -508,6 +544,7 @@ help:
        @echo ""
        @echo "Supported archs:"
        @echo ""
+       @echo "x86-64-vnni             > x86 64-bit with vnni support"
        @echo "x86-64-avx512           > x86 64-bit with avx512 support"
        @echo "x86-64-bmi2             > x86 64-bit with bmi2 support"
        @echo "x86-64-avx2             > x86 64-bit with avx2 support"
@@ -516,7 +553,7 @@ help:
        @echo "x86-64-ssse3            > x86 64-bit with ssse3 support"
        @echo "x86-64-sse3-popcnt      > x86 64-bit with sse3 and popcnt support"
        @echo "x86-64                  > x86 64-bit generic"
-       @echo "x86-32                  > x86 32-bit (also enables SSE)"
+       @echo "x86-32                  > x86 32-bit (also enables MMX and SSE)"
        @echo "x86-32-old              > x86 32-bit fall back for old hardware"
        @echo "ppc-64                  > PPC 64-bit"
        @echo "ppc-32                  > PPC 32-bit"
@@ -555,7 +592,7 @@ help:
 build: config-sanity
        $(MAKE) ARCH=$(ARCH) COMP=$(COMP) all
 
-profile-build: config-sanity objclean profileclean
+profile-build: net config-sanity objclean profileclean
        @echo ""
        @echo "Step 1/4. Building instrumented executable ..."
        $(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_make)
@@ -596,7 +633,7 @@ objclean:
 # clean auxiliary profiling files
 profileclean:
        @rm -rf profdir
-       @rm -f bench.txt *.gcda *.gcno ./syzygy/*.gcda ./nnue/*.gcda ./nnue/features/*.gcda
+       @rm -f bench.txt *.gcda *.gcno ./syzygy/*.gcda ./nnue/*.gcda ./nnue/features/*.gcda *.s
        @rm -f stockfish.profdata *.profraw
 
 default:
@@ -626,6 +663,7 @@ config-sanity:
        @echo "avx2: '$(avx2)'"
        @echo "pext: '$(pext)'"
        @echo "avx512: '$(avx512)'"
+       @echo "vnni: '$(vnni)'"
        @echo "neon: '$(neon)'"
        @echo ""
        @echo "Flags:"
@@ -650,6 +688,7 @@ config-sanity:
        @test "$(avx2)" = "yes" || test "$(avx2)" = "no"
        @test "$(pext)" = "yes" || test "$(pext)" = "no"
        @test "$(avx512)" = "yes" || test "$(avx512)" = "no"
+       @test "$(vnni)" = "yes" || test "$(vnni)" = "no"
        @test "$(neon)" = "yes" || test "$(neon)" = "no"
        @test "$(comp)" = "gcc" || test "$(comp)" = "icc" || test "$(comp)" = "mingw" || test "$(comp)" = "clang"