https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88207
Uroš Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Target|i?86-*-*, x86_64-*-* |i?86-*-* Status|UNCONFIRMED |NEW Last reconfirmed| |2018-11-26 Ever confirmed|0 |1 --- Comment #1 from Uroš Bizjak <ubizjak at gmail dot com> --- It is due to r266385, reported at [1]: The PR22076 moves a value from mm0 via integer register to a volatile location: movq .LC1, %mm0 paddb .LC0, %mm0 movq %mm0, 16(%esp) movl 16(%esp), %eax movl 20(%esp), %edx movl %eax, (%esp) movl %edx, 4(%esp) movq (%esp), %mm0 addl $28, %esp where before the patch we had: movq .LC1, %mm0 paddb .LC0, %mm0 movq %mm0, 8(%esp) movq 8(%esp), %mm0 addl $20, %esp In PR81563 the compiler now saves the value on stack, while before the patch, call-saved register was allocated for a value that lives across the call. [1] https://gcc.gnu.org/ml/gcc-patches/2018-11/msg01975.html