This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug regression/78982] New: __builtin_lrintf() not an cvtss2si/vcvtss2si but cvttss2si/vcvttss2si since GCC 6.xx


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78982

            Bug ID: 78982
           Summary: __builtin_lrintf() not an cvtss2si/vcvtss2si but
                    cvttss2si/vcvttss2si since GCC 6.xx
           Product: gcc
           Version: 6.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: regression
          Assignee: unassigned at gcc dot gnu.org
          Reporter: anty_order at tlen dot pl
  Target Milestone: ---

It looks starting from GCC 6 bug reported and fixed earlier

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48139

reappeared. 
Solution given in mentioned bug (adding -fno-math-errno or -ffast-math) works
as expected in all GCC versions below 6.x (tested with 4.8.x, 4.9.x, 5.x).

example code:

#include <iostream>
#include <tgmath.h>  

int main(int argc, char **argv)
{
  float someFloat = 10*argc;
  long someInt = lrintf (someFloat);
  std::cout << someInt << std::endl;
}

compile options:
-O2 -msse -ffast-math

same for -O3 and -mavx

up to GCC 5.4

        lea     eax, [rdi+rdi*4]
        pxor    xmm0, xmm0
        sub     rsp, 8
        mov     edi, OFFSET FLAT:std::cout
        add     eax, eax
        cvtsi2ss        xmm0, eax
        cvtss2si        rsi, xmm0

since GCC 6 (6.1-6.3 and 7)

        lea     eax, [rdi+rdi*4]
        pxor    xmm0, xmm0
        sub     rsp, 8
        mov     edi, OFFSET FLAT:std::cout
        add     eax, eax
        cvtsi2ss        xmm0, eax
        cvttss2si       rsi, xmm0

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]