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

H.J. Lu <hjl.tools at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|FIXED                       |---

--- Comment #10 from H.J. Lu <hjl.tools at gmail dot com> ---
The bug isn't fixed:

[hjl@gnu-cfl-1 tmp]$ cat x.c
typedef struct
{
  float x;
} Float;

Float  __attribute__((ms_abi)) fn1(Float x, Float y)
{
  Float v;
  v.x = x.x + y.x;
  return v;
}
[hjl@gnu-cfl-1 tmp]$ gcc -S -O2 x.c
[hjl@gnu-cfl-1 tmp]$ cat x.s
        .file   "x.c"
        .text
        .p2align 4
        .globl  fn1
        .type   fn1, @function
fn1:
.LFB0:
        .cfi_startproc
        addss   %xmm1, %xmm0   <<<<< Wrong registers are used.
        movd    %xmm0, %eax
        ret
        .cfi_endproc
.LFE0:
        .size   fn1, .-fn1
        .ident  "GCC: (GNU) 9.2.1 20200123 (Red Hat 9.2.1-3)"
        .section        .note.GNU-stack,"",@progbits
[hjl@gnu-cfl-1 tmp]$ clang -S -O2 x.c
[hjl@gnu-cfl-1 tmp]$ cat x.s
        .text
        .file   "x.c"
        .globl  fn1                     # -- Begin function fn1
        .p2align        4, 0x90
        .type   fn1,@function
fn1:                                    # @fn1
        .cfi_startproc
# %bb.0:
        movd    %ecx, %xmm0
        movd    %edx, %xmm1
        addss   %xmm0, %xmm1
        movd    %xmm1, %eax
        retq
.Lfunc_end0:
        .size   fn1, .Lfunc_end0-fn1
        .cfi_endproc
                                        # -- End function

        .ident  "clang version 9.0.0 (Fedora 9.0.0-1.fc31)"
        .section        ".note.GNU-stack","",@progbits
        .addrsig
[hjl@gnu-cfl-1 tmp]$

Reply via email to