分解位域的特殊用途指令 [已关闭]

Special purpose instructions to decompose bitfields [closed]

提问人:Dess 提问时间:9/28/2023 最后编辑:Homer512Dess 更新时间:9/28/2023 访问量:102

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答这个问题。

上个月关闭。

我有这个编码为 32 位指令的字节码。每个操作码的操作数可以具有不同的格式。通常,为了解码每条指令,我会执行通常的 C 位 twiddling 操作。但是,我想知道是否有 simd/内在指令可以帮助加快解码速度。解码现在不是瓶颈,因为我正处于项目的开始阶段,但如果它们可用,我想尝试一些特殊用途的指令来做到这一点;即使只是为了学习经验。

是否有此类类型的 simd/内部函数旨在将位域分解为组成字段。

C x86-64 SIMD 内部函数

评论

0赞 Homer512 9/28/2023
我假设您使用 x86-64 而不是 ARM 或其他东西?
1赞 Shawn 9/28/2023
内部函数是 和_bextr_u32()_pext_u32()
3赞 Bodo 9/28/2023
你写道:“我有这个字节码,编码为 32 位指令。你忘了显示一些代码吗?您是否检查过由优化编译器生成的代码是否能从手动优化中受益?
3赞 nielsen 9/28/2023
如果没有一个最小的例子来显示你需要做的解码,就不可能给出一个准确的答案。
1赞 Peter Cordes 9/29/2023
所以是的,对于使用规则模式从固定宽度的 32 位指令中解码字段,或者对于至少一个字段可以很好地工作,或者并行解码多个字段,也许使用不同的向量解码来自即将到来的 32 位指令的相同序列中的不同字段。或者将每个 32 位指令零扩展到 64 位,您可以在其中将字段分成字节或 dwords,这些字节或 dword 可以通过存储到数组并重新加载来半有效地提取回整数注册器。(x86 负载效率很高。pdeppextvpmultishiftqbvpmovzxdqmovzx

答: 暂无答案