gpt4 book ai didi

assembly - 测试 256 位 YMM AVX 寄存器是否为零的最有效/惯用方法

转载 作者:行者123 更新时间:2023-12-02 01:48:56 27 4
gpt4 key购买 nike

我有一个 x86_64 例程,如果成功,它最终在 YMM 寄存器中以零结束,如果 YMM 寄存器,我想返回非零值。

我有一种方法可以通过清除另一个 YMM 寄存器,针对那个寄存器对我的寄存器进行 VPTEST,然后如果未设置 CF,则有条件地递增 return 寄存器(在我的例子中是 RAX):

"    xor    %%rax,   %%rax              \n" // clear RAX

" vxorpd %%ymm0, %%ymm0, %%ymm0 \n" // clear YMM0
" vptest %%ymm1, %%ymm0 \n" // compare YMM1 to zero

" jc endcheck \n" // branch over if no residue
" inc %%rax \n" // inc RAX otherwise

"endcheck: \n" // result is now in RAX

这看起来有点不透明。有没有更好的方法,或者更惯用或可读的方法?

最佳答案

结合上面的注释,可以分三行汇编完成:

"xor         %%rax,      %%rax    \n" // clear RAX
"vptest %%ymm1, %%ymm1 \n" // if YMM1 zero, set ZF
"setnz %%al \n" // set byte in RAX if not zero

这看起来更清晰,更像我的想法。

关于assembly - 测试 256 位 YMM AVX 寄存器是否为零的最有效/惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938296/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com