aarch64/x86_64 NCG miscompiles %i2f64 with subword operand
```cmm
#include "Cmm.h"
sfround8zh (W_ x) {
I8 b;
D_ f;
b = %lobits8(x);
f = %i2f64(b);
return (%f2w_bitcast(f));
}
```
```haskell
{-# LANGUAGE GHCForeignImportPrim, MagicHash, UnliftedFFITypes #-}
import GHC.Exts
import Numeric (showHex)
foreign import prim "sfround8zh" sfround8# :: Word# -> Word#
main :: IO ()
main = putStrLn ("0x" ++ showHex (W# (sfround8# 0xFF##)) "") -- expected 0xbff0000000000000 (-1.0)
```
on aarch64-linux, compile and run the above example with `-fllvm`, it produces `0xbff0000000000000`. without `-fllvm`, it produces `0x406fe00000000000`.
on x86_64-linux, with `-fllvm` it also produces `0xbff0000000000000`. without `-fllvm`, it fails at compile-time:
```
/tmp/ghc40878_tmp_0/ghc_tmp_4.s:7:2: error:
error: invalid instruction mnemonic 'cvtsi2sdb'
cvtsi2sdb %bl,%xmm0
^~~~~~~~~
|
7 | cvtsi2sdb %bl,%xmm0
| ^
`clang' failed in phase `Assembler'. (Exit code: 1)
```
issue