https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94556
--- Comment #5 from H.J. Lu <hjl.tools at gmail dot com> --- The code looks like: vmovq %xmm2, %r15 vmovq %xmm3, %rbp .LEHB0: call pthread_exit .LEHE0: .L15: movl %eax, %ebx .L14: vmovq %rbp, %xmm0 movl $4, %edi vzeroupper call _Z11check_magicid 101 vmovq %xmm3, %rbp (gdb) next 103 call pthread_exit (gdb) p/x $rbp $3 = 0x3f853f3c88fc5280 (gdb) next 106 movl %eax, %ebx (gdb) p/x $rbp $4 = 0x88fc5280 <<<<< Only lower 32-bits are restored. (gdb)