x64: Fill out more AVX instructions (#5849)
* x64: Fill out more AVX instructions This commit fills out more AVX instructions for SSE counterparts currently used. Many of these instructions do not benefit from the 3-operand form that AVX uses but instead benefit from being able to use `XmmMem` instead of `XmmMemAligned` which may be able to avoid some extra temporary registers in some cases. * Review comments
This commit is contained in:
@@ -151,7 +151,9 @@ impl Inst {
|
||||
| Inst::XmmRmRVex3 { op, .. }
|
||||
| Inst::XmmRmRImmVex { op, .. }
|
||||
| Inst::XmmRmRBlendVex { op, .. }
|
||||
| Inst::XmmVexPinsr { op, .. } => op.available_from(),
|
||||
| Inst::XmmVexPinsr { op, .. }
|
||||
| Inst::XmmUnaryRmRVex { op, .. }
|
||||
| Inst::XmmUnaryRmRImmVex { op, .. } => op.available_from(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -910,6 +912,20 @@ impl PrettyPrint for Inst {
|
||||
format!("{} ${}, {}, {}", ljustify(op.to_string()), imm, src, dst)
|
||||
}
|
||||
|
||||
Inst::XmmUnaryRmRVex { op, src, dst, .. } => {
|
||||
let dst = pretty_print_reg(dst.to_reg().to_reg(), 8, allocs);
|
||||
let src = src.pretty_print(8, allocs);
|
||||
format!("{} {}, {}", ljustify(op.to_string()), src, dst)
|
||||
}
|
||||
|
||||
Inst::XmmUnaryRmRImmVex {
|
||||
op, src, dst, imm, ..
|
||||
} => {
|
||||
let dst = pretty_print_reg(dst.to_reg().to_reg(), 8, allocs);
|
||||
let src = src.pretty_print(8, allocs);
|
||||
format!("{} ${imm}, {}, {}", ljustify(op.to_string()), src, dst)
|
||||
}
|
||||
|
||||
Inst::XmmUnaryRmREvex { op, src, dst, .. } => {
|
||||
let dst = pretty_print_reg(dst.to_reg().to_reg(), 8, allocs);
|
||||
let src = src.pretty_print(8, allocs);
|
||||
@@ -1887,7 +1903,10 @@ fn x64_get_operands<F: Fn(VReg) -> VReg>(inst: &Inst, collector: &mut OperandCol
|
||||
collector.reg_def(dst.to_writable_reg());
|
||||
src.get_operands(collector);
|
||||
}
|
||||
Inst::XmmUnaryRmREvex { src, dst, .. } | Inst::XmmUnaryRmRUnaligned { src, dst, .. } => {
|
||||
Inst::XmmUnaryRmREvex { src, dst, .. }
|
||||
| Inst::XmmUnaryRmRUnaligned { src, dst, .. }
|
||||
| Inst::XmmUnaryRmRVex { src, dst, .. }
|
||||
| Inst::XmmUnaryRmRImmVex { src, dst, .. } => {
|
||||
collector.reg_def(dst.to_writable_reg());
|
||||
src.get_operands(collector);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user