diff --git a/cranelift/codegen/src/isa/x64/inst/args.rs b/cranelift/codegen/src/isa/x64/inst/args.rs index 600381496f..6b13b5283e 100644 --- a/cranelift/codegen/src/isa/x64/inst/args.rs +++ b/cranelift/codegen/src/isa/x64/inst/args.rs @@ -380,6 +380,8 @@ pub enum SseOpcode { Movaps, Movapd, Movd, + Movdqa, + Movdqu, Movq, Movss, Movsd, @@ -487,6 +489,8 @@ impl SseOpcode { | SseOpcode::Movq | SseOpcode::Movsd | SseOpcode::Movupd + | SseOpcode::Movdqa + | SseOpcode::Movdqu | SseOpcode::Mulpd | SseOpcode::Mulsd | SseOpcode::Orpd @@ -571,6 +575,8 @@ impl fmt::Debug for SseOpcode { SseOpcode::Movaps => "movaps", SseOpcode::Movapd => "movapd", SseOpcode::Movd => "movd", + SseOpcode::Movdqa => "movdqa", + SseOpcode::Movdqu => "movdqu", SseOpcode::Movq => "movq", SseOpcode::Movss => "movss", SseOpcode::Movsd => "movsd", diff --git a/cranelift/codegen/src/isa/x64/inst/emit.rs b/cranelift/codegen/src/isa/x64/inst/emit.rs index 6118284674..f2633bb1db 100644 --- a/cranelift/codegen/src/isa/x64/inst/emit.rs +++ b/cranelift/codegen/src/isa/x64/inst/emit.rs @@ -1596,8 +1596,12 @@ pub(crate) fn emit( let rex = RexFlags::clear_w(); let (prefix, opcode) = match op { + SseOpcode::Cvtss2sd => (LegacyPrefix::_F3, 0x0F5A), + SseOpcode::Cvtsd2ss => (LegacyPrefix::_F2, 0x0F5A), SseOpcode::Movaps => (LegacyPrefix::None, 0x0F28), SseOpcode::Movapd => (LegacyPrefix::_66, 0x0F28), + SseOpcode::Movdqa => (LegacyPrefix::_66, 0x0F6F), + SseOpcode::Movdqu => (LegacyPrefix::_F3, 0x0F6F), SseOpcode::Movsd => (LegacyPrefix::_F2, 0x0F10), SseOpcode::Movss => (LegacyPrefix::_F3, 0x0F10), SseOpcode::Movups => (LegacyPrefix::None, 0x0F10), @@ -1606,8 +1610,6 @@ pub(crate) fn emit( SseOpcode::Sqrtpd => (LegacyPrefix::_66, 0x0F51), SseOpcode::Sqrtss => (LegacyPrefix::_F3, 0x0F51), SseOpcode::Sqrtsd => (LegacyPrefix::_F2, 0x0F51), - SseOpcode::Cvtss2sd => (LegacyPrefix::_F3, 0x0F5A), - SseOpcode::Cvtsd2ss => (LegacyPrefix::_F2, 0x0F5A), _ => unimplemented!("Opcode {:?} not implemented", op), }; @@ -1839,10 +1841,14 @@ pub(crate) fn emit( srcloc, } => { let (prefix, opcode) = match op { + SseOpcode::Movaps => (LegacyPrefix::None, 0x0F29), + SseOpcode::Movapd => (LegacyPrefix::_66, 0x0F29), + SseOpcode::Movdqa => (LegacyPrefix::_66, 0x0F7F), + SseOpcode::Movdqu => (LegacyPrefix::_F3, 0x0F7F), SseOpcode::Movss => (LegacyPrefix::_F3, 0x0F11), SseOpcode::Movsd => (LegacyPrefix::_F2, 0x0F11), - SseOpcode::Movaps => (LegacyPrefix::None, 0x0F29), SseOpcode::Movups => (LegacyPrefix::None, 0x0F11), + SseOpcode::Movupd => (LegacyPrefix::_66, 0x0F11), _ => unimplemented!("Opcode {:?} not implemented", op), }; let dst = &dst.finalize(state);