@@ -214,199 +214,201 @@ pub unsafe fn vrsqrte_f32(a: f32x2) -> f32x2 {
214
214
215
215
#[ cfg( test) ]
216
216
mod tests {
217
- use super :: * ;
217
+ use stdsimd_test:: simd_test;
218
+ use simd:: * ;
219
+ use arm:: neon;
218
220
219
- #[ test ]
220
- fn vadd_s8_ ( ) {
221
+ #[ simd_test = "neon" ]
222
+ unsafe fn vadd_s8 ( ) {
221
223
let a = i8x8:: new ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ) ;
222
224
let b = i8x8:: new ( 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ) ;
223
225
let e = i8x8:: new ( 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ) ;
224
- let r = unsafe { vadd_s8 ( a, b) } ;
226
+ let r = neon :: vadd_s8 ( a, b) ;
225
227
assert_eq ! ( r, e) ;
226
228
}
227
229
228
- #[ test ]
229
- fn vaddq_s8_ ( ) {
230
+ #[ simd_test = "neon" ]
231
+ unsafe fn vaddq_s8 ( ) {
230
232
let a = i8x16:: new ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ) ;
231
233
let b = i8x16:: new ( 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ) ;
232
234
let e = i8x16:: new ( 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ) ;
233
- let r = unsafe { vaddq_s8 ( a, b) } ;
235
+ let r = neon :: vaddq_s8 ( a, b) ;
234
236
assert_eq ! ( r, e) ;
235
237
}
236
238
237
- #[ test ]
238
- fn vadd_s16_ ( ) {
239
+ #[ simd_test = "neon" ]
240
+ unsafe fn vadd_s16 ( ) {
239
241
let a = i16x4:: new ( 1 , 2 , 3 , 4 ) ;
240
242
let b = i16x4:: new ( 8 , 7 , 6 , 5 ) ;
241
243
let e = i16x4:: new ( 9 , 9 , 9 , 9 ) ;
242
- let r = unsafe { vadd_s16 ( a, b) } ;
244
+ let r = neon :: vadd_s16 ( a, b) ;
243
245
assert_eq ! ( r, e) ;
244
246
}
245
247
246
- #[ test ]
247
- fn vaddq_s16_ ( ) {
248
+ #[ simd_test = "neon" ]
249
+ unsafe fn vaddq_s16 ( ) {
248
250
let a = i16x8:: new ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ) ;
249
251
let b = i16x8:: new ( 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ) ;
250
252
let e = i16x8:: new ( 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ) ;
251
- let r = unsafe { vaddq_s16 ( a, b) } ;
253
+ let r = neon :: vaddq_s16 ( a, b) ;
252
254
assert_eq ! ( r, e) ;
253
255
}
254
256
255
- #[ test ]
256
- fn vadd_s32_ ( ) {
257
+ #[ simd_test = "neon" ]
258
+ unsafe fn vadd_s32 ( ) {
257
259
let a = i32x2:: new ( 1 , 2 ) ;
258
260
let b = i32x2:: new ( 8 , 7 ) ;
259
261
let e = i32x2:: new ( 9 , 9 ) ;
260
- let r = unsafe { vadd_s32 ( a, b) } ;
262
+ let r = neon :: vadd_s32 ( a, b) ;
261
263
assert_eq ! ( r, e) ;
262
264
}
263
265
264
- #[ test ]
265
- fn vaddq_s32_ ( ) {
266
+ #[ simd_test = "neon" ]
267
+ unsafe fn vaddq_s32 ( ) {
266
268
let a = i32x4:: new ( 1 , 2 , 3 , 4 ) ;
267
269
let b = i32x4:: new ( 8 , 7 , 6 , 5 ) ;
268
270
let e = i32x4:: new ( 9 , 9 , 9 , 9 ) ;
269
- let r = unsafe { vaddq_s32 ( a, b) } ;
271
+ let r = neon :: vaddq_s32 ( a, b) ;
270
272
assert_eq ! ( r, e) ;
271
273
}
272
274
273
- #[ test ]
274
- fn vadd_u8_ ( ) {
275
+ #[ simd_test = "neon" ]
276
+ unsafe fn vadd_u8 ( ) {
275
277
let a = u8x8:: new ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ) ;
276
278
let b = u8x8:: new ( 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ) ;
277
279
let e = u8x8:: new ( 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ) ;
278
- let r = unsafe { vadd_u8 ( a, b) } ;
280
+ let r = neon :: vadd_u8 ( a, b) ;
279
281
assert_eq ! ( r, e) ;
280
282
}
281
283
282
- #[ test ]
283
- fn vaddq_u8_ ( ) {
284
+ #[ simd_test = "neon" ]
285
+ unsafe fn vaddq_u8 ( ) {
284
286
let a = u8x16:: new ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ) ;
285
287
let b = u8x16:: new ( 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ) ;
286
288
let e = u8x16:: new ( 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ) ;
287
- let r = unsafe { vaddq_u8 ( a, b) } ;
289
+ let r = neon :: vaddq_u8 ( a, b) ;
288
290
assert_eq ! ( r, e) ;
289
291
}
290
292
291
- #[ test ]
292
- fn vadd_u16_ ( ) {
293
+ #[ simd_test = "neon" ]
294
+ unsafe fn vadd_u16 ( ) {
293
295
let a = u16x4:: new ( 1 , 2 , 3 , 4 ) ;
294
296
let b = u16x4:: new ( 8 , 7 , 6 , 5 ) ;
295
297
let e = u16x4:: new ( 9 , 9 , 9 , 9 ) ;
296
- let r = unsafe { vadd_u16 ( a, b) } ;
298
+ let r = neon :: vadd_u16 ( a, b) ;
297
299
assert_eq ! ( r, e) ;
298
300
}
299
301
300
- #[ test ]
301
- fn vaddq_u16_ ( ) {
302
+ #[ simd_test = "neon" ]
303
+ unsafe fn vaddq_u16 ( ) {
302
304
let a = u16x8:: new ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ) ;
303
305
let b = u16x8:: new ( 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ) ;
304
306
let e = u16x8:: new ( 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ) ;
305
- let r = unsafe { vaddq_u16 ( a, b) } ;
307
+ let r = neon :: vaddq_u16 ( a, b) ;
306
308
assert_eq ! ( r, e) ;
307
309
}
308
310
309
- #[ test ]
310
- fn vadd_u32_ ( ) {
311
+ #[ simd_test = "neon" ]
312
+ unsafe fn vadd_u32 ( ) {
311
313
let a = u32x2:: new ( 1 , 2 ) ;
312
314
let b = u32x2:: new ( 8 , 7 ) ;
313
315
let e = u32x2:: new ( 9 , 9 ) ;
314
- let r = unsafe { vadd_u32 ( a, b) } ;
316
+ let r = neon :: vadd_u32 ( a, b) ;
315
317
assert_eq ! ( r, e) ;
316
318
}
317
319
318
- #[ test ]
319
- fn vaddq_u32_ ( ) {
320
+ #[ simd_test = "neon" ]
321
+ unsafe fn vaddq_u32 ( ) {
320
322
let a = u32x4:: new ( 1 , 2 , 3 , 4 ) ;
321
323
let b = u32x4:: new ( 8 , 7 , 6 , 5 ) ;
322
324
let e = u32x4:: new ( 9 , 9 , 9 , 9 ) ;
323
- let r = unsafe { vaddq_u32 ( a, b) } ;
325
+ let r = neon :: vaddq_u32 ( a, b) ;
324
326
assert_eq ! ( r, e) ;
325
327
}
326
328
327
- #[ test ]
328
- fn vadd_f32_ ( ) {
329
+ #[ simd_test = "neon" ]
330
+ unsafe fn vadd_f32 ( ) {
329
331
let a = f32x2:: new ( 1. , 2. ) ;
330
332
let b = f32x2:: new ( 8. , 7. ) ;
331
333
let e = f32x2:: new ( 9. , 9. ) ;
332
- let r = unsafe { vadd_f32 ( a, b) } ;
334
+ let r = neon :: vadd_f32 ( a, b) ;
333
335
assert_eq ! ( r, e) ;
334
336
}
335
337
336
- #[ test ]
337
- fn vaddq_f32_ ( ) {
338
+ #[ simd_test = "neon" ]
339
+ unsafe fn vaddq_f32 ( ) {
338
340
let a = f32x4:: new ( 1. , 2. , 3. , 4. ) ;
339
341
let b = f32x4:: new ( 8. , 7. , 6. , 5. ) ;
340
342
let e = f32x4:: new ( 9. , 9. , 9. , 9. ) ;
341
- let r = unsafe { vaddq_f32 ( a, b) } ;
343
+ let r = neon :: vaddq_f32 ( a, b) ;
342
344
assert_eq ! ( r, e) ;
343
345
}
344
346
345
- #[ test ]
346
- fn vaddl_s8_ ( ) {
347
+ #[ simd_test = "neon" ]
348
+ unsafe fn vaddl_s8 ( ) {
347
349
let v = :: std:: i8:: MAX ;
348
350
let a = i8x8:: new ( v, v, v, v, v, v, v, v) ;
349
351
let v = 2 * ( v as i16 ) ;
350
352
let e = i16x8:: new ( v, v, v, v, v, v, v, v) ;
351
- let r = unsafe { vaddl_s8 ( a, a) } ;
353
+ let r = neon :: vaddl_s8 ( a, a) ;
352
354
assert_eq ! ( r, e) ;
353
355
}
354
356
355
- #[ test ]
356
- fn vaddl_s16_ ( ) {
357
+ #[ simd_test = "neon" ]
358
+ unsafe fn vaddl_s16 ( ) {
357
359
let v = :: std:: i16:: MAX ;
358
360
let a = i16x4:: new ( v, v, v, v) ;
359
361
let v = 2 * ( v as i32 ) ;
360
362
let e = i32x4:: new ( v, v, v, v) ;
361
- let r = unsafe { vaddl_s16 ( a, a) } ;
363
+ let r = neon :: vaddl_s16 ( a, a) ;
362
364
assert_eq ! ( r, e) ;
363
365
}
364
366
365
- #[ test ]
366
- fn vaddl_s32_ ( ) {
367
+ #[ simd_test = "neon" ]
368
+ unsafe fn vaddl_s32 ( ) {
367
369
let v = :: std:: i32:: MAX ;
368
370
let a = i32x2:: new ( v, v) ;
369
371
let v = 2 * ( v as i64 ) ;
370
372
let e = i64x2:: new ( v, v) ;
371
- let r = unsafe { vaddl_s32 ( a, a) } ;
373
+ let r = neon :: vaddl_s32 ( a, a) ;
372
374
assert_eq ! ( r, e) ;
373
375
}
374
376
375
- #[ test ]
376
- fn vaddl_u8_ ( ) {
377
+ #[ simd_test = "neon" ]
378
+ unsafe fn vaddl_u8 ( ) {
377
379
let v = :: std:: u8:: MAX ;
378
380
let a = u8x8:: new ( v, v, v, v, v, v, v, v) ;
379
381
let v = 2 * ( v as u16 ) ;
380
382
let e = u16x8:: new ( v, v, v, v, v, v, v, v) ;
381
- let r = unsafe { vaddl_u8 ( a, a) } ;
383
+ let r = neon :: vaddl_u8 ( a, a) ;
382
384
assert_eq ! ( r, e) ;
383
385
}
384
386
385
- #[ test ]
386
- fn vaddl_u16_ ( ) {
387
+ #[ simd_test = "neon" ]
388
+ unsafe fn vaddl_u16 ( ) {
387
389
let v = :: std:: u16:: MAX ;
388
390
let a = u16x4:: new ( v, v, v, v) ;
389
391
let v = 2 * ( v as u32 ) ;
390
392
let e = u32x4:: new ( v, v, v, v) ;
391
- let r = unsafe { vaddl_u16 ( a, a) } ;
393
+ let r = neon :: vaddl_u16 ( a, a) ;
392
394
assert_eq ! ( r, e) ;
393
395
}
394
396
395
- #[ test ]
396
- fn vaddl_u32_ ( ) {
397
+ #[ simd_test = "neon" ]
398
+ unsafe fn vaddl_u32 ( ) {
397
399
let v = :: std:: u32:: MAX ;
398
400
let a = u32x2:: new ( v, v) ;
399
401
let v = 2 * ( v as u64 ) ;
400
402
let e = u64x2:: new ( v, v) ;
401
- let r = unsafe { vaddl_u32 ( a, a) } ;
403
+ let r = neon :: vaddl_u32 ( a, a) ;
402
404
assert_eq ! ( r, e) ;
403
405
}
404
406
405
- #[ test ]
406
- fn vrsqrt_f32_ ( ) {
407
+ #[ simd_test = "neon" ]
408
+ unsafe fn vrsqrt_f32 ( ) {
407
409
let a = f32x2:: new ( 1.0 , 2.0 ) ;
408
410
let e = f32x2:: new ( 0.9980469 , 0.7050781 ) ;
409
- let r = unsafe { vrsqrte_f32 ( a) } ;
411
+ let r = neon :: vrsqrte_f32 ( a) ;
410
412
assert_eq ! ( r, e) ;
411
413
}
412
414
}
0 commit comments