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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to fail|                            |14.1.0
      Known to work|                            |13.4.0

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
This is what is produced for x86_64 for me:
```
        salq    $32, %rsi
        movl    %edi, %edi
        orq     %rsi, %rdi
        jmp     f
```

This looks correct to me.


>On x86_64-pc-linux-gnu target, at least on linux, `g()` can just be `jmp f`

No, the struct is passed via one register on x86_64 while f is passed via 2 so
it needs the split like this.

Now on the other hand using long instead we get:
```
g:
        .cfi_startproc
        xchgq   %rdi, %rsi
        movq    %rsi, %rax
        movq    %rdi, %rsi
        movq    %rax, %rdi
        jmp     f
```

Reply via email to