すべてのLLVM IR 'fcmp'命令に互換性のあるX86 cmpps命令がありますか? そして、その逆はどうですか?単一のLLVM 'fcmp'命令を使って、すべてのX86 cmpps命令(レジスタオペランドのみを記述する)を記述できますか? 問題の難しい部分は、NaN、Inf's、-0.0などのコーナーケースがどのように扱われるかです。X86 'cmpps'命令とLLVM IR 'fcmp'命令は入れ替え可能ですか?
答えて
私はLLVM IRについてよく知らないので、完全な答えではありませんが、これはコメントには長すぎます。
すべてのLLVM IR 'fcmp'命令に互換性のあるX86 cmpps命令がありますか?
間違いなく正確です。ベクトルの上位要素に大きなゴミがある場合、C抽象マシンがそうしなかったMXCSRステータスビットにInvalidまたはDenormal例外を発生させることができます。
スカラーオペランドのCMPSSでは、おそらくすべてを実行できます。スカラ比較の場合は、宛先XMMレジスタに0または-1を生成するためにCMPSSを使用する代わりに、UCOMISSを使用してフラグを設定する方がよい場合がよくあります。
x86 XMM CMPp/s命令の最良のドキュメントは、CMPPD entry(アルファベット順、他はその表を参照)の下にあります。そのHTML抽出は完璧ではありません。より良いフォーマットの表についてはインテルのPDFを参照してください。あなたがNaNであってもよいオペランドを比較するときに例外を避けるために必要がある場合(x86タグのwikiのリンク。)
、あなたは少なくともない効率的、AVXなしCMPSSを使用することはできません。 SSEバージョンでは、最初の8つの述語(imm8 = 0..7)のみが許可され、その多くはS(シグナリング)のバラエティであるため、どちらかのオペランドがQNANの場合は#IA
になります。 AVXは、UCOMISSのように、シグナルを出さないすべての述語のQ(Quiet)バージョンを追加します。
もちろん、32ビットCPUをターゲットにしており、SSEのサポートを受けることができない場合は、x87を使用する必要があります。 (FCOMI、またはあなたがP6以上を想定していない場合でも、FCOM)。
- 1. LLVM IR alloca命令
- 2. LLVM命令を挿入するには?
- 3. 使い方* LLVM ::命令:: user_back()
- 4. LLVMでの命令の置き換え
- 5. LLVM IR命令のテキスト表現を取得する方法は?
- 6. RDTSCPと命令命令
- 7. llvm命令の行番号
- 8. x86デコード命令opcodeバイト
- 9. x86命令の機能別リファレンス
- 10. LLVM命令のオペランドの取得
- 11. MOVDQAとMOVAPS x86命令の違いは?
- 12. x86アセンブリレジスタとmov命令とジャンプオフセット
- 13. SIMD命令で値を入れ替えるには?
- 14. ロックでの命令の並べ替え
- 15. LLVM命令の変数名とパラメータ
- 16. x86アセンブリの乗算命令と除算命令のオペランド、16ビット以上
- 17. CPU命令の並べ替えのトレース
- 18. "out"と "in"命令の特権命令はありますか?
- 19. LEA命令?
- 20. x86 ROR命令はどのように機能しますか?
- 21. 命令レベルプロファイリング:命令ポインタの意味?
- 22. llvm - br命令のラベルを取得
- 23. 命令コード
- 24. Direction/Sign x86命令セットのビット拡張
- 25. 理解のx86 R/m32の命令
- 26. x86 assembly-masm32:無効な命令のオペランド
- 27. アセンブリx86補助演算命令
- 28. X86アセンブリ - IDIV命令の処理
- 29. LLVM IRからの基本ブロックの最初の命令の消去?
- 30. x86 ASM:DD「命令」として使用されていますか?