@@ -3007,6 +3007,19 @@ impl ExtendedOpVisitor for Interpreter<'_> {
30073007 ControlFlow :: Continue ( ( ) )
30083008 }
30093009
3010+ fn vdivf64x2 ( & mut self , operands : BinaryOperands < VReg > ) -> ControlFlow < Done > {
3011+ let a = self . state [ operands. src1 ] . get_f64x2 ( ) ;
3012+ let b = self . state [ operands. src2 ] . get_f64x2 ( ) ;
3013+ let mut result = [ 0.0f64 ; 2 ] ;
3014+
3015+ for i in 0 ..2 {
3016+ result[ i] = a[ i] / b[ i] ;
3017+ }
3018+
3019+ self . state [ operands. dst ] . set_f64x2 ( result) ;
3020+ ControlFlow :: Continue ( ( ) )
3021+ }
3022+
30103023 fn fmaximum32 ( & mut self , operands : BinaryOperands < FReg > ) -> ControlFlow < Done > {
30113024 let a = self . state [ operands. src1 ] . get_f32 ( ) ;
30123025 let b = self . state [ operands. src2 ] . get_f32 ( ) ;
@@ -3900,6 +3913,16 @@ impl ExtendedOpVisitor for Interpreter<'_> {
39003913 ControlFlow :: Continue ( ( ) )
39013914 }
39023915
3916+ fn vsubf64x2 ( & mut self , operands : BinaryOperands < VReg > ) -> ControlFlow < Done > {
3917+ let mut a = self . state [ operands. src1 ] . get_f64x2 ( ) ;
3918+ let b = self . state [ operands. src2 ] . get_f64x2 ( ) ;
3919+ for ( a, b) in a. iter_mut ( ) . zip ( b) {
3920+ * a = * a - b;
3921+ }
3922+ self . state [ operands. dst ] . set_f64x2 ( a) ;
3923+ ControlFlow :: Continue ( ( ) )
3924+ }
3925+
39033926 fn vmuli8x16 ( & mut self , operands : BinaryOperands < VReg > ) -> ControlFlow < Done > {
39043927 let mut a = self . state [ operands. src1 ] . get_i8x16 ( ) ;
39053928 let b = self . state [ operands. src2 ] . get_i8x16 ( ) ;
@@ -3940,6 +3963,16 @@ impl ExtendedOpVisitor for Interpreter<'_> {
39403963 ControlFlow :: Continue ( ( ) )
39413964 }
39423965
3966+ fn vmulf64x2 ( & mut self , operands : BinaryOperands < VReg > ) -> ControlFlow < Done > {
3967+ let mut a = self . state [ operands. src1 ] . get_f64x2 ( ) ;
3968+ let b = self . state [ operands. src2 ] . get_f64x2 ( ) ;
3969+ for ( a, b) in a. iter_mut ( ) . zip ( b) {
3970+ * a = * a * b;
3971+ }
3972+ self . state [ operands. dst ] . set_f64x2 ( a) ;
3973+ ControlFlow :: Continue ( ( ) )
3974+ }
3975+
39433976 fn vqmulrsi16x8 ( & mut self , operands : BinaryOperands < VReg > ) -> ControlFlow < Done > {
39443977 let mut a = self . state [ operands. src1 ] . get_i16x8 ( ) ;
39453978 let b = self . state [ operands. src2 ] . get_i16x8 ( ) ;
@@ -4367,6 +4400,12 @@ impl ExtendedOpVisitor for Interpreter<'_> {
43674400 ControlFlow :: Continue ( ( ) )
43684401 }
43694402
4403+ fn vnegf64x2 ( & mut self , dst : VReg , src : VReg ) -> ControlFlow < Done > {
4404+ let a = self . state [ src] . get_f64x2 ( ) ;
4405+ self . state [ dst] . set_f64x2 ( a. map ( |i| -i) ) ;
4406+ ControlFlow :: Continue ( ( ) )
4407+ }
4408+
43704409 fn vmin8x16_s ( & mut self , operands : BinaryOperands < VReg > ) -> ControlFlow < Done > {
43714410 let mut a = self . state [ operands. src1 ] . get_i8x16 ( ) ;
43724411 let b = self . state [ operands. src2 ] . get_i8x16 ( ) ;
0 commit comments