每個LLVM IR'fcmp'指令是否都有兼容的X86 cmpps指令? 反之亦然?每個X86 cmpps指令(比如說只有寄存器操作數)可以用一個LLVM的'fcmp'指令來描述嗎? 問題的一個棘手部分是NaN's,Inf's,-0.0和其他角落案例如何由每種語言處理。X86'cmpps'指令和LLVM IR'fcmp'指令是否可互換?
0
A
回答
1
不是一個完整的答案,因爲我不太瞭解LLVM IR,但這太長了評論。
每個LLVM IR'fcmp'指令是否都有兼容的X86 cmpps指令?
絕對不準確;如果向量的上層元素中存在大量垃圾,則可能會在C抽象機器不會這樣做的MXCSR狀態位中引發無效或非常規異常。
但是對於標量操作數的CMPSS,您可以做所有事情。如果您正在執行標量比較,通常使用UCOMISS來設置標誌,而不是使用CMPSS在目標XMM寄存器中生成0或-1,通常會更好。
有關x86 XMM CMPp/s指令的最佳文檔可在CMPPD entry(按字母順序排列,其他位置參考其表格)中找到。該HTML提取並不完美,請參閱英特爾的PDF格式更好的表格。 (在x86標籤wiki鏈接。)
如果你需要避免比較操作數,可能是NaN當拋出一個異常,你可能無法使用CMPSS沒有AVX,至少不會有效。 SSE版本只允許前8個謂詞(imm8 = 0..7),其中許多是S(信令)變體,即如果任一操作數是QNAN,則它們會增加#IA
。 AVX增加了所有不發信號謂詞的Q(靜音)版本,如UCOMISS。
當然,如果你的目標是一個32位的CPU,並且不能承擔SSE支持,你需要使用x87。 (FCOMI,或者如果你甚至不能承擔P6或更新的FCOM)。
相關問題
- 1. 替換LLVM中的指令
- 2. 複製llvm指令
- 3. LLVM IR alloca指令
- 4. LLVM指令調度
- 5. LLVM分段錯誤/需要使用指令而不是指令*
- 6. 替換LLVM指令的操作數
- 7. 替換LLVM IR中的指令
- 8. LLVM IR指令插入
- 9. LLVM無操作指令?
- 10. LLVM ICmpInst指令鑄造
- 11. 刪除一堆llvm指令
- 12. 如何插入LLVM指令?
- 13. LLVM擦除指令IR
- 14. LLVM找不到getelementptr指令
- 15. ldc.i4.x和ldc.i4 x指令是否可互換且語義相同?
- 16. 是否有可能通過AngularJS在指令中加載指令?
- 17. 是否可以用另一個指令代替一個指令
- 18. LLVM指令變量名稱和參數
- 19. LLVM「指令不稱霸所有用途」 - 插入新的指令
- 20. 如何查找指令在LLVM中是否占主導地位?
- 21. 將ARM指令轉換爲i386指令
- 22. 指令可與其他指令溝通
- 23. MSIL是否有ROL和ROR指令?
- 24. 可以指令
- 25. 什麼是有序和無序的LLVM CmpInst比較指令?
- 26. 確定子指令是否嵌套在父指令中
- 27. 如何檢測指令B是否在指令A
- 28. 如何在LLVM中打印出指令?
- 29. 插入GetElementpointer指令在LLVM IR
- 30. 創建新的存儲指令LLVM