代码之家  ›  专栏  ›  技术社区  ›  swigganicks

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

  •  4
  • swigganicks  · 技术社区  · 6 年前

    我正在将一些代码从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 
    

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   swigganicks    6 年前

    @L°uVnhPhc答案正确。但在非英特尔体系结构上效率极低,因此我建议其他希望将BMI2指令合并到Swift代码中的人,仅在针对macOS时才这样做