@@ -373,6 +373,19 @@ where
373
373
/// # Safety
374
374
///
375
375
/// Each read must satisfy the same conditions as [`core::ptr::read`].
376
+ ///
377
+ /// # Example
378
+ /// ```
379
+ /// # #![feature(portable_simd)]
380
+ /// # #[cfg(feature = "as_crate")] use core_simd::simd;
381
+ /// # #[cfg(not(feature = "as_crate"))] use core::simd;
382
+ /// # use simd::{Simd, SimdConstPtr};
383
+ /// let values = [6, 2, 4, 9];
384
+ /// let offsets = Simd::from_array([1, 0, 0, 3]);
385
+ /// let source = Simd::splat(values.as_ptr()).wrapping_add(offsets);
386
+ /// let gathered = unsafe { Simd::gather_ptr(source) };
387
+ /// assert_eq!(gathered, Simd::from_array([2, 6, 6, 9]));
388
+ /// ```
376
389
#[ must_use]
377
390
#[ inline]
378
391
#[ cfg_attr( miri, track_caller) ] // even without panics, this helps for Miri backtraces
@@ -392,6 +405,20 @@ where
392
405
/// # Safety
393
406
///
394
407
/// Enabled lanes must satisfy the same conditions as [`core::ptr::read`].
408
+ ///
409
+ /// # Example
410
+ /// ```
411
+ /// # #![feature(portable_simd)]
412
+ /// # #[cfg(feature = "as_crate")] use core_simd::simd;
413
+ /// # #[cfg(not(feature = "as_crate"))] use core::simd;
414
+ /// # use simd::{Mask, Simd, SimdConstPtr};
415
+ /// let values = [6, 2, 4, 9];
416
+ /// let enable = Mask::from_array([true, true, false, true]);
417
+ /// let offsets = Simd::from_array([1, 0, 0, 3]);
418
+ /// let source = Simd::splat(values.as_ptr()).wrapping_add(offsets);
419
+ /// let gathered = unsafe { Simd::gather_select_ptr(source, enable, Simd::splat(0)) };
420
+ /// assert_eq!(gathered, Simd::from_array([2, 6, 0, 9]));
421
+ /// ```
395
422
#[ must_use]
396
423
#[ inline]
397
424
#[ cfg_attr( miri, track_caller) ] // even without panics, this helps for Miri backtraces
@@ -519,6 +546,19 @@ where
519
546
/// # Safety
520
547
///
521
548
/// Each write must satisfy the same conditions as [`core::ptr::write`].
549
+ ///
550
+ /// # Example
551
+ /// ```
552
+ /// # #![feature(portable_simd)]
553
+ /// # #[cfg(feature = "as_crate")] use core_simd::simd;
554
+ /// # #[cfg(not(feature = "as_crate"))] use core::simd;
555
+ /// # use simd::{Simd, SimdMutPtr};
556
+ /// let mut values = [0; 4];
557
+ /// let offset = Simd::from_array([3, 2, 1, 0]);
558
+ /// let ptrs = Simd::splat(values.as_mut_ptr()).wrapping_add(offset);
559
+ /// unsafe { Simd::from_array([6, 3, 5, 7]).scatter_ptr(ptrs); }
560
+ /// assert_eq!(values, [7, 5, 3, 6]);
561
+ /// ```
522
562
#[ inline]
523
563
#[ cfg_attr( miri, track_caller) ] // even without panics, this helps for Miri backtraces
524
564
pub unsafe fn scatter_ptr ( self , dest : Simd < * mut T , LANES > ) {
@@ -533,6 +573,20 @@ where
533
573
/// # Safety
534
574
///
535
575
/// Enabled lanes must satisfy the same conditions as [`core::ptr::write`].
576
+ ///
577
+ /// # Example
578
+ /// ```
579
+ /// # #![feature(portable_simd)]
580
+ /// # #[cfg(feature = "as_crate")] use core_simd::simd;
581
+ /// # #[cfg(not(feature = "as_crate"))] use core::simd;
582
+ /// # use simd::{Mask, Simd, SimdMutPtr};
583
+ /// let mut values = [0; 4];
584
+ /// let offset = Simd::from_array([3, 2, 1, 0]);
585
+ /// let ptrs = Simd::splat(values.as_mut_ptr()).wrapping_add(offset);
586
+ /// let enable = Mask::from_array([true, true, false, false]);
587
+ /// unsafe { Simd::from_array([6, 3, 5, 7]).scatter_select_ptr(ptrs, enable); }
588
+ /// assert_eq!(values, [0, 0, 3, 6]);
589
+ /// ```
536
590
#[ inline]
537
591
#[ cfg_attr( miri, track_caller) ] // even without panics, this helps for Miri backtraces
538
592
pub unsafe fn scatter_select_ptr ( self , dest : Simd < * mut T , LANES > , enable : Mask < isize , LANES > ) {
0 commit comments