Use `push` for 8/12 byte struct args on x86 (#65387)
* Refactor struct PUTARG_STK codegen
Two changes:
1) Outline cases for GC pointers from "genPutStructArgStk" into
their own functions. Helps with readability, will be used in
the substative portion of the change.
2) Do not use "Kind::Push" for a case of a struct less than 16
bytes in size, that does not have GC pointers, on x86. With
this, we will now always call "genStructPutArgUnroll" for
the "Unroll" kind. This means "genAdjustStackForPutArgStk"
has to special-case that. This will go away in the final
version of the change.
No diffs on x86 or Unix-x64 (the only two affected platforms).
* Remove the LSRA quirk
We're not using XMMs on the "push" path.
* Use "push" for structs less than 16 bytes in size
It is smaller and a little faster than using an XMM
register to first load and then store the struct.
* Add an assert to genStructPutArgPush