@@ -1507,6 +1507,70 @@ pub unsafe fn vcombine_p64(low: poly64x1_t, high: poly64x1_t) -> poly64x2_t {
1507
1507
simd_shuffle2 ( low, high, [ 0 , 1 ] )
1508
1508
}
1509
1509
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
+
1510
1574
/// Duplicate vector element to vector or scalar
1511
1575
#[ inline]
1512
1576
#[ target_feature( enable = "neon" ) ]
@@ -3443,6 +3507,70 @@ mod tests {
3443
3507
test_vcombine ! ( test_vcombine_p64 => vcombine_p64( [ 3_u64 ] , [ 13_u64 ] ) ) ;
3444
3508
test_vcombine ! ( test_vcombine_f64 => vcombine_f64( [ -3_f64 ] , [ 13_f64 ] ) ) ;
3445
3509
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
+
3446
3574
#[ simd_test( enable = "neon" ) ]
3447
3575
unsafe fn test_vget_high_f64 ( ) {
3448
3576
let a = f64x2:: new ( 1.0 , 2.0 ) ;
0 commit comments