[Bug c/86727] New: Struct argument in xmm0 register instead of rcx on Win64
bart at bartjanssens dot org
gcc-bugzilla@gcc.gnu.org
Sun Jul 29 21:27:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86727
Bug ID: 86727
Summary: Struct argument in xmm0 register instead of rcx on
Win64
Product: gcc
Version: 8.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: bart at bartjanssens dot org
Target Milestone: ---
Created attachment 44462
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44462&action=edit
Test case
When passing a struct containing a single value of type double, the argument is
fetched from the %xmm0 register, where the %rcx register should actually be
used on 64 bit Windows. Both mingw GCC 6.4.0 and 8.2.0 read the argument like
this:
movsd %xmm0, 16(%rbp)
Clang and MSVC both read correctly from %rcx.
Attached is a self-contained example, assembly dumped with
x86_64-w64-mingw32-gcc -S -o - -x c test.c
shows the problem. More discussion is also at:
https://github.com/JuliaLang/julia/issues/28325
When changing the field type to e.g. int or when adding extra fields to the
struct the problem goes away.
More information about the Gcc-bugs
mailing list