diff --git a/lib/compiler-singlepass/src/emitter_x64.rs b/lib/compiler-singlepass/src/emitter_x64.rs index 38a91689f1c..8a04a45c42d 100644 --- a/lib/compiler-singlepass/src/emitter_x64.rs +++ b/lib/compiler-singlepass/src/emitter_x64.rs @@ -909,11 +909,14 @@ macro_rules! sse_round_fn { |emitter: &mut AssemblerX64, precision: Precision, src1: XMM, src2: XMMOrMemory, dst: XMM| { match src2 { XMMOrMemory::XMM(x) => { - assert_eq!(src1, x); - move_src_to_dst(emitter, precision, src1, dst); - dynasm!(emitter ; $ins Rx((dst as u8)), Rx((dst as u8)), $mode) + if x != dst { + move_src_to_dst(emitter, precision, src1, dst); + } + dynasm!(emitter ; $ins Rx((x as u8)), Rx((dst as u8)), $mode) } - XMMOrMemory::Memory(..) => unreachable!(), + XMMOrMemory::Memory(base, disp) => { + dynasm!(emitter ; $ins Rx((dst as u8)), [Rq((base as u8)) + disp], $mode) + }, } } }