如何使用基本的按位操作复制 PEXT(并行位提取)?

How to replicate PEXT (parallel bit extract) with basic bitwise ops?

我正在将一些代码从 Rust 移植到 Swift,我注意到他们使用 pext 方法进行一些位操作。因为它是 Intel 指令,所以我无法将其放入我的 Swift 代码中,所以我想知道哪一组按位指令(我可以在 Swift 中使用)能够获得与PEXT操作。

有关更多上下文,这里是 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

时这样做