AArch64 NCG: possible clobbering in MO_S_Mul2
As discovered when reviewing !15619, the code generation for `MO_S_Mul2` on AArch64 suffers from possible clobbering
https://gitlab.haskell.org/ghc/ghc/-/blob/18fd0df60d827ec1c4c84aad2283570e7635222b/compiler/GHC/CmmToAsm/AArch64/CodeGen.hs?page=2#L1819
```hs
return $
code_x `appOL`
code_y `snocOL`
MUL (OpReg W64 lo) (OpReg W64 reg_a) (OpReg W64 reg_b) `snocOL`
SMULH (OpReg W64 hi) (OpReg W64 reg_a) (OpReg W64 reg_b) `snocOL`
-- Are all high bits equal to the sign bit of the low word?
-- nd = (hi == ASR(lo,width-1)) ? 1 : 0
CMP (OpReg W64 hi) (OpRegShift W64 lo SASR (widthInBits w - 1)) `snocOL`
CSET (OpReg W64 nd) NE
```
There is no guarantee that `lo` is definitely not the same register as `reg_a` or `reg_b`, so writing to `lo` with the `MUL` may clobber the contents of `reg_a`/`reg_b`.
I don't have a reproducer for the bug here at this time, but it seems obviously wrong to me.
issue