PowerPC (32 または 64) 命令セットに同等の条件付き移動はありますか? 条件分岐を使ってエミュレートできるのは明らかですが、それを上回るものが欲しいです。
3 に答える
PowerPCには、少なくとも浮動小数点の条件付き移動操作fselがあり、これは次のように機能します。
fsel f0, f1, f2, f3 // f0 = ( f1 >= 0 ? f2 : f3 )
整数値の場合、ビットマスクを使用して、使用する値を「選択」できます。
これがこのトピックに関する議論です(下部の整数)
単独で使用fsel
すると、NaNやInfなどの例外的な値に対して誤った結果が生じることがよくあります。各比較の結果を慎重に検討する必要があります。
整数選択は、PowerPCの少なくとも2つのバリアントに実装されています。
IBMのAS/400システムには、、、、のselii
命令selir
があります。これらは、ソースごとにレジスタまたは符号付き5ビットイミディエートから選択できます。この決定は、AS/400固有のレジスターに基づいています。selri
selrr
Motorola / Freescaleには、e200およびe500シリーズ(および場合によってはその他)に見られる「iselAPU」があります。これらは通常の条件レジスタビットを使用しますが、レジスタソースからのみ選択できます。
PowerPC は RISC であるため、命令セットは意図的に単純化されていることに注意してください。IBM "PowerPC Compiler Writer's Guide" (ISBN 0-9649654-0-2) に役立つヒントがありますが、条件付きシーケンス (max/min など) の分岐のない実装の例がいくつかあり、いくつかのアイデアを得ることができます。 .
また、AltiVec があり、コードをベクトル化できる場合は、たとえば比較とvec_sel
.