Skip to content

Commit e3b023e

Browse files
committed
simplify translate_divrem generic params
1 parent 2493375 commit e3b023e

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

crates/wasmi/src/engine/translator/func2/mod.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -801,16 +801,19 @@ impl FuncTranslator {
801801
}
802802

803803
/// Translates integer division and remainder Wasm operators to Wasmi bytecode.
804-
fn translate_divrem<T, NonZero>(
804+
fn translate_divrem<T>(
805805
&mut self,
806806
make_instr: fn(result: Reg, lhs: Reg, rhs: Reg) -> Instruction,
807-
make_instr_imm16_rhs: fn(result: Reg, lhs: Reg, rhs: Const16<NonZero>) -> Instruction,
807+
make_instr_imm16_rhs: fn(
808+
result: Reg,
809+
lhs: Reg,
810+
rhs: Const16<<T as WasmInteger>::NonZero>,
811+
) -> Instruction,
808812
make_instr_imm16_lhs: fn(result: Reg, lhs: Const16<T>, rhs: Reg) -> Instruction,
809813
consteval: fn(T, T) -> Result<T, TrapCode>,
810814
) -> Result<(), Error>
811815
where
812816
T: WasmInteger,
813-
NonZero: Copy + TryFrom<T> + TryInto<Const16<NonZero>> + Into<UntypedVal>,
814817
{
815818
bail_unreachable!(self);
816819
match self.stack.pop2() {
@@ -830,7 +833,7 @@ impl FuncTranslator {
830833
(lhs, Operand::Immediate(rhs)) => {
831834
let lhs = self.layout.operand_to_reg(lhs)?;
832835
let rhs = T::from(rhs.val());
833-
let Some(non_zero_rhs) = NonZero::try_from(rhs).ok() else {
836+
let Some(non_zero_rhs) = <T as WasmInteger>::NonZero::try_from(rhs).ok() else {
834837
// Optimization: division by zero always traps
835838
return self.translate_trap(TrapCode::IntegerDivisionByZero);
836839
};

crates/wasmi/src/engine/translator/func2/visit.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ use crate::{
1313
Error,
1414
FuncType,
1515
};
16-
use core::num::NonZero;
1716
use wasmparser::VisitOperator;
1817

1918
macro_rules! impl_visit_operator {
@@ -616,7 +615,7 @@ impl<'a> VisitOperator<'a> for FuncTranslator {
616615
}
617616

618617
fn visit_i32_div_s(&mut self) -> Self::Output {
619-
self.translate_divrem::<i32, NonZero<i32>>(
618+
self.translate_divrem::<i32>(
620619
Instruction::i32_div_s,
621620
Instruction::i32_div_s_imm16_rhs,
622621
Instruction::i32_div_s_imm16_lhs,
@@ -625,7 +624,7 @@ impl<'a> VisitOperator<'a> for FuncTranslator {
625624
}
626625

627626
fn visit_i32_div_u(&mut self) -> Self::Output {
628-
self.translate_divrem::<u32, NonZero<u32>>(
627+
self.translate_divrem::<u32>(
629628
Instruction::i32_div_u,
630629
Instruction::i32_div_u_imm16_rhs,
631630
Instruction::i32_div_u_imm16_lhs,
@@ -634,7 +633,7 @@ impl<'a> VisitOperator<'a> for FuncTranslator {
634633
}
635634

636635
fn visit_i32_rem_s(&mut self) -> Self::Output {
637-
self.translate_divrem::<i32, NonZero<i32>>(
636+
self.translate_divrem::<i32>(
638637
Instruction::i32_rem_s,
639638
Instruction::i32_rem_s_imm16_rhs,
640639
Instruction::i32_rem_s_imm16_lhs,
@@ -643,7 +642,7 @@ impl<'a> VisitOperator<'a> for FuncTranslator {
643642
}
644643

645644
fn visit_i32_rem_u(&mut self) -> Self::Output {
646-
self.translate_divrem::<u32, NonZero<u32>>(
645+
self.translate_divrem::<u32>(
647646
Instruction::i32_rem_u,
648647
Instruction::i32_rem_u_imm16_rhs,
649648
Instruction::i32_rem_u_imm16_lhs,
@@ -728,7 +727,7 @@ impl<'a> VisitOperator<'a> for FuncTranslator {
728727
}
729728

730729
fn visit_i64_div_s(&mut self) -> Self::Output {
731-
self.translate_divrem::<i64, NonZero<i64>>(
730+
self.translate_divrem::<i64>(
732731
Instruction::i64_div_s,
733732
Instruction::i64_div_s_imm16_rhs,
734733
Instruction::i64_div_s_imm16_lhs,
@@ -737,7 +736,7 @@ impl<'a> VisitOperator<'a> for FuncTranslator {
737736
}
738737

739738
fn visit_i64_div_u(&mut self) -> Self::Output {
740-
self.translate_divrem::<u64, NonZero<u64>>(
739+
self.translate_divrem::<u64>(
741740
Instruction::i64_div_u,
742741
Instruction::i64_div_u_imm16_rhs,
743742
Instruction::i64_div_u_imm16_lhs,
@@ -746,7 +745,7 @@ impl<'a> VisitOperator<'a> for FuncTranslator {
746745
}
747746

748747
fn visit_i64_rem_s(&mut self) -> Self::Output {
749-
self.translate_divrem::<i64, NonZero<i64>>(
748+
self.translate_divrem::<i64>(
750749
Instruction::i64_rem_s,
751750
Instruction::i64_rem_s_imm16_rhs,
752751
Instruction::i64_rem_s_imm16_lhs,
@@ -755,7 +754,7 @@ impl<'a> VisitOperator<'a> for FuncTranslator {
755754
}
756755

757756
fn visit_i64_rem_u(&mut self) -> Self::Output {
758-
self.translate_divrem::<u64, NonZero<u64>>(
757+
self.translate_divrem::<u64>(
759758
Instruction::i64_rem_u,
760759
Instruction::i64_rem_u_imm16_rhs,
761760
Instruction::i64_rem_u_imm16_lhs,

0 commit comments

Comments
 (0)