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

--- Comment #3 from Boris Staletic <boris.staletic at protonmail dot com> ---
>>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:

You're right, of course. I apparently pasted the wrong version of the file in
the opening comment. It definitely should have been a `long`.

In my original test case, the struct looked like this:

```
struct span {
        int* p;
        unsigned long long size;
};
```

But two longs also work.

> aarch64 produces good code for the long case.

Yes, but ARM32 puts the arguments of f() on the stack, just to immediately load
them from the stack.

If wanted/needed, I can open a different bug report for ARM32.

Reply via email to