PowerPC(32 或 64)指令集是否有条件移动等效?显然可以使用条件分支来模拟它,但我想要一些优于它的东西。
问问题
1304 次
3 回答
3
PowerPC 至少有一个浮点条件移动操作 fsel,其工作原理如下:
fsel f0, f1, f2, f3 // f0 = ( f1 >= 0 ? f2 : f3 )
对于整数值,您可以使用位掩码来“选择”要使用的值。
这是关于这个主题的讨论(底部的整数)
于 2010-05-23T02:47:05.130 回答
2
请记住,PowerPC 是 RISC,因此指令集有意简单。您可以在 IBM“PowerPC Compiler Writer's Guide”(ISBN 0-9649654-0-2)中找到有用的提示 - 有许多条件序列(例如 max/min)的无分支实现示例,它们可能会给您一些想法.
此外,如果您有 AltiVec,并且您的代码可以矢量化,那么使用比较和vec_sel
.
于 2010-04-30T13:26:26.963 回答
2
单独使用fsel
通常会导致异常值(如 NaN 和 Inf)的错误结果。您必须仔细考虑每次比较的结果。
整数选择已在至少两个 PowerPC 变体中实现。
IBM 在其 AS/400 系统中有selii
, selir
, selri
,selrr
指令。这些可以为每个源在寄存器或带符号的 5 位立即数之间进行选择。该决定基于特定于 AS/400 的寄存器。
摩托罗拉/飞思卡尔拥有 e200 和 e500 系列(可能还有其他)中的“isel APU”。这些使用常规条件寄存器位,但只能从寄存器源中选择。
于 2010-12-28T08:33:52.817 回答