x64: Remove conditional SseOpcode::uses_src1 (#5842)
This is a follow-up to comments in #5795 to remove some cruft in the x64 instruction model to ensure that the shape of an `Inst` reflects what's going to happen in regalloc and encoding. This accessor was used to handle `round*`, `pextr*`, and `pshufb` instructions. The `round*` ones had already moved to the appropriate `XmmUnary*` variant and `pshufb` was additionally moved over to that variant as well. The `pextr*` instructions got a new `Inst` variant and additionally had their constructors slightly modified to no longer require the type as input. The encoding for these instructions now automatically handles the various type-related operands through a new `SseOpcode::Pextrq` operand to represent 64-bit movements.
This commit is contained in:
@@ -999,6 +999,7 @@ pub enum SseOpcode {
|
||||
Pextrb,
|
||||
Pextrw,
|
||||
Pextrd,
|
||||
Pextrq,
|
||||
Pinsrb,
|
||||
Pinsrw,
|
||||
Pinsrd,
|
||||
@@ -1237,6 +1238,7 @@ impl SseOpcode {
|
||||
| SseOpcode::Pcmpeqq
|
||||
| SseOpcode::Pextrb
|
||||
| SseOpcode::Pextrd
|
||||
| SseOpcode::Pextrq
|
||||
| SseOpcode::Pinsrb
|
||||
| SseOpcode::Pinsrd
|
||||
| SseOpcode::Pmaxsb
|
||||
@@ -1278,22 +1280,6 @@ impl SseOpcode {
|
||||
_ => 8,
|
||||
}
|
||||
}
|
||||
|
||||
/// Does an XmmRmmRImm with this opcode use src1? FIXME: split
|
||||
/// into separate instructions.
|
||||
pub(crate) fn uses_src1(&self) -> bool {
|
||||
match self {
|
||||
SseOpcode::Pextrb => false,
|
||||
SseOpcode::Pextrw => false,
|
||||
SseOpcode::Pextrd => false,
|
||||
SseOpcode::Pshufd => false,
|
||||
SseOpcode::Roundss => false,
|
||||
SseOpcode::Roundsd => false,
|
||||
SseOpcode::Roundps => false,
|
||||
SseOpcode::Roundpd => false,
|
||||
_ => true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Debug for SseOpcode {
|
||||
@@ -1393,6 +1379,7 @@ impl fmt::Debug for SseOpcode {
|
||||
SseOpcode::Pextrb => "pextrb",
|
||||
SseOpcode::Pextrw => "pextrw",
|
||||
SseOpcode::Pextrd => "pextrd",
|
||||
SseOpcode::Pextrq => "pextrq",
|
||||
SseOpcode::Pinsrb => "pinsrb",
|
||||
SseOpcode::Pinsrw => "pinsrw",
|
||||
SseOpcode::Pinsrd => "pinsrd",
|
||||
|
||||
Reference in New Issue
Block a user