Un bon moyen (en 32-bit) pour se debarrasser des bizarreries du x87 c'est de compiler avec cette option -mfpmath=sse qui demande à gcc d'utiliser les instructions sse à la place du x87 et ses registres moyenageux de 80-bits. Jusque là tout va sauf que si on regarde les performances des fonctions transcendentales expf, sinf, tan, atan ( par exemple en compilant sse_mathfun_test.c avec les options -ffast-math -O3 -msse2 et -mfpmath=sse ou -mfpmath=387), eh bien on constate qu'elles sont devenues jusqu'à 2.5 fois plus lentes. Genre sur mon core 2, tan() executée avec le fpu x87 prend 119 cycles, alors que la version sse2 prend 298 cycles ! pas cool. Pour expf c'est un peu moins pire, on passe de 143 cycles à 203.

J'ai fait le test avec mingw-w64 sous windows, version 4.6.2 et 4.7.

(Coté visual c++ 2010, le runtime selectionne systematiquement la version sse2 à l'execution, mais elle est beaucoup plus rapide que celle de gcc: 146 cycles pour tan, 103 pour expf)