machinst x64: add packed moves for different vector types
This commit is contained in:
@@ -380,6 +380,8 @@ pub enum SseOpcode {
|
|||||||
Movaps,
|
Movaps,
|
||||||
Movapd,
|
Movapd,
|
||||||
Movd,
|
Movd,
|
||||||
|
Movdqa,
|
||||||
|
Movdqu,
|
||||||
Movq,
|
Movq,
|
||||||
Movss,
|
Movss,
|
||||||
Movsd,
|
Movsd,
|
||||||
@@ -487,6 +489,8 @@ impl SseOpcode {
|
|||||||
| SseOpcode::Movq
|
| SseOpcode::Movq
|
||||||
| SseOpcode::Movsd
|
| SseOpcode::Movsd
|
||||||
| SseOpcode::Movupd
|
| SseOpcode::Movupd
|
||||||
|
| SseOpcode::Movdqa
|
||||||
|
| SseOpcode::Movdqu
|
||||||
| SseOpcode::Mulpd
|
| SseOpcode::Mulpd
|
||||||
| SseOpcode::Mulsd
|
| SseOpcode::Mulsd
|
||||||
| SseOpcode::Orpd
|
| SseOpcode::Orpd
|
||||||
@@ -571,6 +575,8 @@ impl fmt::Debug for SseOpcode {
|
|||||||
SseOpcode::Movaps => "movaps",
|
SseOpcode::Movaps => "movaps",
|
||||||
SseOpcode::Movapd => "movapd",
|
SseOpcode::Movapd => "movapd",
|
||||||
SseOpcode::Movd => "movd",
|
SseOpcode::Movd => "movd",
|
||||||
|
SseOpcode::Movdqa => "movdqa",
|
||||||
|
SseOpcode::Movdqu => "movdqu",
|
||||||
SseOpcode::Movq => "movq",
|
SseOpcode::Movq => "movq",
|
||||||
SseOpcode::Movss => "movss",
|
SseOpcode::Movss => "movss",
|
||||||
SseOpcode::Movsd => "movsd",
|
SseOpcode::Movsd => "movsd",
|
||||||
|
|||||||
@@ -1596,8 +1596,12 @@ pub(crate) fn emit(
|
|||||||
let rex = RexFlags::clear_w();
|
let rex = RexFlags::clear_w();
|
||||||
|
|
||||||
let (prefix, opcode) = match op {
|
let (prefix, opcode) = match op {
|
||||||
|
SseOpcode::Cvtss2sd => (LegacyPrefix::_F3, 0x0F5A),
|
||||||
|
SseOpcode::Cvtsd2ss => (LegacyPrefix::_F2, 0x0F5A),
|
||||||
SseOpcode::Movaps => (LegacyPrefix::None, 0x0F28),
|
SseOpcode::Movaps => (LegacyPrefix::None, 0x0F28),
|
||||||
SseOpcode::Movapd => (LegacyPrefix::_66, 0x0F28),
|
SseOpcode::Movapd => (LegacyPrefix::_66, 0x0F28),
|
||||||
|
SseOpcode::Movdqa => (LegacyPrefix::_66, 0x0F6F),
|
||||||
|
SseOpcode::Movdqu => (LegacyPrefix::_F3, 0x0F6F),
|
||||||
SseOpcode::Movsd => (LegacyPrefix::_F2, 0x0F10),
|
SseOpcode::Movsd => (LegacyPrefix::_F2, 0x0F10),
|
||||||
SseOpcode::Movss => (LegacyPrefix::_F3, 0x0F10),
|
SseOpcode::Movss => (LegacyPrefix::_F3, 0x0F10),
|
||||||
SseOpcode::Movups => (LegacyPrefix::None, 0x0F10),
|
SseOpcode::Movups => (LegacyPrefix::None, 0x0F10),
|
||||||
@@ -1606,8 +1610,6 @@ pub(crate) fn emit(
|
|||||||
SseOpcode::Sqrtpd => (LegacyPrefix::_66, 0x0F51),
|
SseOpcode::Sqrtpd => (LegacyPrefix::_66, 0x0F51),
|
||||||
SseOpcode::Sqrtss => (LegacyPrefix::_F3, 0x0F51),
|
SseOpcode::Sqrtss => (LegacyPrefix::_F3, 0x0F51),
|
||||||
SseOpcode::Sqrtsd => (LegacyPrefix::_F2, 0x0F51),
|
SseOpcode::Sqrtsd => (LegacyPrefix::_F2, 0x0F51),
|
||||||
SseOpcode::Cvtss2sd => (LegacyPrefix::_F3, 0x0F5A),
|
|
||||||
SseOpcode::Cvtsd2ss => (LegacyPrefix::_F2, 0x0F5A),
|
|
||||||
_ => unimplemented!("Opcode {:?} not implemented", op),
|
_ => unimplemented!("Opcode {:?} not implemented", op),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1839,10 +1841,14 @@ pub(crate) fn emit(
|
|||||||
srcloc,
|
srcloc,
|
||||||
} => {
|
} => {
|
||||||
let (prefix, opcode) = match op {
|
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::Movss => (LegacyPrefix::_F3, 0x0F11),
|
||||||
SseOpcode::Movsd => (LegacyPrefix::_F2, 0x0F11),
|
SseOpcode::Movsd => (LegacyPrefix::_F2, 0x0F11),
|
||||||
SseOpcode::Movaps => (LegacyPrefix::None, 0x0F29),
|
|
||||||
SseOpcode::Movups => (LegacyPrefix::None, 0x0F11),
|
SseOpcode::Movups => (LegacyPrefix::None, 0x0F11),
|
||||||
|
SseOpcode::Movupd => (LegacyPrefix::_66, 0x0F11),
|
||||||
_ => unimplemented!("Opcode {:?} not implemented", op),
|
_ => unimplemented!("Opcode {:?} not implemented", op),
|
||||||
};
|
};
|
||||||
let dst = &dst.finalize(state);
|
let dst = &dst.finalize(state);
|
||||||
|
|||||||
Reference in New Issue
Block a user