@@ -152,12 +152,8 @@ impl<'store, const BUDGETED: bool> Executor<'store, BUDGETED> {
152152 LocalCopy64 ( from, to) => self . store . stack . values . local_set ( & self . cf , * to, self . store . stack . values . local_get :: < Value64 > ( & self . cf , * from) ) ,
153153 LocalCopy128 ( from, to) => self . store . stack . values . local_set ( & self . cf , * to, self . store . stack . values . local_get :: < Value128 > ( & self . cf , * from) ) ,
154154 LocalCopyRef ( from, to) => self . store . stack . values . local_set ( & self . cf , * to, self . store . stack . values . local_get :: < ValueRef > ( & self . cf , * from) ) ,
155- I32AddLocals ( a, b) => self . store . stack . values . push (
156- self . store . stack . values . local_get :: < i32 > ( & self . cf , * a) . wrapping_add ( self . store . stack . values . local_get :: < i32 > ( & self . cf , * b) ) ,
157- ) ?,
158- I64AddLocals ( a, b) => self . store . stack . values . push (
159- self . store . stack . values . local_get :: < i64 > ( & self . cf , * a) . wrapping_add ( self . store . stack . values . local_get :: < i64 > ( & self . cf , * b) ) ,
160- ) ?,
155+ I32AddLocals ( a, b) => self . store . stack . values . push ( self . store . stack . values . local_get :: < i32 > ( & self . cf , * a) . wrapping_add ( self . store . stack . values . local_get :: < i32 > ( & self . cf , * b) ) ) ?,
156+ I64AddLocals ( a, b) => self . store . stack . values . push ( self . store . stack . values . local_get :: < i64 > ( & self . cf , * a) . wrapping_add ( self . store . stack . values . local_get :: < i64 > ( & self . cf , * b) ) ) ?,
161157 I32AddConst ( c) => stack_op ! ( unary i32 , |v| v. wrapping_add( * c) ) ,
162158 I64AddConst ( c) => stack_op ! ( unary i64 , |v| v. wrapping_add( * c) ) ,
163159 I32StoreLocalLocal ( m, addr_local, value_local) => {
@@ -394,6 +390,7 @@ impl<'store, const BUDGETED: bool> Executor<'store, BUDGETED> {
394390 V128Bitselect => stack_op ! ( ternary Value128 , |v1, v2, c| Value128 :: v128_bitselect( v1, v2, c) ) ,
395391 V128AnyTrue => stack_op ! ( unary Value128 => i32 , |v| v. v128_any_true( ) as i32 ) ,
396392 I8x16Swizzle => stack_op ! ( binary Value128 , |a, s| a. i8x16_swizzle( s) ) ,
393+ I8x16RelaxedSwizzle => stack_op ! ( binary Value128 , |a, s| a. i8x16_relaxed_swizzle( s) ) ,
397394 V128Load ( arg) => self . exec_mem_load :: < Value128 , 16 , _ > ( arg. mem_addr ( ) , arg. offset ( ) , |v| v) ?,
398395 V128Load8x8S ( arg) => self . exec_mem_load :: < u64 , 8 , Value128 > ( arg. mem_addr ( ) , arg. offset ( ) , |v| Value128 :: v128_load8x8_s ( v. to_le_bytes ( ) ) ) ?,
399396 V128Load8x8U ( arg) => self . exec_mem_load :: < u64 , 8 , Value128 > ( arg. mem_addr ( ) , arg. offset ( ) , |v| Value128 :: v128_load8x8_u ( v. to_le_bytes ( ) ) ) ?,
@@ -582,6 +579,13 @@ impl<'store, const BUDGETED: bool> Executor<'store, BUDGETED> {
582579 I8x16Shuffle ( idx) => { let idx = self . func . data . v128_constants [ * idx as usize ] . to_le_bytes ( ) ; stack_op ! ( binary Value128 , |a, b| Value128 :: i8x16_shuffle( a, b, idx) ) }
583580 I16x8Q15MulrSatS => stack_op ! ( binary Value128 , |a, b| a. i16x8_q15mulr_sat_s( b) ) ,
584581 I32x4DotI16x8S => stack_op ! ( binary Value128 , |a, b| a. i32x4_dot_i16x8_s( b) ) ,
582+ I8x16RelaxedLaneselect => stack_op ! ( ternary Value128 , |v1, v2, c| Value128 :: i8x16_relaxed_laneselect( v1, v2, c) ) ,
583+ I16x8RelaxedLaneselect => stack_op ! ( ternary Value128 , |v1, v2, c| Value128 :: i16x8_relaxed_laneselect( v1, v2, c) ) ,
584+ I32x4RelaxedLaneselect => stack_op ! ( ternary Value128 , |v1, v2, c| Value128 :: i32x4_relaxed_laneselect( v1, v2, c) ) ,
585+ I64x2RelaxedLaneselect => stack_op ! ( ternary Value128 , |v1, v2, c| Value128 :: i64x2_relaxed_laneselect( v1, v2, c) ) ,
586+ I16x8RelaxedQ15mulrS => stack_op ! ( binary Value128 , |a, b| a. i16x8_relaxed_q15mulr_s( b) ) ,
587+ I16x8RelaxedDotI8x16I7x16S => stack_op ! ( binary Value128 , |a, b| a. i16x8_relaxed_dot_i8x16_i7x16_s( b) ) ,
588+ I32x4RelaxedDotI8x16I7x16AddS => stack_op ! ( ternary Value128 , |a, b, c| a. i32x4_relaxed_dot_i8x16_i7x16_add_s( b, c) ) ,
585589 F32x4Ceil => stack_op ! ( simd_unary f32x4_ceil) ,
586590 F64x2Ceil => stack_op ! ( simd_unary f64x2_ceil) ,
587591 F32x4Floor => stack_op ! ( simd_unary f32x4_floor) ,
@@ -612,6 +616,14 @@ impl<'store, const BUDGETED: bool> Executor<'store, BUDGETED> {
612616 F32x4PMax => stack_op ! ( simd_binary f32x4_pmax) ,
613617 F64x2PMin => stack_op ! ( simd_binary f64x2_pmin) ,
614618 F64x2PMax => stack_op ! ( simd_binary f64x2_pmax) ,
619+ F32x4RelaxedMadd => stack_op ! ( ternary Value128 , |a, b, c| a. f32x4_relaxed_madd( b, c) ) ,
620+ F32x4RelaxedNmadd => stack_op ! ( ternary Value128 , |a, b, c| a. f32x4_relaxed_nmadd( b, c) ) ,
621+ F64x2RelaxedMadd => stack_op ! ( ternary Value128 , |a, b, c| a. f64x2_relaxed_madd( b, c) ) ,
622+ F64x2RelaxedNmadd => stack_op ! ( ternary Value128 , |a, b, c| a. f64x2_relaxed_nmadd( b, c) ) ,
623+ F32x4RelaxedMin => stack_op ! ( binary Value128 , |a, b| a. f32x4_relaxed_min( b) ) ,
624+ F32x4RelaxedMax => stack_op ! ( binary Value128 , |a, b| a. f32x4_relaxed_max( b) ) ,
625+ F64x2RelaxedMin => stack_op ! ( binary Value128 , |a, b| a. f64x2_relaxed_min( b) ) ,
626+ F64x2RelaxedMax => stack_op ! ( binary Value128 , |a, b| a. f64x2_relaxed_max( b) ) ,
615627 I32x4TruncSatF32x4S => stack_op ! ( unary Value128 , |v| v. i32x4_trunc_sat_f32x4_s( ) ) ,
616628 I32x4TruncSatF32x4U => stack_op ! ( unary Value128 , |v| v. i32x4_trunc_sat_f32x4_u( ) ) ,
617629 F32x4ConvertI32x4S => stack_op ! ( unary Value128 , |v| v. f32x4_convert_i32x4_s( ) ) ,
@@ -622,6 +634,10 @@ impl<'store, const BUDGETED: bool> Executor<'store, BUDGETED> {
622634 F64x2PromoteLowF32x4 => stack_op ! ( unary Value128 , |v| v. f64x2_promote_low_f32x4( ) ) ,
623635 I32x4TruncSatF64x2SZero => stack_op ! ( unary Value128 , |v| v. i32x4_trunc_sat_f64x2_s_zero( ) ) ,
624636 I32x4TruncSatF64x2UZero => stack_op ! ( unary Value128 , |v| v. i32x4_trunc_sat_f64x2_u_zero( ) ) ,
637+ I32x4RelaxedTruncF32x4S => stack_op ! ( unary Value128 , |v| v. i32x4_relaxed_trunc_f32x4_s( ) ) ,
638+ I32x4RelaxedTruncF32x4U => stack_op ! ( unary Value128 , |v| v. i32x4_relaxed_trunc_f32x4_u( ) ) ,
639+ I32x4RelaxedTruncF64x2SZero => stack_op ! ( unary Value128 , |v| v. i32x4_relaxed_trunc_f64x2_s_zero( ) ) ,
640+ I32x4RelaxedTruncF64x2UZero => stack_op ! ( unary Value128 , |v| v. i32x4_relaxed_trunc_f64x2_u_zero( ) ) ,
625641 } ;
626642
627643 self . cf . incr_instr_ptr ( ) ;
0 commit comments