@@ -12,6 +12,8 @@ fn main() {
1212 unsafe {
1313 test_vpmaxq_u8 ( ) ;
1414 test_tbl1_v16i8_basic ( ) ;
15+ test_vpadd ( ) ;
16+ test_vpaddl ( ) ;
1517 }
1618}
1719
@@ -65,3 +67,93 @@ fn test_tbl1_v16i8_basic() {
6567 assert_eq ! ( & got2_arr[ 3 ..16 ] , & [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 ] [ ..] ) ;
6668 }
6769}
70+ #[ target_feature( enable = "neon" ) ]
71+ unsafe fn test_vpadd ( ) {
72+ let a = vld1_s8 ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] . as_ptr ( ) ) ;
73+ let b = vld1_s8 ( [ 9 , 10 , -1 , 2 , i8:: MIN , i8:: MIN , i8:: MAX , i8:: MAX ] . as_ptr ( ) ) ;
74+ let e =
75+ [ 3i8 , 7 , 11 , 15 , 19 , -1 + 2 , i8:: MIN . wrapping_add ( i8:: MIN ) , i8:: MAX . wrapping_add ( i8:: MAX ) ] ;
76+ let mut r = [ 0i8 ; 8 ] ;
77+ vst1_s8 ( r. as_mut_ptr ( ) , vpadd_s8 ( a, b) ) ;
78+ assert_eq ! ( r, e) ;
79+
80+ let a = vld1_s16 ( [ 1 , 2 , 3 , 4 ] . as_ptr ( ) ) ;
81+ let b = vld1_s16 ( [ -1 , 2 , i16:: MAX , i16:: MAX ] . as_ptr ( ) ) ;
82+ let e = [ 3i16 , 7 , -1 + 2 , i16:: MAX . wrapping_add ( i16:: MAX ) ] ;
83+ let mut r = [ 0i16 ; 4 ] ;
84+ vst1_s16 ( r. as_mut_ptr ( ) , vpadd_s16 ( a, b) ) ;
85+ assert_eq ! ( r, e) ;
86+
87+ let a = vld1_s32 ( [ 1 , 2 ] . as_ptr ( ) ) ;
88+ let b = vld1_s32 ( [ i32:: MAX , i32:: MAX ] . as_ptr ( ) ) ;
89+ let e = [ 3i32 , i32:: MAX . wrapping_add ( i32:: MAX ) ] ;
90+ let mut r = [ 0i32 ; 2 ] ;
91+ vst1_s32 ( r. as_mut_ptr ( ) , vpadd_s32 ( a, b) ) ;
92+ assert_eq ! ( r, e) ;
93+
94+ let a = vld1_u8 ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] . as_ptr ( ) ) ;
95+ let b = vld1_u8 ( [ 9 , 10 , 11 , 12 , 13 , 14 , u8:: MAX , u8:: MAX ] . as_ptr ( ) ) ;
96+ let e = [ 3u8 , 7 , 11 , 15 , 19 , 23 , 27 , 254 ] ;
97+ let mut r = [ 0u8 ; 8 ] ;
98+ vst1_u8 ( r. as_mut_ptr ( ) , vpadd_u8 ( a, b) ) ;
99+ assert_eq ! ( r, e) ;
100+
101+ let a = vld1_u16 ( [ 1 , 2 , 3 , 4 ] . as_ptr ( ) ) ;
102+ let b = vld1_u16 ( [ 5 , 6 , u16:: MAX , u16:: MAX ] . as_ptr ( ) ) ;
103+ let e = [ 3u16 , 7 , 11 , 65534 ] ;
104+ let mut r = [ 0u16 ; 4 ] ;
105+ vst1_u16 ( r. as_mut_ptr ( ) , vpadd_u16 ( a, b) ) ;
106+ assert_eq ! ( r, e) ;
107+
108+ let a = vld1_u32 ( [ 1 , 2 ] . as_ptr ( ) ) ;
109+ let b = vld1_u32 ( [ u32:: MAX , u32:: MAX ] . as_ptr ( ) ) ;
110+ let e = [ 3u32 , u32:: MAX . wrapping_add ( u32:: MAX ) ] ;
111+ let mut r = [ 0u32 ; 2 ] ;
112+ vst1_u32 ( r. as_mut_ptr ( ) , vpadd_u32 ( a, b) ) ;
113+ assert_eq ! ( r, e) ;
114+ }
115+
116+ #[ target_feature( enable = "neon" ) ]
117+ unsafe fn test_vpaddl ( ) {
118+ let a = vld1_u8 ( [ 1 , 2 , 3 , 4 , 5 , 6 , u8:: MAX , u8:: MAX ] . as_ptr ( ) ) ;
119+ let e = [ 3u16 , 7 , 11 , 510 ] ;
120+ let mut r = [ 0u16 ; 4 ] ;
121+ vst1_u16 ( r. as_mut_ptr ( ) , vpaddl_u8 ( a) ) ;
122+ assert_eq ! ( r, e) ;
123+
124+ let a = vld1q_u8 ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , u8:: MAX , u8:: MAX ] . as_ptr ( ) ) ;
125+ let e = [ 3u16 , 7 , 11 , 15 , 19 , 23 , 27 , 510 ] ;
126+ let mut r = [ 0u16 ; 8 ] ;
127+ vst1q_u16 ( r. as_mut_ptr ( ) , vpaddlq_u8 ( a) ) ;
128+ assert_eq ! ( r, e) ;
129+
130+ let a = vld1_u16 ( [ 1 , 2 , u16:: MAX , u16:: MAX ] . as_ptr ( ) ) ;
131+ let e = [ 3u32 , 131070 ] ;
132+ let mut r = [ 0u32 ; 2 ] ;
133+ vst1_u32 ( r. as_mut_ptr ( ) , vpaddl_u16 ( a) ) ;
134+ assert_eq ! ( r, e) ;
135+
136+ let a = vld1q_u16 ( [ 1 , 2 , 3 , 4 , 5 , 6 , u16:: MAX , u16:: MAX ] . as_ptr ( ) ) ;
137+ let e = [ 3u32 , 7 , 11 , 131070 ] ;
138+ let mut r = [ 0u32 ; 4 ] ;
139+ vst1q_u32 ( r. as_mut_ptr ( ) , vpaddlq_u16 ( a) ) ;
140+ assert_eq ! ( r, e) ;
141+
142+ let a = vld1_u32 ( [ 1 , 2 ] . as_ptr ( ) ) ;
143+ let e = [ 3u64 ] ;
144+ let mut r = [ 0u64 ; 1 ] ;
145+ vst1_u64 ( r. as_mut_ptr ( ) , vpaddl_u32 ( a) ) ;
146+ assert_eq ! ( r, e) ;
147+
148+ let a = vld1_u32 ( [ u32:: MAX , u32:: MAX ] . as_ptr ( ) ) ;
149+ let e = [ 8589934590 ] ;
150+ let mut r = [ 0u64 ; 1 ] ;
151+ vst1_u64 ( r. as_mut_ptr ( ) , vpaddl_u32 ( a) ) ;
152+ assert_eq ! ( r, e) ;
153+
154+ let a = vld1q_u32 ( [ 1 , 2 , u32:: MAX , u32:: MAX ] . as_ptr ( ) ) ;
155+ let e = [ 3u64 , 8589934590 ] ;
156+ let mut r = [ 0u64 ; 2 ] ;
157+ vst1q_u64 ( r. as_mut_ptr ( ) , vpaddlq_u32 ( a) ) ;
158+ assert_eq ! ( r, e) ;
159+ }
0 commit comments