@@ -2956,30 +2956,122 @@ impl ExtendedOpVisitor for Interpreter<'_> {
2956
2956
ControlFlow :: Continue ( ( ) )
2957
2957
}
2958
2958
2959
+ fn vtrunc32x4 ( & mut self , dst : VReg , src : VReg ) -> ControlFlow < Done > {
2960
+ let mut a = self . state [ src] . get_f32x4 ( ) ;
2961
+ for elem in a. iter_mut ( ) {
2962
+ * elem = elem. wasm_trunc ( ) ;
2963
+ }
2964
+ self . state [ dst] . set_f32x4 ( a) ;
2965
+ ControlFlow :: Continue ( ( ) )
2966
+ }
2967
+
2968
+ fn vtrunc64x2 ( & mut self , dst : VReg , src : VReg ) -> ControlFlow < Done > {
2969
+ let mut a = self . state [ src] . get_f64x2 ( ) ;
2970
+ for elem in a. iter_mut ( ) {
2971
+ * elem = elem. wasm_trunc ( ) ;
2972
+ }
2973
+ self . state [ dst] . set_f64x2 ( a) ;
2974
+ ControlFlow :: Continue ( ( ) )
2975
+ }
2976
+
2959
2977
fn ffloor32 ( & mut self , dst : FReg , src : FReg ) -> ControlFlow < Done > {
2960
2978
let a = self . state [ src] . get_f32 ( ) ;
2961
2979
self . state [ dst] . set_f32 ( a. wasm_floor ( ) ) ;
2962
2980
ControlFlow :: Continue ( ( ) )
2963
2981
}
2964
2982
2983
+ fn vfloor32x4 ( & mut self , dst : VReg , src : VReg ) -> ControlFlow < Done > {
2984
+ let mut a = self . state [ src] . get_f32x4 ( ) ;
2985
+ for elem in a. iter_mut ( ) {
2986
+ * elem = elem. wasm_floor ( ) ;
2987
+ }
2988
+ self . state [ dst] . set_f32x4 ( a) ;
2989
+ ControlFlow :: Continue ( ( ) )
2990
+ }
2991
+
2992
+ fn vfloor64x2 ( & mut self , dst : VReg , src : VReg ) -> ControlFlow < Done > {
2993
+ let mut a = self . state [ src] . get_f64x2 ( ) ;
2994
+ for elem in a. iter_mut ( ) {
2995
+ * elem = elem. wasm_floor ( ) ;
2996
+ }
2997
+ self . state [ dst] . set_f64x2 ( a) ;
2998
+ ControlFlow :: Continue ( ( ) )
2999
+ }
3000
+
2965
3001
fn fceil32 ( & mut self , dst : FReg , src : FReg ) -> ControlFlow < Done > {
2966
3002
let a = self . state [ src] . get_f32 ( ) ;
2967
3003
self . state [ dst] . set_f32 ( a. wasm_ceil ( ) ) ;
2968
3004
ControlFlow :: Continue ( ( ) )
2969
3005
}
2970
3006
3007
+ fn vceil32x4 ( & mut self , dst : VReg , src : VReg ) -> ControlFlow < Done > {
3008
+ let mut a = self . state [ src] . get_f32x4 ( ) ;
3009
+ for elem in a. iter_mut ( ) {
3010
+ * elem = elem. wasm_ceil ( ) ;
3011
+ }
3012
+ self . state [ dst] . set_f32x4 ( a) ;
3013
+
3014
+ ControlFlow :: Continue ( ( ) )
3015
+ }
3016
+
3017
+ fn vceil64x2 ( & mut self , dst : VReg , src : VReg ) -> ControlFlow < Done > {
3018
+ let mut a = self . state [ src] . get_f64x2 ( ) ;
3019
+ for elem in a. iter_mut ( ) {
3020
+ * elem = elem. wasm_ceil ( ) ;
3021
+ }
3022
+ self . state [ dst] . set_f64x2 ( a) ;
3023
+
3024
+ ControlFlow :: Continue ( ( ) )
3025
+ }
3026
+
2971
3027
fn fnearest32 ( & mut self , dst : FReg , src : FReg ) -> ControlFlow < Done > {
2972
3028
let a = self . state [ src] . get_f32 ( ) ;
2973
3029
self . state [ dst] . set_f32 ( a. wasm_nearest ( ) ) ;
2974
3030
ControlFlow :: Continue ( ( ) )
2975
3031
}
2976
3032
3033
+ fn vnearest32x4 ( & mut self , dst : VReg , src : VReg ) -> ControlFlow < Done > {
3034
+ let mut a = self . state [ src] . get_f32x4 ( ) ;
3035
+ for elem in a. iter_mut ( ) {
3036
+ * elem = elem. wasm_nearest ( ) ;
3037
+ }
3038
+ self . state [ dst] . set_f32x4 ( a) ;
3039
+ ControlFlow :: Continue ( ( ) )
3040
+ }
3041
+
3042
+ fn vnearest64x2 ( & mut self , dst : VReg , src : VReg ) -> ControlFlow < Done > {
3043
+ let mut a = self . state [ src] . get_f64x2 ( ) ;
3044
+ for elem in a. iter_mut ( ) {
3045
+ * elem = elem. wasm_nearest ( ) ;
3046
+ }
3047
+ self . state [ dst] . set_f64x2 ( a) ;
3048
+ ControlFlow :: Continue ( ( ) )
3049
+ }
3050
+
2977
3051
fn fsqrt32 ( & mut self , dst : FReg , src : FReg ) -> ControlFlow < Done > {
2978
3052
let a = self . state [ src] . get_f32 ( ) ;
2979
3053
self . state [ dst] . set_f32 ( a. wasm_sqrt ( ) ) ;
2980
3054
ControlFlow :: Continue ( ( ) )
2981
3055
}
2982
3056
3057
+ fn vsqrt32x4 ( & mut self , dst : VReg , src : VReg ) -> ControlFlow < Done > {
3058
+ let mut a = self . state [ src] . get_f32x4 ( ) ;
3059
+ for elem in a. iter_mut ( ) {
3060
+ * elem = elem. wasm_sqrt ( ) ;
3061
+ }
3062
+ self . state [ dst] . set_f32x4 ( a) ;
3063
+ ControlFlow :: Continue ( ( ) )
3064
+ }
3065
+
3066
+ fn vsqrt64x2 ( & mut self , dst : VReg , src : VReg ) -> ControlFlow < Done > {
3067
+ let mut a = self . state [ src] . get_f64x2 ( ) ;
3068
+ for elem in a. iter_mut ( ) {
3069
+ * elem = elem. wasm_sqrt ( ) ;
3070
+ }
3071
+ self . state [ dst] . set_f64x2 ( a) ;
3072
+ ControlFlow :: Continue ( ( ) )
3073
+ }
3074
+
2983
3075
fn fneg32 ( & mut self , dst : FReg , src : FReg ) -> ControlFlow < Done > {
2984
3076
let a = self . state [ src] . get_f32 ( ) ;
2985
3077
self . state [ dst] . set_f32 ( -a) ;
0 commit comments