【问题标题】:Equivalent of PEXT instruction on ARM等价于 ARM 上的 PEXT 指令
【发布时间】:2021-11-18 16:55:05
【问题描述】:

ARMv7 和/或 ARMv8 指令集是否提供类似于 PEXT on x86 的指令?

如果不是,实现相同行为的最有效指令组合是什么?

【问题讨论】:

  • 没有这样的指令,不幸的是pext 在一般情况下很难模仿。如果您有一个特定的用例,我可能会建议一个有效的解决方法。
  • 很遗憾Anderson's "Bit Twiddling Hacks" 不包括这个操作:-(
  • 我想大家可以看看 Rosetta 这样的翻译人员是如何做到的。
  • @Siguza:从 gcc 和 clang 源代码的快速 grep 中,我不清楚任何一个编译器都能够在任何情况下发出 pext,除非调用一个内在函数。

标签: assembly x86 arm bit-manipulation arm64


【解决方案1】:

这是我的实现

    // w14 = pext(val: w13, mask: w15)
    // Used Regs x12-x15
    // (w13 & w15 will BROKEN after the loop)
    mov     w14, wzr;
.loop:
    cbz     w15, .pext_end;   // may accelerate by prepare with (w13 & w15)
    clz     w12, w15
    lsl     w13, w13, w12
    lsl     w15, w15, w12
    extr    w14, w14, w13, #31
    bfc     w15, #31, #1
    b      .loop
.pext_end:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2010-09-10
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    相关资源
    最近更新 更多