Winch: fix atomic and/or/xor bug #10060
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.
This PR fixes atomic
and
/or
/xor
. The issue was that I was using the operand as a destination for theAtomicRmwSeq
, but it is a macro-instruction, and the operand ended up being overwritten. This was caught when I enabled theatomic.wast
spec tests in #10039 (comment).Investigating into the issue I realized that
AtomicRmwSeq
also had requirement for one of it's registers, but that didn't show up initially, because I got lucky, and the value was popped in the right register every time I tested.The fix is to pop-push the operand to compute the address, and then pass the codegen context to masm to allocate the registers.