gpt4 book ai didi

assembly - 有条件地清除寄存器的无分支方式

转载 作者:行者123 更新时间:2023-12-01 22:09:52 24 4
gpt4 key购买 nike

是否有根据状态寄存器状态清除 32 位寄存器的无分支方式?它可以使用额外的清除寄存器和 CMOVcc 来实现,但对我来说在 32 位模式下的 x86 上太昂贵了。遗憾的是 CMOVcc 没有带有立即操作数的版本。从内存中读取也是不好的变体。

x86 上有 SETcc(尽管操作数是 1 个字节)但没有“CLEARcc”指令。

最佳答案

这可能会让您失望,但是CMOVcc在这方面非常好。将它与值为 0 的变量 ddZERO 一起使用并没有那么糟糕,尤其是在循环中。

CMOVcc rTarget, ddZERO

如果满足 cc 条件,则将 rTarget 寄存器重置为零。
否则(有一个否则)您可以在不匹配条件下反转场景和 CMOVcc。哪种选择更好取决于发生的频率。

如果您有一个值为 0 的寄存器,您应该改用它。但是,如果您不能使用(缓存的)内存位置来节省寄存器,那也不错。此估计基于经验,IIRC 在 L1 缓存内存位置使用常量在循环中的延迟几乎可以忽略不计。

关于assembly - 有条件地清除寄存器的无分支方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48723785/

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