x64: Lower fcvt_to_{u,s}int{,_sat} in ISLE (#4704)
https://github.com/bytecodealliance/wasmtime/pull/4704
This commit is contained in:
@@ -408,58 +408,6 @@ impl Inst {
|
||||
Inst::XmmCmpRmR { op, src, dst }
|
||||
}
|
||||
|
||||
pub(crate) fn cvt_float_to_sint_seq(
|
||||
src_size: OperandSize,
|
||||
dst_size: OperandSize,
|
||||
is_saturating: bool,
|
||||
src: Writable<Reg>,
|
||||
dst: Writable<Reg>,
|
||||
tmp_gpr: Writable<Reg>,
|
||||
tmp_xmm: Writable<Reg>,
|
||||
) -> Inst {
|
||||
debug_assert!(src_size.is_one_of(&[OperandSize::Size32, OperandSize::Size64]));
|
||||
debug_assert!(dst_size.is_one_of(&[OperandSize::Size32, OperandSize::Size64]));
|
||||
debug_assert!(src.to_reg().class() == RegClass::Float);
|
||||
debug_assert!(tmp_xmm.to_reg().class() == RegClass::Float);
|
||||
debug_assert!(tmp_gpr.to_reg().class() == RegClass::Int);
|
||||
debug_assert!(dst.to_reg().class() == RegClass::Int);
|
||||
Inst::CvtFloatToSintSeq {
|
||||
src_size,
|
||||
dst_size,
|
||||
is_saturating,
|
||||
src: WritableXmm::from_writable_reg(src).unwrap(),
|
||||
dst: WritableGpr::from_writable_reg(dst).unwrap(),
|
||||
tmp_gpr: WritableGpr::from_writable_reg(tmp_gpr).unwrap(),
|
||||
tmp_xmm: WritableXmm::from_writable_reg(tmp_xmm).unwrap(),
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn cvt_float_to_uint_seq(
|
||||
src_size: OperandSize,
|
||||
dst_size: OperandSize,
|
||||
is_saturating: bool,
|
||||
src: Writable<Reg>,
|
||||
dst: Writable<Reg>,
|
||||
tmp_gpr: Writable<Reg>,
|
||||
tmp_xmm: Writable<Reg>,
|
||||
) -> Inst {
|
||||
debug_assert!(src_size.is_one_of(&[OperandSize::Size32, OperandSize::Size64]));
|
||||
debug_assert!(dst_size.is_one_of(&[OperandSize::Size32, OperandSize::Size64]));
|
||||
debug_assert!(src.to_reg().class() == RegClass::Float);
|
||||
debug_assert!(tmp_xmm.to_reg().class() == RegClass::Float);
|
||||
debug_assert!(tmp_gpr.to_reg().class() == RegClass::Int);
|
||||
debug_assert!(dst.to_reg().class() == RegClass::Int);
|
||||
Inst::CvtFloatToUintSeq {
|
||||
src_size,
|
||||
dst_size,
|
||||
is_saturating,
|
||||
src: WritableXmm::from_writable_reg(src).unwrap(),
|
||||
dst: WritableGpr::from_writable_reg(dst).unwrap(),
|
||||
tmp_gpr: WritableGpr::from_writable_reg(tmp_gpr).unwrap(),
|
||||
tmp_xmm: WritableXmm::from_writable_reg(tmp_xmm).unwrap(),
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub(crate) fn xmm_min_max_seq(
|
||||
size: OperandSize,
|
||||
@@ -1257,7 +1205,7 @@ impl PrettyPrint for Inst {
|
||||
dst_size,
|
||||
tmp_xmm,
|
||||
tmp_gpr,
|
||||
..
|
||||
is_saturating,
|
||||
} => {
|
||||
let src = pretty_print_reg(src.to_reg().to_reg(), src_size.to_bytes(), allocs);
|
||||
let dst = pretty_print_reg(dst.to_reg().to_reg(), dst_size.to_bytes(), allocs);
|
||||
@@ -1266,9 +1214,10 @@ impl PrettyPrint for Inst {
|
||||
format!(
|
||||
"{} {}, {}, {}, {}",
|
||||
ljustify(format!(
|
||||
"cvt_float{}_to_sint{}_seq",
|
||||
"cvt_float{}_to_sint{}{}_seq",
|
||||
src_size.to_bits(),
|
||||
dst_size.to_bits()
|
||||
dst_size.to_bits(),
|
||||
if *is_saturating { "_sat" } else { "" },
|
||||
)),
|
||||
src,
|
||||
dst,
|
||||
@@ -1284,7 +1233,7 @@ impl PrettyPrint for Inst {
|
||||
dst_size,
|
||||
tmp_gpr,
|
||||
tmp_xmm,
|
||||
..
|
||||
is_saturating,
|
||||
} => {
|
||||
let src = pretty_print_reg(src.to_reg().to_reg(), src_size.to_bytes(), allocs);
|
||||
let dst = pretty_print_reg(dst.to_reg().to_reg(), dst_size.to_bytes(), allocs);
|
||||
@@ -1293,9 +1242,10 @@ impl PrettyPrint for Inst {
|
||||
format!(
|
||||
"{} {}, {}, {}, {}",
|
||||
ljustify(format!(
|
||||
"cvt_float{}_to_uint{}_seq",
|
||||
"cvt_float{}_to_uint{}{}_seq",
|
||||
src_size.to_bits(),
|
||||
dst_size.to_bits()
|
||||
dst_size.to_bits(),
|
||||
if *is_saturating { "_sat" } else { "" },
|
||||
)),
|
||||
src,
|
||||
dst,
|
||||
|
||||
Reference in New Issue
Block a user