Bug 85667 - (x86_64) ms_abi rules aren't followed when returning short structs with float values

Liu Hao lh_mouse@126.com
Wed Sep 19 09:09:00 GMT 2018


在 2018/9/19 16:52, lokesh janghel 写道:
> Hi,
> 
> I am starting to looking into this issue.
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85667#c0
> 

> We did some analysis about that issue and found that the problem occurs may
> be in the code generation phase in GCC.
> ABI says that struct type uses the integer register  (like clang )or memory
> to return not the  SSE registers.
> 
> Before we go ahead and fix this issue and we would like to know the
> community views/comments on the same.
> 


This happens on not only x64, but x86 too:

```
typedef struct
{
   float x;
} Float;

#ifdef _MSC_VER
#  define MSABI
#else
#  define MSABI __attribute__((ms_abi))
#endif

Float MSABI fn1()
{
   Float v;
   v.x = 3.145;
   return v;
}
```


```
E:\Desktop>cl /nologo /c /O2 /Fo:test-cl.obj test.c && objdump 
-dMintel-mneomic test-cl.obj

test-cl.obj:     file format pe-i386


Disassembly of section .text$mn:

00000000 <_fn1>:
    0:   51                      push   ecx
    1:   c7 04 24 ae 47 49 40    mov    DWORD PTR [esp],0x404947ae
    8:   8b 04 24                mov    eax,DWORD PTR [esp]
    b:   59                      pop    ecx
    c:   c3                      ret

E:\Desktop>gcc -c -O2 -o test-gcc.o test.c && objdump -dMintel-mneomic 
test-gcc.o

test-gcc.o:     file format pe-i386


Disassembly of section .text:

00000000 <_fn1>:
    0:   d9 05 00 00 00 00       fld    DWORD PTR ds:0x0
    6:   c3                      ret
    7:   90                      nop

E:\Desktop>
```


-- 
Best regards,
LH_Mouse



More information about the Gcc mailing list