Date: Tue, 3 Apr 2012 14:21:11 +0300 From: Andrey Simonenko <simon@comsys.ntu-kpi.kiev.ua> To: freebsd-current@freebsd.org Subject: -ffast-math in Ports and wrong generated code Message-ID: <20120403112111.GA39616@pm513-1.comsys.ntu-kpi.kiev.ua>
next in thread | raw e-mail | index | archive | help
Hello, I use one port from the Ports Collection, that works with FP. Having reinstalled it (its version was not changed) I noticed that it started to work incorrectly. After debugging and disassembling its code I found out that the -ffast-math option used for building was the result of wrongly generated code (I did not specify this option in /etc/make.conf). At least finite() function call was eliminated from the result Assembler code when -ffast-math option is used, tested on 9.0-STABLE and 10.0-CURRENT. Example test source code and generated code under 9.0-STABLE on amd64 by gcc from the base system: ----------------------------- #include <math.h> #include <stdio.h> void check_finite(double x) { printf("%d\n", finite(x)); } ----------------------------- % gcc -Wall -O2 -S finite.c ----------------------------- check_finite: .LFB3: subq $8, %rsp .LCFI0: call finite <-- call to finite() movl $.LC0, %edi movl %eax, %esi addq $8, %rsp xorl %eax, %eax jmp printf .LFE3: .size check_finite, .-check_finite ----------------------------- % gcc -Wall -O2 -ffast-math -S finite.c ----------------------------- check_finite: .LFB3: xorl %esi, %esi <-- fake result from finite() movl $.LC0, %edi xorl %eax, %eax jmp printf .LFE3: .size check_finite, .-check_finite ----------------------------- Can somebody comment this?
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120403112111.GA39616>