Macro core::simd::simd_swizzle[][src]

pub macro simd_swizzle {
    ($vector : expr, $index : expr $(,) ?) => { ... },
    ($first : expr, $second : expr, $index : expr $(,) ?) => { ... },
}
🔬 This is a nightly-only experimental API. (portable_simd #86656)
Expand description

通过从要使用的源 vector 或 vectors 的 lanes 中选择值来构造新的 vector。 当 swizzling 一个 vector 时,结果 vector 的索引由 usizeconst 数组表示,如 Swizzle。 当 swizzling 两个 vectors 时,索引由 Whichconst 数组表示,如 Swizzle2

Examples

一个源 vector

let v = Simd::<f32, 4>::from_array([0., 1., 2., 3.]);

// 保持相同的大小
let r = simd_swizzle!(v, [3, 0, 1, 2]);
assert_eq!(r.to_array(), [3., 0., 1., 2.]);

// 改变 lane 数
let r = simd_swizzle!(v, [3, 1]);
assert_eq!(r.to_array(), [3., 1.]);
Run

两个源 vectors

use Which::*;
let a = Simd::<f32, 4>::from_array([0., 1., 2., 3.]);
let b = Simd::<f32, 4>::from_array([4., 5., 6., 7.]);

// 保持相同的大小
let r = simd_swizzle!(a, b, [First(0), First(1), Second(2), Second(3)]);
assert_eq!(r.to_array(), [0., 1., 6., 7.]);

// 改变 lane 数
let r = simd_swizzle!(a, b, [First(0), Second(0)]);
assert_eq!(r.to_array(), [0., 4.]);
Run