Fix SIMD temp register interference (#58990)
authorgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Mon, 13 Sep 2021 14:41:06 +0000 (07:41 -0700)
committerGitHub <noreply@github.com>
Mon, 13 Sep 2021 14:41:06 +0000 (07:41 -0700)
commitd6a35f3c4fc2dc28c50bde665dbb811a91bc30fa
treebe12dc4afb2ae97ba39d7f436673b52fab965d27
parent71fe9fb8ecc11197ad8e7bee0a6c4317a667327c
Fix SIMD temp register interference (#58990)

On Windows/x86, if a call returns a SIMD8 in two registers
(eax, edx), and needs to be assembled and stored into a single
SIMD register, AND we don't have the SSE41 ABI available (because
the hardware doesn't support it, or we specifically disable it),
then we need a temporary register. In the failure case, the target
register and temporary register were the same, and then interfered
with each other. The fix is to force the temporary register to
be different from the target register.

Fixes #58899

Co-authored-by: Bruce Forstall <brucefo@microsoft.com>
src/coreclr/jit/codegenxarch.cpp
src/coreclr/jit/lsrabuild.cpp