Skip to content

Support for return values split across floating point registers (AArch64) #8016

Open
@dt-12345

Description

@dt-12345

Is your feature request related to a problem? Please describe.
When returning small vectors of floating point values (1-4 components) by value, these are usually returned by being split across [s/d/q][0/1/2/3] registers. The current implementation only detects values returned in [s/d/q]0 as return values occasionally leading to the decompiler ignoring the parts of the function that affect the other components of the vector.

Describe the solution you'd like
Support for splitting float return values across multiple registers like with normal return values being able to be split across x0 and x1.

Describe alternatives you've considered
You can use custom storage to manually fix this, but it is a bit tedious to do this for all functions so built in support would be preferred.

Additional context
Here are some examples in Godbolt demonstrating this in gcc and clang.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions