@@ -4592,6 +4592,84 @@ pub unsafe fn vld1q_f64_x4(a: *const f64) -> float64x2x4_t {
4592
4592
vld1q_f64_x4_(a)
4593
4593
}
4594
4594
4595
+ /// Store multiple single-element structures to one, two, three, or four registers
4596
+ #[inline]
4597
+ #[target_feature(enable = "neon")]
4598
+ #[cfg_attr(test, assert_instr(st1))]
4599
+ pub unsafe fn vst1_f64_x2(a: *mut f64, b: float64x1x2_t) {
4600
+ #[allow(improper_ctypes)]
4601
+ extern "unadjusted" {
4602
+ #[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.st1x2.v1f64.p0f64")]
4603
+ fn vst1_f64_x2_(a: float64x1_t, b: float64x1_t, ptr: *mut f64);
4604
+ }
4605
+ vst1_f64_x2_(b.0, b.1, a)
4606
+ }
4607
+
4608
+ /// Store multiple single-element structures to one, two, three, or four registers
4609
+ #[inline]
4610
+ #[target_feature(enable = "neon")]
4611
+ #[cfg_attr(test, assert_instr(st1))]
4612
+ pub unsafe fn vst1q_f64_x2(a: *mut f64, b: float64x2x2_t) {
4613
+ #[allow(improper_ctypes)]
4614
+ extern "unadjusted" {
4615
+ #[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.st1x2.v2f64.p0f64")]
4616
+ fn vst1q_f64_x2_(a: float64x2_t, b: float64x2_t, ptr: *mut f64);
4617
+ }
4618
+ vst1q_f64_x2_(b.0, b.1, a)
4619
+ }
4620
+
4621
+ /// Store multiple single-element structures to one, two, three, or four registers
4622
+ #[inline]
4623
+ #[target_feature(enable = "neon")]
4624
+ #[cfg_attr(test, assert_instr(st1))]
4625
+ pub unsafe fn vst1_f64_x3(a: *mut f64, b: float64x1x3_t) {
4626
+ #[allow(improper_ctypes)]
4627
+ extern "unadjusted" {
4628
+ #[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.st1x3.v1f64.p0f64")]
4629
+ fn vst1_f64_x3_(a: float64x1_t, b: float64x1_t, c: float64x1_t, ptr: *mut f64);
4630
+ }
4631
+ vst1_f64_x3_(b.0, b.1, b.2, a)
4632
+ }
4633
+
4634
+ /// Store multiple single-element structures to one, two, three, or four registers
4635
+ #[inline]
4636
+ #[target_feature(enable = "neon")]
4637
+ #[cfg_attr(test, assert_instr(st1))]
4638
+ pub unsafe fn vst1q_f64_x3(a: *mut f64, b: float64x2x3_t) {
4639
+ #[allow(improper_ctypes)]
4640
+ extern "unadjusted" {
4641
+ #[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.st1x3.v2f64.p0f64")]
4642
+ fn vst1q_f64_x3_(a: float64x2_t, b: float64x2_t, c: float64x2_t, ptr: *mut f64);
4643
+ }
4644
+ vst1q_f64_x3_(b.0, b.1, b.2, a)
4645
+ }
4646
+
4647
+ /// Store multiple single-element structures to one, two, three, or four registers
4648
+ #[inline]
4649
+ #[target_feature(enable = "neon")]
4650
+ #[cfg_attr(test, assert_instr(st1))]
4651
+ pub unsafe fn vst1_f64_x4(a: *mut f64, b: float64x1x4_t) {
4652
+ #[allow(improper_ctypes)]
4653
+ extern "unadjusted" {
4654
+ #[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.st1x4.v1f64.p0f64")]
4655
+ fn vst1_f64_x4_(a: float64x1_t, b: float64x1_t, c: float64x1_t, d: float64x1_t, ptr: *mut f64);
4656
+ }
4657
+ vst1_f64_x4_(b.0, b.1, b.2, b.3, a)
4658
+ }
4659
+
4660
+ /// Store multiple single-element structures to one, two, three, or four registers
4661
+ #[inline]
4662
+ #[target_feature(enable = "neon")]
4663
+ #[cfg_attr(test, assert_instr(st1))]
4664
+ pub unsafe fn vst1q_f64_x4(a: *mut f64, b: float64x2x4_t) {
4665
+ #[allow(improper_ctypes)]
4666
+ extern "unadjusted" {
4667
+ #[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.st1x4.v2f64.p0f64")]
4668
+ fn vst1q_f64_x4_(a: float64x2_t, b: float64x2_t, c: float64x2_t, d: float64x2_t, ptr: *mut f64);
4669
+ }
4670
+ vst1q_f64_x4_(b.0, b.1, b.2, b.3, a)
4671
+ }
4672
+
4595
4673
/// Multiply
4596
4674
#[inline]
4597
4675
#[target_feature(enable = "neon")]
@@ -12983,6 +13061,60 @@ mod test {
12983
13061
assert_eq!(r, e);
12984
13062
}
12985
13063
13064
+ #[simd_test(enable = "neon")]
13065
+ unsafe fn test_vst1_f64_x2() {
13066
+ let a: [f64; 3] = [0., 1., 2.];
13067
+ let e: [f64; 2] = [1., 2.];
13068
+ let mut r: [f64; 2] = [0f64; 2];
13069
+ vst1_f64_x2(r.as_mut_ptr(), vld1_f64_x2(a[1..].as_ptr()));
13070
+ assert_eq!(r, e);
13071
+ }
13072
+
13073
+ #[simd_test(enable = "neon")]
13074
+ unsafe fn test_vst1q_f64_x2() {
13075
+ let a: [f64; 5] = [0., 1., 2., 3., 4.];
13076
+ let e: [f64; 4] = [1., 2., 3., 4.];
13077
+ let mut r: [f64; 4] = [0f64; 4];
13078
+ vst1q_f64_x2(r.as_mut_ptr(), vld1q_f64_x2(a[1..].as_ptr()));
13079
+ assert_eq!(r, e);
13080
+ }
13081
+
13082
+ #[simd_test(enable = "neon")]
13083
+ unsafe fn test_vst1_f64_x3() {
13084
+ let a: [f64; 4] = [0., 1., 2., 3.];
13085
+ let e: [f64; 3] = [1., 2., 3.];
13086
+ let mut r: [f64; 3] = [0f64; 3];
13087
+ vst1_f64_x3(r.as_mut_ptr(), vld1_f64_x3(a[1..].as_ptr()));
13088
+ assert_eq!(r, e);
13089
+ }
13090
+
13091
+ #[simd_test(enable = "neon")]
13092
+ unsafe fn test_vst1q_f64_x3() {
13093
+ let a: [f64; 7] = [0., 1., 2., 3., 4., 5., 6.];
13094
+ let e: [f64; 6] = [1., 2., 3., 4., 5., 6.];
13095
+ let mut r: [f64; 6] = [0f64; 6];
13096
+ vst1q_f64_x3(r.as_mut_ptr(), vld1q_f64_x3(a[1..].as_ptr()));
13097
+ assert_eq!(r, e);
13098
+ }
13099
+
13100
+ #[simd_test(enable = "neon")]
13101
+ unsafe fn test_vst1_f64_x4() {
13102
+ let a: [f64; 5] = [0., 1., 2., 3., 4.];
13103
+ let e: [f64; 4] = [1., 2., 3., 4.];
13104
+ let mut r: [f64; 4] = [0f64; 4];
13105
+ vst1_f64_x4(r.as_mut_ptr(), vld1_f64_x4(a[1..].as_ptr()));
13106
+ assert_eq!(r, e);
13107
+ }
13108
+
13109
+ #[simd_test(enable = "neon")]
13110
+ unsafe fn test_vst1q_f64_x4() {
13111
+ let a: [f64; 9] = [0., 1., 2., 3., 4., 5., 6., 7., 8.];
13112
+ let e: [f64; 8] = [1., 2., 3., 4., 5., 6., 7., 8.];
13113
+ let mut r: [f64; 8] = [0f64; 8];
13114
+ vst1q_f64_x4(r.as_mut_ptr(), vld1q_f64_x4(a[1..].as_ptr()));
13115
+ assert_eq!(r, e);
13116
+ }
13117
+
12986
13118
#[simd_test(enable = "neon")]
12987
13119
unsafe fn test_vmul_f64() {
12988
13120
let a: f64 = 1.0;
0 commit comments