From 1b6dd54f9fdf8b4caa2c2305cd1e2011444353ca Mon Sep 17 00:00:00 2001 From: bones_was_here Date: Mon, 3 Apr 2023 02:30:51 +1000 Subject: [PATCH] Update compiler options, fixing obscure bug Added -mno-avx to avoid QC bugs on (at least) haswell and skylake targets. Removed -fno-signaling-nans as clang doesn't support it and spams warns, and in GCC it's the default. Removed -fno-rounding-math as this is also the default. --- makefile.inc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/makefile.inc b/makefile.inc index a08c5dbc..df8fecc5 100644 --- a/makefile.inc +++ b/makefile.inc @@ -22,9 +22,10 @@ CC?=gcc # Experimental #CPUOPTIMIZATIONS?=-fno-math-errno -fno-rounding-math -fno-signaling-nans -fassociative-math -freciprocal-math -fno-signed-zeros -fno-trapping-math # Normal -CPUOPTIMIZATIONS?=-fno-math-errno -fno-rounding-math -fno-signaling-nans -fno-trapping-math +CPUOPTIMIZATIONS?=-mno-avx # NOTE: *never* *ever* use the -ffast-math or -funsafe-math-optimizations flag # Also, since gcc 5, -ffinite-math-only makes NaN and zero compare equal inside engine code but not inside QC, which causes error spam for seemingly valid QC code like if (x != 0) return 1 / x; +# bones_was_here: added -mno-avx because when compiling for (at least) haswell or skylake with gcc or clang, with both -O2 and -O3, AVX auto-vectorisation causes subtle bugs in Xonotic QC physics, and changes the hash generated by the CI pipeline. AVX2 seems to be OK. Also moved -fno-math-errno -fno-trapping-math to OPTIM_RELEASE as they're not CPU-specific. SDL_CONFIG?=sdl2-config SDLCONFIG_UNIXCFLAGS?=`$(SDL_CONFIG) --cflags` @@ -194,7 +195,8 @@ OPTIM_DEBUG=$(CPUOPTIMIZATIONS) #OPTIM_RELEASE=-O2 -fno-strict-aliasing -fno-math-errno -fno-trapping-math -fno-signaling-nans -fcx-limited-range -funroll-loops $(CPUOPTIMIZATIONS) #OPTIM_RELEASE=-O2 -fno-strict-aliasing -funroll-loops $(CPUOPTIMIZATIONS) #OPTIM_RELEASE=-O2 -fno-strict-aliasing $(CPUOPTIMIZATIONS) -OPTIM_RELEASE=-O3 -fno-strict-aliasing $(CPUOPTIMIZATIONS) +#OPTIM_RELEASE=-O3 -fno-strict-aliasing $(CPUOPTIMIZATIONS) +OPTIM_RELEASE=-O3 -fno-strict-aliasing -fno-math-errno -fno-trapping-math $(CPUOPTIMIZATIONS) # NOTE: *never* *ever* use the -ffast-math or -funsafe-math-optimizations flag # Also, since gcc 5, -ffinite-math-only makes NaN and zero compare equal inside engine code but not inside QC, which causes error spam for seemingly valid QC code like if (x != 0) return 1 / x; -- 2.39.2