Fix argument passing of structs with padding on x86 #108867
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When passing a struct by value on x86, we copy its value to the stack. Sometimes this is done one field at a time, if the struct has been promoted. If there is padding between the fields (to create appropriate field alignment), then that padding needs to be zeroed.
The bug is a case where there is padding between an earlier
doublefield and a later, larger, SIMD field. We push 4-byte zeros but the code thinks it is pushing 8-byte zeros. The fix is simply to correctly calculate the number of zeros to push.Fixes #106140