@@ -12,10 +12,10 @@ use std::mem::transmute;
12
12
use super :: { lanes, simd_type} ;
13
13
use crate :: safe:: { Isa , Mask , MaskOps , Simd , SimdFloatOps , SimdIntOps , SimdOps } ;
14
14
15
- simd_type ! ( F32x4 , v128, f32 , I32x4 , Wasm32Isa ) ;
16
- simd_type ! ( I32x4 , v128, i32 , I32x4 , Wasm32Isa ) ;
17
- simd_type ! ( I16x8 , v128, i16 , I16x8 , Wasm32Isa ) ;
18
- simd_type ! ( I8x16 , v128, i8 , I8x16 , Wasm32Isa ) ;
15
+ simd_type ! ( F32x4 , v128, f32 , M32 , Wasm32Isa ) ;
16
+ simd_type ! ( I32x4 , v128, i32 , M32 , Wasm32Isa ) ;
17
+ simd_type ! ( I16x8 , v128, i16 , M16 , Wasm32Isa ) ;
18
+ simd_type ! ( I8x16 , v128, i8 , M8 , Wasm32Isa ) ;
19
19
20
20
#[ derive( Copy , Clone ) ]
21
21
pub struct Wasm32Isa {
@@ -119,7 +119,7 @@ macro_rules! simd_ops_common {
119
119
}
120
120
121
121
unsafe impl SimdOps < F32x4 > for Wasm32Isa {
122
- simd_ops_common ! ( F32x4 , I32x4 , i32 ) ;
122
+ simd_ops_common ! ( F32x4 , M32 , i32 ) ;
123
123
124
124
#[ inline]
125
125
fn add ( self , x : F32x4 , y : F32x4 ) -> F32x4 {
@@ -149,28 +149,28 @@ unsafe impl SimdOps<F32x4> for Wasm32Isa {
149
149
}
150
150
151
151
#[ inline]
152
- fn lt ( self , x : F32x4 , y : F32x4 ) -> I32x4 {
153
- I32x4 ( f32x4_lt ( x. 0 , y. 0 ) )
152
+ fn lt ( self , x : F32x4 , y : F32x4 ) -> M32 {
153
+ M32 ( f32x4_lt ( x. 0 , y. 0 ) )
154
154
}
155
155
156
156
#[ inline]
157
- fn le ( self , x : F32x4 , y : F32x4 ) -> I32x4 {
158
- I32x4 ( f32x4_le ( x. 0 , y. 0 ) )
157
+ fn le ( self , x : F32x4 , y : F32x4 ) -> M32 {
158
+ M32 ( f32x4_le ( x. 0 , y. 0 ) )
159
159
}
160
160
161
161
#[ inline]
162
- fn eq ( self , x : F32x4 , y : F32x4 ) -> I32x4 {
163
- I32x4 ( f32x4_eq ( x. 0 , y. 0 ) )
162
+ fn eq ( self , x : F32x4 , y : F32x4 ) -> M32 {
163
+ M32 ( f32x4_eq ( x. 0 , y. 0 ) )
164
164
}
165
165
166
166
#[ inline]
167
- fn ge ( self , x : F32x4 , y : F32x4 ) -> I32x4 {
168
- I32x4 ( f32x4_ge ( x. 0 , y. 0 ) )
167
+ fn ge ( self , x : F32x4 , y : F32x4 ) -> M32 {
168
+ M32 ( f32x4_ge ( x. 0 , y. 0 ) )
169
169
}
170
170
171
171
#[ inline]
172
- fn gt ( self , x : F32x4 , y : F32x4 ) -> I32x4 {
173
- I32x4 ( f32x4_gt ( x. 0 , y. 0 ) )
172
+ fn gt ( self , x : F32x4 , y : F32x4 ) -> M32 {
173
+ M32 ( f32x4_gt ( x. 0 , y. 0 ) )
174
174
}
175
175
176
176
#[ inline]
@@ -231,7 +231,7 @@ impl SimdFloatOps<F32x4> for Wasm32Isa {
231
231
}
232
232
233
233
unsafe impl SimdOps < I32x4 > for Wasm32Isa {
234
- simd_ops_common ! ( I32x4 , I32x4 , i32 ) ;
234
+ simd_ops_common ! ( I32x4 , M32 , i32 ) ;
235
235
236
236
#[ inline]
237
237
fn add ( self , x : I32x4 , y : I32x4 ) -> I32x4 {
@@ -254,18 +254,18 @@ unsafe impl SimdOps<I32x4> for Wasm32Isa {
254
254
}
255
255
256
256
#[ inline]
257
- fn eq ( self , x : I32x4 , y : I32x4 ) -> I32x4 {
258
- I32x4 ( i32x4_eq ( x. 0 , y. 0 ) )
257
+ fn eq ( self , x : I32x4 , y : I32x4 ) -> M32 {
258
+ M32 ( i32x4_eq ( x. 0 , y. 0 ) )
259
259
}
260
260
261
261
#[ inline]
262
- fn ge ( self , x : I32x4 , y : I32x4 ) -> I32x4 {
263
- I32x4 ( i32x4_ge ( x. 0 , y. 0 ) )
262
+ fn ge ( self , x : I32x4 , y : I32x4 ) -> M32 {
263
+ M32 ( i32x4_ge ( x. 0 , y. 0 ) )
264
264
}
265
265
266
266
#[ inline]
267
- fn gt ( self , x : I32x4 , y : I32x4 ) -> I32x4 {
268
- I32x4 ( i32x4_gt ( x. 0 , y. 0 ) )
267
+ fn gt ( self , x : I32x4 , y : I32x4 ) -> M32 {
268
+ M32 ( i32x4_gt ( x. 0 , y. 0 ) )
269
269
}
270
270
}
271
271
@@ -282,7 +282,7 @@ impl SimdIntOps<I32x4> for Wasm32Isa {
282
282
}
283
283
284
284
unsafe impl SimdOps < I16x8 > for Wasm32Isa {
285
- simd_ops_common ! ( I16x8 , I16x8 , i16 ) ;
285
+ simd_ops_common ! ( I16x8 , M16 , i16 ) ;
286
286
287
287
#[ inline]
288
288
fn add ( self , x : I16x8 , y : I16x8 ) -> I16x8 {
@@ -305,18 +305,18 @@ unsafe impl SimdOps<I16x8> for Wasm32Isa {
305
305
}
306
306
307
307
#[ inline]
308
- fn eq ( self , x : I16x8 , y : I16x8 ) -> I16x8 {
309
- I16x8 ( i16x8_eq ( x. 0 , y. 0 ) )
308
+ fn eq ( self , x : I16x8 , y : I16x8 ) -> M16 {
309
+ M16 ( i16x8_eq ( x. 0 , y. 0 ) )
310
310
}
311
311
312
312
#[ inline]
313
- fn ge ( self , x : I16x8 , y : I16x8 ) -> I16x8 {
314
- I16x8 ( i16x8_ge ( x. 0 , y. 0 ) )
313
+ fn ge ( self , x : I16x8 , y : I16x8 ) -> M16 {
314
+ M16 ( i16x8_ge ( x. 0 , y. 0 ) )
315
315
}
316
316
317
317
#[ inline]
318
- fn gt ( self , x : I16x8 , y : I16x8 ) -> I16x8 {
319
- I16x8 ( i16x8_gt ( x. 0 , y. 0 ) )
318
+ fn gt ( self , x : I16x8 , y : I16x8 ) -> M16 {
319
+ M16 ( i16x8_gt ( x. 0 , y. 0 ) )
320
320
}
321
321
}
322
322
@@ -333,7 +333,7 @@ impl SimdIntOps<I16x8> for Wasm32Isa {
333
333
}
334
334
335
335
unsafe impl SimdOps < I8x16 > for Wasm32Isa {
336
- simd_ops_common ! ( I8x16 , I8x16 , i8 ) ;
336
+ simd_ops_common ! ( I8x16 , M8 , i8 ) ;
337
337
338
338
#[ inline]
339
339
fn add ( self , x : I8x16 , y : I8x16 ) -> I8x16 {
@@ -365,18 +365,18 @@ unsafe impl SimdOps<I8x16> for Wasm32Isa {
365
365
}
366
366
367
367
#[ inline]
368
- fn eq ( self , x : I8x16 , y : I8x16 ) -> I8x16 {
369
- I8x16 ( i8x16_eq ( x. 0 , y. 0 ) )
368
+ fn eq ( self , x : I8x16 , y : I8x16 ) -> M8 {
369
+ M8 ( i8x16_eq ( x. 0 , y. 0 ) )
370
370
}
371
371
372
372
#[ inline]
373
- fn ge ( self , x : I8x16 , y : I8x16 ) -> I8x16 {
374
- I8x16 ( i8x16_ge ( x. 0 , y. 0 ) )
373
+ fn ge ( self , x : I8x16 , y : I8x16 ) -> M8 {
374
+ M8 ( i8x16_ge ( x. 0 , y. 0 ) )
375
375
}
376
376
377
377
#[ inline]
378
- fn gt ( self , x : I8x16 , y : I8x16 ) -> I8x16 {
379
- I8x16 ( i8x16_gt ( x. 0 , y. 0 ) )
378
+ fn gt ( self , x : I8x16 , y : I8x16 ) -> M8 {
379
+ M8 ( i8x16_gt ( x. 0 , y. 0 ) )
380
380
}
381
381
}
382
382
@@ -394,6 +394,10 @@ impl SimdIntOps<I8x16> for Wasm32Isa {
394
394
395
395
macro_rules! mask_type {
396
396
( $mask: ident, $elem: ty, $len: expr) => {
397
+ #[ derive( Copy , Clone , Debug ) ]
398
+ #[ repr( transparent) ]
399
+ pub struct $mask( v128) ;
400
+
397
401
impl Mask for $mask {
398
402
type Array = [ bool ; $len] ;
399
403
@@ -413,6 +417,7 @@ macro_rules! mask_type {
413
417
} ;
414
418
}
415
419
416
- mask_type ! ( I32x4 , i32 , 4 ) ;
417
- mask_type ! ( I16x8 , i16 , 8 ) ;
418
- mask_type ! ( I8x16 , i8 , 16 ) ;
420
+ // Define mask vector types. `Mn` is a mask for a vector with n-bit lanes.
421
+ mask_type ! ( M32 , i32 , 4 ) ;
422
+ mask_type ! ( M16 , i16 , 8 ) ;
423
+ mask_type ! ( M8 , i8 , 16 ) ;
0 commit comments