Skip to content

Commit 5cbe843

Browse files
authoredApr 16, 2020
Swap out -ffast-math for a safe subset of optimization flags (#9682)
It caused more trouble than its worth. fixes #3943, fixes #5330
1 parent e8ac5a3 commit 5cbe843

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed
 

‎src/CMakeLists.txt

+6-1
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,11 @@ else()
713713
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWIN32_LEAN_AND_MEAN")
714714
endif()
715715

716+
# Use a safe subset of flags to speed up math calculations:
717+
# - we don't need errno or math exceptions
718+
# - we don't deal with Inf/NaN or signed zero
719+
set(MATH_FLAGS "-fno-math-errno -fno-trapping-math -ffinite-math-only -fno-signed-zeros")
720+
716721
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -Wall -pipe -funroll-loops")
717722
if(CMAKE_SYSTEM_NAME MATCHES "(Darwin|BSD|DragonFly)")
718723
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os")
@@ -723,7 +728,7 @@ else()
723728
AND CMAKE_CXX_COMPILER_VERSION MATCHES "^9\\.")
724729
# Clang 9 has broken -ffast-math on glibc
725730
else()
726-
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ffast-math")
731+
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MATH_FLAGS}")
727732
endif()
728733
endif(CMAKE_SYSTEM_NAME MATCHES "(Darwin|BSD|DragonFly)")
729734
set(CMAKE_CXX_FLAGS_SEMIDEBUG "-g -O1 -Wall -Wabi ${WARNING_FLAGS} ${OTHER_FLAGS}")

‎src/collision.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
3232
#include "util/timetaker.h"
3333
#include "profiler.h"
3434

35+
#ifdef __FAST_MATH__
36+
#warning "-ffast-math is known to cause bugs in collision code, do not use!"
37+
#endif
3538

3639
struct NearbyCollisionInfo {
3740
NearbyCollisionInfo(bool is_ul, bool is_obj, int bouncy,

1 commit comments

Comments
 (1)

oilboi commented on Apr 17, 2020

@oilboi
Contributor

Works great

Please sign in to comment.