Skip to content

Commit a40e374

Browse files
authored
Fix bug in v128.replace_lane execution (#1444)
fix bug in replace_lane execution
1 parent be99123 commit a40e374

File tree

1 file changed

+8
-7
lines changed
  • crates/wasmi/src/engine/executor/instrs

1 file changed

+8
-7
lines changed

crates/wasmi/src/engine/executor/instrs/simd.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -223,37 +223,37 @@ impl Executor<'_> {
223223
lane: ImmLaneIdx16,
224224
value: i8,
225225
) {
226-
self.execute_replace_lane_impl(result, input, lane, value, simd::i8x16_replace_lane)
226+
self.execute_replace_lane_impl(result, input, lane, value, 1, simd::i8x16_replace_lane)
227227
}
228228

229229
/// Executes an [`Instruction::I16x8ReplaceLaneImm`] instruction.
230230
pub fn execute_i16x8_replace_lane_imm(&mut self, result: Reg, input: Reg, lane: ImmLaneIdx8) {
231231
let value = self.fetch_const32_as::<i32>() as i16;
232-
self.execute_replace_lane_impl(result, input, lane, value, simd::i16x8_replace_lane)
232+
self.execute_replace_lane_impl(result, input, lane, value, 2, simd::i16x8_replace_lane)
233233
}
234234

235235
/// Executes an [`Instruction::I32x4ReplaceLaneImm`] instruction.
236236
pub fn execute_i32x4_replace_lane_imm(&mut self, result: Reg, input: Reg, lane: ImmLaneIdx4) {
237237
let value = self.fetch_const32_as::<i32>();
238-
self.execute_replace_lane_impl(result, input, lane, value, simd::i32x4_replace_lane)
238+
self.execute_replace_lane_impl(result, input, lane, value, 2, simd::i32x4_replace_lane)
239239
}
240240

241241
/// Executes an [`Instruction::I64x2ReplaceLaneImm32`] instruction.
242242
pub fn execute_i64x2_replace_lane_imm32(&mut self, result: Reg, input: Reg, lane: ImmLaneIdx2) {
243243
let value = self.fetch_i64const32();
244-
self.execute_replace_lane_impl(result, input, lane, value, simd::i64x2_replace_lane)
244+
self.execute_replace_lane_impl(result, input, lane, value, 2, simd::i64x2_replace_lane)
245245
}
246246

247247
/// Executes an [`Instruction::F32x4ReplaceLaneImm`] instruction.
248248
pub fn execute_f32x4_replace_lane_imm(&mut self, result: Reg, input: Reg, lane: ImmLaneIdx4) {
249249
let value = self.fetch_const32_as::<f32>();
250-
self.execute_replace_lane_impl(result, input, lane, value, simd::f32x4_replace_lane)
250+
self.execute_replace_lane_impl(result, input, lane, value, 2, simd::f32x4_replace_lane)
251251
}
252252

253253
/// Executes an [`Instruction::F64x2ReplaceLaneImm32`] instruction.
254254
pub fn execute_f64x2_replace_lane_imm32(&mut self, result: Reg, input: Reg, lane: ImmLaneIdx2) {
255255
let value = self.fetch_f64const32();
256-
self.execute_replace_lane_impl(result, input, lane, value, simd::f64x2_replace_lane)
256+
self.execute_replace_lane_impl(result, input, lane, value, 2, simd::f64x2_replace_lane)
257257
}
258258

259259
/// Generically execute a SIMD replace lane instruction.
@@ -263,11 +263,12 @@ impl Executor<'_> {
263263
input: Reg,
264264
lane: LaneType,
265265
value: T,
266+
delta: usize,
266267
eval: fn(V128, LaneType, T) -> V128,
267268
) {
268269
let input = self.get_register_as::<V128>(input);
269270
self.set_register_as::<V128>(result, eval(input, lane, value));
270-
self.next_instr_at(2);
271+
self.next_instr_at(delta);
271272
}
272273

273274
impl_unary_executors! {

0 commit comments

Comments
 (0)