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?Received on Tue Apr 03 2012 - 09:21:15 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:25 UTC