https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103962
Bug ID: 103962 Summary: 'long double' to 'int' cast modifies rounding bits Product: gcc Version: 9.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: master_szumi at o2 dot pl Target Milestone: --- Target: powerpc Following code: $ cat main2.c #include <stdio.h> // #define FIX int main() { double a=54; double b=10; long double g=3; int i = 0; printf("%f\n", a/b); i=g; #ifdef FIX __asm__("mtfsb0 31\n\t"); #endif printf("%f\n", a/b); return 0; } Compiled with: /usr/bin/powerpc-e500v2-linux-gnu-gcc main2.c Prints: # ./a.out 5.400000 5.399999 IMO Rounding bit should be restored after 'cast' operation but they are not.