Swift 如何用基本的按位运算复制PEXT(并行位提取)?

Swift 如何用基本的按位运算复制PEXT(并行位提取)?,swift,bit-manipulation,intel,bitwise-operators,Swift,Bit Manipulation,Intel,Bitwise Operators,我正在将一些代码从Rust移植到Swift,我注意到它们使用pext方法进行一些位操作。由于这是一条英特尔指令,我无法将其写入Swift代码,因此我想知道哪一组位指令(我可以在Swift中使用)能够获得与PEXT操作相同的结果 有关更多上下文,请参见 基本上,它使用一个掩码,将高阶位映射到连续的低阶位,并清除最终输出中的高阶位。例如: source = 1011 1110 1001 0011 mask = 0110 0011 1000 0101 s = pext(source, mask

我正在将一些代码从Rust移植到Swift,我注意到它们使用pext方法进行一些位操作。由于这是一条英特尔指令,我无法将其写入Swift代码,因此我想知道哪一组位指令(我可以在Swift中使用)能够获得与
PEXT
操作相同的结果

有关更多上下文,请参见

基本上,它使用一个掩码,将高阶位映射到连续的低阶位,并清除最终输出中的高阶位。例如:

source = 1011 1110 1001 0011
mask =   0110 0011 1000 0101 

s = pext(source, mask)

s -> 0000 0000 0011 0101 

我知道复制高级指令会影响性能,但我只是想让代码正常工作

@LưuVĩnhPhúc的答案是正确的。它在非英特尔体系结构上效率极低,因此我建议其他希望将BMI2指令合并到Swift代码中的人只在针对macOS时这样做,而且Swift中有两个内置函数,分别名为
\u pext\u u32
\u pext\u u64
,但它们仅为英特尔体系结构定义。@user28434如何在swift中访问它们?我找不到them@swigganicks,它位于
simd
模块中。