@@ -1507,6 +1507,70 @@ pub unsafe fn vcombine_p64(low: poly64x1_t, high: poly64x1_t) -> poly64x2_t {
15071507 simd_shuffle2 ( low, high, [ 0 , 1 ] )
15081508}
15091509
1510+ /// Duplicate vector element to vector or scalar
1511+ #[ inline]
1512+ #[ target_feature( enable = "neon" ) ]
1513+ #[ cfg_attr( test, assert_instr( fmov) ) ]
1514+ pub unsafe fn vdup_n_p64 ( value : p64 ) -> poly64x1_t {
1515+ transmute ( u64x1:: new ( value) )
1516+ }
1517+
1518+ /// Duplicate vector element to vector or scalar
1519+ #[ inline]
1520+ #[ target_feature( enable = "neon" ) ]
1521+ #[ cfg_attr( test, assert_instr( ldr) ) ]
1522+ pub unsafe fn vdup_n_f64 ( value : f64 ) -> float64x1_t {
1523+ float64x1_t ( value)
1524+ }
1525+
1526+ /// Duplicate vector element to vector or scalar
1527+ #[ inline]
1528+ #[ target_feature( enable = "neon" ) ]
1529+ #[ cfg_attr( test, assert_instr( dup) ) ]
1530+ pub unsafe fn vdupq_n_p64 ( value : p64 ) -> poly64x2_t {
1531+ transmute ( u64x2:: new ( value, value) )
1532+ }
1533+
1534+ /// Duplicate vector element to vector or scalar
1535+ #[ inline]
1536+ #[ target_feature( enable = "neon" ) ]
1537+ #[ cfg_attr( test, assert_instr( dup) ) ]
1538+ pub unsafe fn vdupq_n_f64 ( value : f64 ) -> float64x2_t {
1539+ float64x2_t ( value, value)
1540+ }
1541+
1542+ /// Duplicate vector element to vector or scalar
1543+ #[ inline]
1544+ #[ target_feature( enable = "neon" ) ]
1545+ #[ cfg_attr( test, assert_instr( fmov) ) ]
1546+ pub unsafe fn vmov_n_p64 ( value : p64 ) -> poly64x1_t {
1547+ vdup_n_p64 ( value)
1548+ }
1549+
1550+ /// Duplicate vector element to vector or scalar
1551+ #[ inline]
1552+ #[ target_feature( enable = "neon" ) ]
1553+ #[ cfg_attr( test, assert_instr( ldr) ) ]
1554+ pub unsafe fn vmov_n_f64 ( value : f64 ) -> float64x1_t {
1555+ vdup_n_f64 ( value)
1556+ }
1557+
1558+ /// Duplicate vector element to vector or scalar
1559+ #[ inline]
1560+ #[ target_feature( enable = "neon" ) ]
1561+ #[ cfg_attr( test, assert_instr( dup) ) ]
1562+ pub unsafe fn vmovq_n_p64 ( value : p64 ) -> poly64x2_t {
1563+ vdupq_n_p64 ( value)
1564+ }
1565+
1566+ /// Duplicate vector element to vector or scalar
1567+ #[ inline]
1568+ #[ target_feature( enable = "neon" ) ]
1569+ #[ cfg_attr( test, assert_instr( dup) ) ]
1570+ pub unsafe fn vmovq_n_f64 ( value : f64 ) -> float64x2_t {
1571+ vdupq_n_f64 ( value)
1572+ }
1573+
15101574/// Duplicate vector element to vector or scalar
15111575#[ inline]
15121576#[ target_feature( enable = "neon" ) ]
@@ -3443,6 +3507,70 @@ mod tests {
34433507 test_vcombine ! ( test_vcombine_p64 => vcombine_p64( [ 3_u64 ] , [ 13_u64 ] ) ) ;
34443508 test_vcombine ! ( test_vcombine_f64 => vcombine_f64( [ -3_f64 ] , [ 13_f64 ] ) ) ;
34453509
3510+ #[ simd_test( enable = "neon" ) ]
3511+ unsafe fn test_vdup_n_f64 ( ) {
3512+ let a: f64 = 3.3 ;
3513+ let e = f64x1:: new ( 3.3 ) ;
3514+ let r: f64x1 = transmute ( vdup_n_f64 ( transmute ( a) ) ) ;
3515+ assert_eq ! ( r, e) ;
3516+ }
3517+
3518+ #[ simd_test( enable = "neon" ) ]
3519+ unsafe fn test_vdup_n_p64 ( ) {
3520+ let a: u64 = 3 ;
3521+ let e = u64x1:: new ( 3 ) ;
3522+ let r: u64x1 = transmute ( vdup_n_p64 ( transmute ( a) ) ) ;
3523+ assert_eq ! ( r, e) ;
3524+ }
3525+
3526+ #[ simd_test( enable = "neon" ) ]
3527+ unsafe fn test_vdupq_n_f64 ( ) {
3528+ let a: f64 = 3.3 ;
3529+ let e = f64x2:: new ( 3.3 , 3.3 ) ;
3530+ let r: f64x2 = transmute ( vdupq_n_f64 ( transmute ( a) ) ) ;
3531+ assert_eq ! ( r, e) ;
3532+ }
3533+
3534+ #[ simd_test( enable = "neon" ) ]
3535+ unsafe fn test_vdupq_n_p64 ( ) {
3536+ let a: u64 = 3 ;
3537+ let e = u64x2:: new ( 3 , 3 ) ;
3538+ let r: u64x2 = transmute ( vdupq_n_p64 ( transmute ( a) ) ) ;
3539+ assert_eq ! ( r, e) ;
3540+ }
3541+
3542+ #[ simd_test( enable = "neon" ) ]
3543+ unsafe fn test_vmov_n_p64 ( ) {
3544+ let a: u64 = 3 ;
3545+ let e = u64x1:: new ( 3 ) ;
3546+ let r: u64x1 = transmute ( vmov_n_p64 ( transmute ( a) ) ) ;
3547+ assert_eq ! ( r, e) ;
3548+ }
3549+
3550+ #[ simd_test( enable = "neon" ) ]
3551+ unsafe fn test_vmov_n_f64 ( ) {
3552+ let a: f64 = 3.3 ;
3553+ let e = f64x1:: new ( 3.3 ) ;
3554+ let r: f64x1 = transmute ( vmov_n_f64 ( transmute ( a) ) ) ;
3555+ assert_eq ! ( r, e) ;
3556+ }
3557+
3558+ #[ simd_test( enable = "neon" ) ]
3559+ unsafe fn test_vmovq_n_p64 ( ) {
3560+ let a: u64 = 3 ;
3561+ let e = u64x2:: new ( 3 , 3 ) ;
3562+ let r: u64x2 = transmute ( vmovq_n_p64 ( transmute ( a) ) ) ;
3563+ assert_eq ! ( r, e) ;
3564+ }
3565+
3566+ #[ simd_test( enable = "neon" ) ]
3567+ unsafe fn test_vmovq_n_f64 ( ) {
3568+ let a: f64 = 3.3 ;
3569+ let e = f64x2:: new ( 3.3 , 3.3 ) ;
3570+ let r: f64x2 = transmute ( vmovq_n_f64 ( transmute ( a) ) ) ;
3571+ assert_eq ! ( r, e) ;
3572+ }
3573+
34463574 #[ simd_test( enable = "neon" ) ]
34473575 unsafe fn test_vget_high_f64 ( ) {
34483576 let a = f64x2:: new ( 1.0 , 2.0 ) ;
0 commit comments