@@ -719,6 +719,20 @@ pub unsafe fn vbsl_f64(a: uint64x1_t, b: float64x1_t, c: float64x1_t) -> float64
719
719
pub unsafe fn vbsl_p64 ( a : poly64x1_t , b : poly64x1_t , c : poly64x1_t ) -> poly64x1_t {
720
720
simd_select ( transmute :: < _ , int64x1_t > ( a) , b, c)
721
721
}
722
+ /// Bitwise Select. (128-bit)
723
+ #[ inline]
724
+ #[ target_feature( enable = "neon" ) ]
725
+ #[ cfg_attr( test, assert_instr( bsl) ) ]
726
+ pub unsafe fn vbslq_f64 ( a : uint64x2_t , b : float64x2_t , c : float64x2_t ) -> float64x2_t {
727
+ simd_select ( transmute :: < _ , int64x2_t > ( a) , b, c)
728
+ }
729
+ /// Bitwise Select. (128-bit)
730
+ #[ inline]
731
+ #[ target_feature( enable = "neon" ) ]
732
+ #[ cfg_attr( test, assert_instr( bsl) ) ]
733
+ pub unsafe fn vbslq_p64 ( a : poly64x2_t , b : poly64x2_t , c : poly64x2_t ) -> poly64x2_t {
734
+ simd_select ( transmute :: < _ , int64x2_t > ( a) , b, c)
735
+ }
722
736
723
737
/// Signed saturating Accumulate of Unsigned value.
724
738
#[ inline]
@@ -3948,6 +3962,24 @@ mod tests {
3948
3962
let r: u64x1 = transmute ( vbsl_p64 ( transmute ( a) , transmute ( b) , transmute ( c) ) ) ;
3949
3963
assert_eq ! ( r, e) ;
3950
3964
}
3965
+ #[ simd_test( enable = "neon" ) ]
3966
+ unsafe fn test_vbslq_f64 ( ) {
3967
+ let a = u64x2:: new ( u64:: MAX , 0 ) ;
3968
+ let b = f64x2:: new ( f64:: MAX , f64:: MAX ) ;
3969
+ let c = f64x2:: new ( f64:: MIN , f64:: MIN ) ;
3970
+ let e = f64x2:: new ( f64:: MAX , f64:: MIN ) ;
3971
+ let r: f64x2 = transmute ( vbslq_f64 ( transmute ( a) , transmute ( b) , transmute ( c) ) ) ;
3972
+ assert_eq ! ( r, e) ;
3973
+ }
3974
+ #[ simd_test( enable = "neon" ) ]
3975
+ unsafe fn test_vbslq_p64 ( ) {
3976
+ let a = u64x2:: new ( u64:: MAX , 0 ) ;
3977
+ let b = u64x2:: new ( u64:: MAX , u64:: MAX ) ;
3978
+ let c = u64x2:: new ( u64:: MIN , u64:: MIN ) ;
3979
+ let e = u64x2:: new ( u64:: MAX , u64:: MIN ) ;
3980
+ let r: u64x2 = transmute ( vbslq_p64 ( transmute ( a) , transmute ( b) , transmute ( c) ) ) ;
3981
+ assert_eq ! ( r, e) ;
3982
+ }
3951
3983
3952
3984
#[ simd_test( enable = "neon" ) ]
3953
3985
unsafe fn test_vaddv_s16 ( ) {
0 commit comments