Skip to content

Commit

Permalink
add gather/scatter tests for pointers of pointers
Browse files Browse the repository at this point in the history
  • Loading branch information
gnzlbg committed May 24, 2018
1 parent 1ffc30a commit 180342d
Showing 1 changed file with 71 additions and 0 deletions.
71 changes: 71 additions & 0 deletions src/test/run-pass/simd-intrinsic-generic-gather.rs
Expand Up @@ -77,4 +77,75 @@ fn main() {

assert_eq!(x, [42., 1., 43., 3., 4., 5., 45., 7.]);
}

// test modifying array of *const f32
let mut y = [
&x[0] as *const f32,
&x[1] as *const f32,
&x[2] as *const f32,
&x[3] as *const f32,
&x[4] as *const f32,
&x[5] as *const f32,
&x[6] as *const f32,
&x[7] as *const f32
];

let default = x4(y[0], y[0], y[0], y[0]);
let s_strided = x4(y[0], y[2], y[0], y[6]);

// reading from *const
unsafe {
let pointer = &y[0] as *const *const f32;
let pointers = x4(
pointer.offset(0) as *const *const f32,
pointer.offset(2),
pointer.offset(4),
pointer.offset(6)
);

let r_strided = simd_gather(default, pointers, mask);

assert_eq!(r_strided, s_strided);
}

// reading from *mut
unsafe {
let pointer = &mut y[0] as *mut *const f32;
let pointers = x4(
pointer.offset(0) as *mut *const f32,
pointer.offset(2),
pointer.offset(4),
pointer.offset(6)
);

let r_strided = simd_gather(default, pointers, mask);

assert_eq!(r_strided, s_strided);
}

// writing to *mut
unsafe {
let pointer = &mut y[0] as *mut *const f32;
let pointers = x4(
pointer.offset(0) as *mut *const f32,
pointer.offset(2),
pointer.offset(4),
pointer.offset(6)
);

let values = x4(y[7], y[6], y[5], y[1]);
simd_scatter(values, pointers, mask);

let s = [
&x[7] as *const f32,
&x[1] as *const f32,
&x[6] as *const f32,
&x[3] as *const f32,
&x[4] as *const f32,
&x[5] as *const f32,
&x[1] as *const f32,
&x[7] as *const f32
];
assert_eq!(y, s);
}
}

0 comments on commit 180342d

Please sign in to comment.