windows/Makefile: Fix float exact int formatting on 32-bit mingw.
When compiler optimizations are enabled on the mingw version of gcc, we are getting failing tests because of rounding issues, for example: print(float("1e24")) would print 9.999999999999999e+23 instead of 1e+24 It turns out special compiler options are needed to get GCC to use the SSE instruction set instead of the 387 coprocessor (which uses 80-bit precision internall). Signed-off-by: David Lechner <david@pybricks.com>
This commit is contained in:
parent
ac8e7f7b67
commit
23342eff90
@ -86,6 +86,15 @@ ifneq ($(FROZEN_MANIFEST),)
|
|||||||
CFLAGS += -DMPZ_DIG_SIZE=16
|
CFLAGS += -DMPZ_DIG_SIZE=16
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(shell $(CC) -dumpmachine),i686-w64-mingw32)
|
||||||
|
# GCC disables the SSE instruction set by default on i366 targets and we have
|
||||||
|
# to specify all three of these options to enable it.
|
||||||
|
# https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html (see -mfpmath=unit section)
|
||||||
|
# Enabling the SSE instruction set is necessary to get correct rounding of floating points.
|
||||||
|
# https://lemire.me/blog/2020/06/26/gcc-not-nearest
|
||||||
|
CFLAGS += -msse -mfpmath=sse -march=pentium4
|
||||||
|
endif
|
||||||
|
|
||||||
CXXFLAGS += $(filter-out -std=gnu99,$(CFLAGS))
|
CXXFLAGS += $(filter-out -std=gnu99,$(CFLAGS))
|
||||||
|
|
||||||
include $(TOP)/py/mkrules.mk
|
include $(TOP)/py/mkrules.mk
|
||||||
|
Loading…
Reference in New Issue
Block a user