[machinst x64]: add integer comparisons
This commit is contained in:
@@ -344,6 +344,7 @@ pub(crate) enum InstructionSet {
|
||||
SSE2,
|
||||
SSSE3,
|
||||
SSE41,
|
||||
SSE42,
|
||||
}
|
||||
|
||||
/// Some SSE operations requiring 2 operands r/m and r.
|
||||
@@ -414,6 +415,14 @@ pub enum SseOpcode {
|
||||
Paddusw,
|
||||
Pavgb,
|
||||
Pavgw,
|
||||
Pcmpeqb,
|
||||
Pcmpeqw,
|
||||
Pcmpeqd,
|
||||
Pcmpeqq,
|
||||
Pcmpgtb,
|
||||
Pcmpgtw,
|
||||
Pcmpgtd,
|
||||
Pcmpgtq,
|
||||
Pextrb,
|
||||
Pextrw,
|
||||
Pextrd,
|
||||
@@ -543,6 +552,12 @@ impl SseOpcode {
|
||||
| SseOpcode::Paddusw
|
||||
| SseOpcode::Pavgb
|
||||
| SseOpcode::Pavgw
|
||||
| SseOpcode::Pcmpeqb
|
||||
| SseOpcode::Pcmpeqw
|
||||
| SseOpcode::Pcmpeqd
|
||||
| SseOpcode::Pcmpgtb
|
||||
| SseOpcode::Pcmpgtw
|
||||
| SseOpcode::Pcmpgtd
|
||||
| SseOpcode::Pextrw
|
||||
| SseOpcode::Pinsrw
|
||||
| SseOpcode::Pmaxsw
|
||||
@@ -575,6 +590,7 @@ impl SseOpcode {
|
||||
SseOpcode::Pabsb | SseOpcode::Pabsw | SseOpcode::Pabsd | SseOpcode::Pshufb => SSSE3,
|
||||
|
||||
SseOpcode::Insertps
|
||||
| SseOpcode::Pcmpeqq
|
||||
| SseOpcode::Pextrb
|
||||
| SseOpcode::Pextrd
|
||||
| SseOpcode::Pinsrb
|
||||
@@ -590,6 +606,8 @@ impl SseOpcode {
|
||||
| SseOpcode::Pmulld
|
||||
| SseOpcode::Roundss
|
||||
| SseOpcode::Roundsd => SSE41,
|
||||
|
||||
SseOpcode::Pcmpgtq => SSE42,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -670,6 +688,14 @@ impl fmt::Debug for SseOpcode {
|
||||
SseOpcode::Paddusw => "paddusw",
|
||||
SseOpcode::Pavgb => "pavgb",
|
||||
SseOpcode::Pavgw => "pavgw",
|
||||
SseOpcode::Pcmpeqb => "pcmpeqb",
|
||||
SseOpcode::Pcmpeqw => "pcmpeqw",
|
||||
SseOpcode::Pcmpeqd => "pcmpeqd",
|
||||
SseOpcode::Pcmpeqq => "pcmpeqq",
|
||||
SseOpcode::Pcmpgtb => "pcmpgtb",
|
||||
SseOpcode::Pcmpgtw => "pcmpgtw",
|
||||
SseOpcode::Pcmpgtd => "pcmpgtd",
|
||||
SseOpcode::Pcmpgtq => "pcmpgtq",
|
||||
SseOpcode::Pextrb => "pextrb",
|
||||
SseOpcode::Pextrw => "pextrw",
|
||||
SseOpcode::Pextrd => "pextrd",
|
||||
|
||||
@@ -1786,6 +1786,14 @@ pub(crate) fn emit(
|
||||
SseOpcode::Paddusw => (LegacyPrefixes::_66, 0x0FDD, 2),
|
||||
SseOpcode::Pavgb => (LegacyPrefixes::_66, 0x0FE0, 2),
|
||||
SseOpcode::Pavgw => (LegacyPrefixes::_66, 0x0FE3, 2),
|
||||
SseOpcode::Pcmpeqb => (LegacyPrefixes::_66, 0x0F74, 2),
|
||||
SseOpcode::Pcmpeqw => (LegacyPrefixes::_66, 0x0F75, 2),
|
||||
SseOpcode::Pcmpeqd => (LegacyPrefixes::_66, 0x0F76, 2),
|
||||
SseOpcode::Pcmpeqq => (LegacyPrefixes::_66, 0x0F3829, 3),
|
||||
SseOpcode::Pcmpgtb => (LegacyPrefixes::_66, 0x0F64, 2),
|
||||
SseOpcode::Pcmpgtw => (LegacyPrefixes::_66, 0x0F65, 2),
|
||||
SseOpcode::Pcmpgtd => (LegacyPrefixes::_66, 0x0F66, 2),
|
||||
SseOpcode::Pcmpgtq => (LegacyPrefixes::_66, 0x0F3837, 3),
|
||||
SseOpcode::Pmaxsb => (LegacyPrefixes::_66, 0x0F383C, 3),
|
||||
SseOpcode::Pmaxsw => (LegacyPrefixes::_66, 0x0FEE, 2),
|
||||
SseOpcode::Pmaxsd => (LegacyPrefixes::_66, 0x0F383D, 3),
|
||||
|
||||
@@ -1125,7 +1125,11 @@ impl Inst {
|
||||
src.to_reg() == Some(dst.to_reg())
|
||||
&& (*op == SseOpcode::Xorps
|
||||
|| *op == SseOpcode::Xorpd
|
||||
|| *op == SseOpcode::Pxor)
|
||||
|| *op == SseOpcode::Pxor
|
||||
|| *op == SseOpcode::Pcmpeqb
|
||||
|| *op == SseOpcode::Pcmpeqw
|
||||
|| *op == SseOpcode::Pcmpeqd
|
||||
|| *op == SseOpcode::Pcmpeqq)
|
||||
}
|
||||
|
||||
Self::XmmRmRImm {
|
||||
|
||||
Reference in New Issue
Block a user