每个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