@@ -3007,6 +3007,19 @@ impl ExtendedOpVisitor for Interpreter<'_> {
3007
3007
ControlFlow :: Continue ( ( ) )
3008
3008
}
3009
3009
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
+
3010
3023
fn fmaximum32 ( & mut self , operands : BinaryOperands < FReg > ) -> ControlFlow < Done > {
3011
3024
let a = self . state [ operands. src1 ] . get_f32 ( ) ;
3012
3025
let b = self . state [ operands. src2 ] . get_f32 ( ) ;
@@ -3900,6 +3913,16 @@ impl ExtendedOpVisitor for Interpreter<'_> {
3900
3913
ControlFlow :: Continue ( ( ) )
3901
3914
}
3902
3915
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
+
3903
3926
fn vmuli8x16 ( & mut self , operands : BinaryOperands < VReg > ) -> ControlFlow < Done > {
3904
3927
let mut a = self . state [ operands. src1 ] . get_i8x16 ( ) ;
3905
3928
let b = self . state [ operands. src2 ] . get_i8x16 ( ) ;
@@ -3940,6 +3963,16 @@ impl ExtendedOpVisitor for Interpreter<'_> {
3940
3963
ControlFlow :: Continue ( ( ) )
3941
3964
}
3942
3965
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
+
3943
3976
fn vqmulrsi16x8 ( & mut self , operands : BinaryOperands < VReg > ) -> ControlFlow < Done > {
3944
3977
let mut a = self . state [ operands. src1 ] . get_i16x8 ( ) ;
3945
3978
let b = self . state [ operands. src2 ] . get_i16x8 ( ) ;
@@ -4367,6 +4400,12 @@ impl ExtendedOpVisitor for Interpreter<'_> {
4367
4400
ControlFlow :: Continue ( ( ) )
4368
4401
}
4369
4402
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
+
4370
4409
fn vmin8x16_s ( & mut self , operands : BinaryOperands < VReg > ) -> ControlFlow < Done > {
4371
4410
let mut a = self . state [ operands. src1 ] . get_i8x16 ( ) ;
4372
4411
let b = self . state [ operands. src2 ] . get_i8x16 ( ) ;
0 commit comments