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

            Bug ID: 64243
           Summary: Passing and returning structures with single member of
                    floating type via SSE registers is wrong on Windows
                    x86-64 ABI
           Product: gcc
           Version: 4.9.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: krzysztof.surdacki at gmail dot com

Two types of structures:

struct TestFloat { float x; };
struct TestDouble { double x; };

are passed and returned via SSE registers which is wrong in Windows x86-64 ABI.
According to Microsoft documentation:
http://msdn.microsoft.com/en-us/library/zthk2dkh.aspx
http://msdn.microsoft.com/en-us/library/7572ztz4.aspx
and code generated by MSVS2013 analysis, this kind of structures should be
passed via integer registers (RCX, RDX, R8, and R9) and returned in RAX
register.

Reply via email to