@@ -20,7 +20,7 @@ macro_rules! interpretations {
20
20
#[ doc = concat!( "Conversion from " , stringify!( $ty) , " vectors of size " , stringify!( $m) , "to bit vectors of size " , stringify!( $n) ) ]
21
21
pub fn [ < from_ $name >] ( iv: $name) -> BitVec <$n> {
22
22
let vec: Vec <$ty> = iv. as_vec( ) ;
23
- Self :: from_slice( & vec[ ..] , <$ty>:: bits( ) as u64 )
23
+ Self :: from_slice( & vec[ ..] , <$ty>:: bits( ) as u32 )
24
24
}
25
25
#[ doc = concat!( "Conversion from bit vectors of size " , stringify!( $n) , " to " , stringify!( $ty) , " vectors of size " , stringify!( $m) ) ]
26
26
pub fn [ < to_ $name >] ( bv: BitVec <$n>) -> $name {
@@ -72,7 +72,7 @@ interpretations!(32; i8x4 [i8; 4], u8x4 [u8; 4]);
72
72
///
73
73
/// `idx` must be in-bounds of the vector, ie. idx < N
74
74
75
- pub fn simd_insert < const N : u64 , T : Copy > ( x : FunArray < N , T > , idx : u64 , val : T ) -> FunArray < N , T > {
75
+ pub fn simd_insert < const N : u32 , T : Copy > ( x : FunArray < N , T > , idx : u32 , val : T ) -> FunArray < N , T > {
76
76
FunArray :: from_fn ( |i| if i == idx { val } else { x[ i] } )
77
77
}
78
78
@@ -81,61 +81,61 @@ pub fn simd_insert<const N: u64, T: Copy>(x: FunArray<N, T>, idx: u64, val: T) -
81
81
/// # Safety
82
82
///
83
83
/// `idx` must be in-bounds of the vector, ie. idx < N
84
- pub fn simd_extract < const N : u64 , T : Clone > ( x : FunArray < N , T > , idx : u64 ) -> T {
84
+ pub fn simd_extract < const N : u32 , T : Clone > ( x : FunArray < N , T > , idx : u32 ) -> T {
85
85
x. get ( idx) . clone ( )
86
86
}
87
87
88
88
/// Adds two vectors elementwise with wrapping on overflow/underflow.
89
- pub fn simd_add < const N : u64 , T : MachineInteger + Copy > (
89
+ pub fn simd_add < const N : u32 , T : MachineInteger + Copy > (
90
90
x : FunArray < N , T > ,
91
91
y : FunArray < N , T > ,
92
92
) -> FunArray < N , T > {
93
- FunArray :: from_fn ( |i| ( x[ i] . wrapping_add ( y[ i] ) ) )
93
+ FunArray :: from_fn ( |i| x[ i] . wrapping_add ( y[ i] ) )
94
94
}
95
95
96
96
/// Subtracts `rhs` from `lhs` elementwise with wrapping on overflow/underflow.
97
- pub fn simd_sub < const N : u64 , T : MachineInteger + Copy > (
97
+ pub fn simd_sub < const N : u32 , T : MachineInteger + Copy > (
98
98
x : FunArray < N , T > ,
99
99
y : FunArray < N , T > ,
100
100
) -> FunArray < N , T > {
101
- FunArray :: from_fn ( |i| ( x[ i] . wrapping_sub ( y[ i] ) ) )
101
+ FunArray :: from_fn ( |i| x[ i] . wrapping_sub ( y[ i] ) )
102
102
}
103
103
104
104
/// Multiplies two vectors elementwise with wrapping on overflow/underflow.
105
- pub fn simd_mul < const N : u64 , T : MachineInteger + Copy > (
105
+ pub fn simd_mul < const N : u32 , T : MachineInteger + Copy > (
106
106
x : FunArray < N , T > ,
107
107
y : FunArray < N , T > ,
108
108
) -> FunArray < N , T > {
109
- FunArray :: from_fn ( |i| ( x[ i] . overflowing_mul ( y[ i] ) ) )
109
+ FunArray :: from_fn ( |i| x[ i] . overflowing_mul ( y[ i] ) )
110
110
}
111
111
112
112
/// Produces the elementwise absolute values.
113
113
/// For vectors of unsigned integers it returns the vector untouched.
114
114
/// If the element is the minimum value of a signed integer, it returns the element as is.
115
- pub fn simd_abs < const N : u64 , T : MachineInteger + Copy > ( x : FunArray < N , T > ) -> FunArray < N , T > {
115
+ pub fn simd_abs < const N : u32 , T : MachineInteger + Copy > ( x : FunArray < N , T > ) -> FunArray < N , T > {
116
116
FunArray :: from_fn ( |i| x[ i] . absolute_val ( ) )
117
117
}
118
118
119
119
/// Produces the elementwise absolute difference of two vectors.
120
120
/// Note: Absolute difference in this case is simply the element with the smaller value subtracted from the element with the larger value, with overflow/underflow.
121
121
/// For example, if the elements are i8, the absolute difference of 255 and -2 is -255.
122
- pub fn simd_abs_diff < const N : u64 , T : MachineInteger + Copy > (
122
+ pub fn simd_abs_diff < const N : u32 , T : MachineInteger + Copy > (
123
123
x : FunArray < N , T > ,
124
124
y : FunArray < N , T > ,
125
125
) -> FunArray < N , T > {
126
- FunArray :: from_fn ( |i| ( x[ i] . absolute_diff ( y[ i] ) ) )
126
+ FunArray :: from_fn ( |i| x[ i] . absolute_diff ( y[ i] ) )
127
127
}
128
128
129
129
/// Shifts vector left elementwise, with UB on overflow.
130
130
///
131
131
/// # Safety
132
132
///
133
133
/// Each element of `rhs` must be less than `<int>::BITS`.
134
- pub fn simd_shl < const N : u64 , T : Shl + Copy > (
134
+ pub fn simd_shl < const N : u32 , T : Shl + Copy > (
135
135
x : FunArray < N , T > ,
136
136
y : FunArray < N , T > ,
137
137
) -> FunArray < N , <T as Shl >:: Output > {
138
- FunArray :: from_fn ( |i| ( x[ i] << y[ i] ) )
138
+ FunArray :: from_fn ( |i| x[ i] << y[ i] )
139
139
}
140
140
141
141
/// Shifts vector right elementwise, with UB on overflow.
@@ -146,38 +146,38 @@ pub fn simd_shl<const N: u64, T: Shl + Copy>(
146
146
///
147
147
/// Each element of `rhs` must be less than `<int>::BITS`.
148
148
149
- pub fn simd_shr < const N : u64 , T : Shr + Copy > (
149
+ pub fn simd_shr < const N : u32 , T : Shr + Copy > (
150
150
x : FunArray < N , T > ,
151
151
y : FunArray < N , T > ,
152
152
) -> FunArray < N , <T as Shr >:: Output > {
153
- FunArray :: from_fn ( |i| ( x[ i] >> y[ i] ) )
153
+ FunArray :: from_fn ( |i| x[ i] >> y[ i] )
154
154
}
155
155
156
156
/// "Ands" vectors elementwise.
157
157
158
- pub fn simd_and < const N : u64 , T : BitAnd + Copy > (
158
+ pub fn simd_and < const N : u32 , T : BitAnd + Copy > (
159
159
x : FunArray < N , T > ,
160
160
y : FunArray < N , T > ,
161
161
) -> FunArray < N , <T as BitAnd >:: Output > {
162
- FunArray :: from_fn ( |i| ( x[ i] & y[ i] ) )
162
+ FunArray :: from_fn ( |i| x[ i] & y[ i] )
163
163
}
164
164
165
165
/// "Ors" vectors elementwise.
166
166
167
- pub fn simd_or < const N : u64 , T : BitOr + Copy > (
167
+ pub fn simd_or < const N : u32 , T : BitOr + Copy > (
168
168
x : FunArray < N , T > ,
169
169
y : FunArray < N , T > ,
170
170
) -> FunArray < N , <T as BitOr >:: Output > {
171
- FunArray :: from_fn ( |i| ( x[ i] | y[ i] ) )
171
+ FunArray :: from_fn ( |i| x[ i] | y[ i] )
172
172
}
173
173
174
174
/// "Exclusive ors" vectors elementwise.
175
175
176
- pub fn simd_xor < const N : u64 , T : BitXor + Copy > (
176
+ pub fn simd_xor < const N : u32 , T : BitXor + Copy > (
177
177
x : FunArray < N , T > ,
178
178
y : FunArray < N , T > ,
179
179
) -> FunArray < N , <T as BitXor >:: Output > {
180
- FunArray :: from_fn ( |i| ( x[ i] ^ y[ i] ) )
180
+ FunArray :: from_fn ( |i| x[ i] ^ y[ i] )
181
181
}
182
182
183
183
pub trait CastsFrom < T > {
@@ -327,15 +327,15 @@ self_impls!(u8, u16, u32, u64, u128, i8, i16, i32, i64, i128);
327
327
///
328
328
/// When casting from a wider number to a smaller number, the higher bits are removed.
329
329
/// Otherwise, it extends the number, following signedness.
330
- pub fn simd_cast < const N : u64 , T1 : Copy , T2 : CastsFrom < T1 > > ( x : FunArray < N , T1 > ) -> FunArray < N , T2 > {
330
+ pub fn simd_cast < const N : u32 , T1 : Copy , T2 : CastsFrom < T1 > > ( x : FunArray < N , T1 > ) -> FunArray < N , T2 > {
331
331
FunArray :: from_fn ( |i| T2 :: cast ( x[ i] ) )
332
332
}
333
333
334
334
/// Negates a vector elementwise.
335
335
///
336
336
/// Rust panics for `-<int>::Min` due to overflow, but here, it just returns the element as is.
337
337
338
- pub fn simd_neg < const N : u64 , T : From < <T as Neg >:: Output > + MachineInteger + Eq + Neg + Copy > (
338
+ pub fn simd_neg < const N : u32 , T : From < <T as Neg >:: Output > + MachineInteger + Eq + Neg + Copy > (
339
339
x : FunArray < N , T > ,
340
340
) -> FunArray < N , T > {
341
341
FunArray :: from_fn ( |i| {
@@ -350,7 +350,7 @@ pub fn simd_neg<const N: u64, T: From<<T as Neg>::Output> + MachineInteger + Eq
350
350
///
351
351
/// Returns `0` (all zeros) for false and `!0` (all ones) for true.
352
352
353
- pub fn simd_eq < const N : u64 , T : Eq + MachineInteger + Copy > (
353
+ pub fn simd_eq < const N : u32 , T : Eq + MachineInteger + Copy > (
354
354
x : FunArray < N , T > ,
355
355
y : FunArray < N , T > ,
356
356
) -> FunArray < N , T > {
@@ -361,7 +361,7 @@ pub fn simd_eq<const N: u64, T: Eq + MachineInteger + Copy>(
361
361
///
362
362
/// Returns `0` (all zeros) for false and `!0` (all ones) for true.
363
363
364
- pub fn simd_ne < const N : u64 , T : Eq + MachineInteger + Copy > (
364
+ pub fn simd_ne < const N : u32 , T : Eq + MachineInteger + Copy > (
365
365
x : FunArray < N , T > ,
366
366
y : FunArray < N , T > ,
367
367
) -> FunArray < N , T > {
@@ -372,7 +372,7 @@ pub fn simd_ne<const N: u64, T: Eq + MachineInteger + Copy>(
372
372
///
373
373
/// Returns `0` (all zeros) for false and `!0` (all ones) for true.
374
374
375
- pub fn simd_lt < const N : u64 , T : Ord + MachineInteger + Copy > (
375
+ pub fn simd_lt < const N : u32 , T : Ord + MachineInteger + Copy > (
376
376
x : FunArray < N , T > ,
377
377
y : FunArray < N , T > ,
378
378
) -> FunArray < N , T > {
@@ -383,7 +383,7 @@ pub fn simd_lt<const N: u64, T: Ord + MachineInteger + Copy>(
383
383
///
384
384
/// Returns `0` (all zeros) for false and `!0` (all ones) for true.
385
385
386
- pub fn simd_le < const N : u64 , T : Ord + MachineInteger + Copy > (
386
+ pub fn simd_le < const N : u32 , T : Ord + MachineInteger + Copy > (
387
387
x : FunArray < N , T > ,
388
388
y : FunArray < N , T > ,
389
389
) -> FunArray < N , T > {
@@ -394,7 +394,7 @@ pub fn simd_le<const N: u64, T: Ord + MachineInteger + Copy>(
394
394
///
395
395
/// Returns `0` (all zeros) for false and `!0` (all ones) for true.
396
396
397
- pub fn simd_gt < const N : u64 , T : Ord + MachineInteger + Copy > (
397
+ pub fn simd_gt < const N : u32 , T : Ord + MachineInteger + Copy > (
398
398
x : FunArray < N , T > ,
399
399
y : FunArray < N , T > ,
400
400
) -> FunArray < N , T > {
@@ -405,7 +405,7 @@ pub fn simd_gt<const N: u64, T: Ord + MachineInteger + Copy>(
405
405
///
406
406
/// Returns `0` (all zeros) for false and `!0` (all ones) for true.
407
407
408
- pub fn simd_ge < const N : u64 , T : Ord + MachineInteger + Copy > (
408
+ pub fn simd_ge < const N : u32 , T : Ord + MachineInteger + Copy > (
409
409
x : FunArray < N , T > ,
410
410
y : FunArray < N , T > ,
411
411
) -> FunArray < N , T > {
@@ -415,10 +415,10 @@ pub fn simd_ge<const N: u64, T: Ord + MachineInteger + Copy>(
415
415
/// Shuffles two vectors by the indices in idx.
416
416
///
417
417
/// For safety, `N2 <= N1 + N3` must hold.
418
- pub fn simd_shuffle < T : Copy , const N1 : u64 , const N2 : usize , const N3 : u64 > (
418
+ pub fn simd_shuffle < T : Copy , const N1 : u32 , const N2 : usize , const N3 : u32 > (
419
419
x : FunArray < N1 , T > ,
420
420
y : FunArray < N1 , T > ,
421
- idx : [ u64 ; N2 ] ,
421
+ idx : [ u32 ; N2 ] ,
422
422
) -> FunArray < N3 , T > {
423
423
FunArray :: from_fn ( |i| {
424
424
let i = idx[ i as usize ] ;
@@ -432,7 +432,7 @@ pub fn simd_shuffle<T: Copy, const N1: u64, const N2: usize, const N3: u64>(
432
432
433
433
/// Adds two vectors elementwise, with saturation.
434
434
435
- pub fn simd_saturating_add < T : MachineInteger + Copy , const N : u64 > (
435
+ pub fn simd_saturating_add < T : MachineInteger + Copy , const N : u32 > (
436
436
x : FunArray < N , T > ,
437
437
y : FunArray < N , T > ,
438
438
) -> FunArray < N , T > {
@@ -441,7 +441,7 @@ pub fn simd_saturating_add<T: MachineInteger + Copy, const N: u64>(
441
441
442
442
/// Subtracts `y` from `x` elementwise, with saturation.
443
443
444
- pub fn simd_saturating_sub < T : MachineInteger + Copy , const N : u64 > (
444
+ pub fn simd_saturating_sub < T : MachineInteger + Copy , const N : u32 > (
445
445
x : FunArray < N , T > ,
446
446
y : FunArray < N , T > ,
447
447
) -> FunArray < N , T > {
@@ -923,7 +923,7 @@ pub(crate) use simd_bitmask_big;
923
923
/// # Safety
924
924
/// `mask` must only contain `0` and `!0`.
925
925
926
- pub fn simd_select < const N : u64 , T1 : Eq + MachineInteger , T2 : Copy + MachineInteger > (
926
+ pub fn simd_select < const N : u32 , T1 : Eq + MachineInteger , T2 : Copy + MachineInteger > (
927
927
mask : FunArray < N , T1 > ,
928
928
if_true : FunArray < N , T2 > ,
929
929
if_false : FunArray < N , T2 > ,
0 commit comments