Lowering: Atomic ops can produce a value (dotnet/coreclr#19173)
* Lowering: Atomic ops can produce a value
dotnet/coreclr#18887 changed OperIsStore to include the atomic functions, but `Lowering::LowerArg()` and `Lowering::CheckCallArg()` assume that stores do not produce a value, so it doesn't correctly set the argument register (or build a `PUTARG_REG`) for the case where the result of an atomic op is passed to a call.
Fix this and add additional asserts.
Fix dotnet/coreclr#19171
Commit migrated from https://github.com/dotnet/coreclr/commit/
8b126cf6d62790a70ea15b6c4a35d8de3ddfd795