我正在尝试使用pin工具计算GCC创建的二进制代码中CPU所执行的动态浮点指令的数量,该二进制代码由poly Bench基准测试为30种不同程序编写。根据x86编码器-解码器(XED)文档,x86中的所有浮动指令均在X87_ALU类别下。
由于某种原因,与所有其他指令类别(如二进制,加载,存储,nop等)不同,我对所有程序将其设为零。我使用objdump分解了二进制文件,看不到带有从f开始的操作码的一行。
[此外,我使用emscripten(emcc)为所有程序生成了Web汇编(.wasm)二进制文件,后来将.wasm二进制文件转换为反汇编的.wat文件。在这些文件中,我也看不到任何浮点指令。
PS:从我一直在做的google搜索中,我了解到x86具有完全不同的浮点单元和基于堆栈的处理方式。也许我在这方面缺少一些东西?
关于如何在反汇编的二进制文件中查看浮点指令的任何线索?
对于几乎所有现代代码,不使用FPU,而是使用标量SSE。
使用FPU(而不是标量SSE)的原因是:
sin()
和sqrt()
之类的操作,或使用BCD,但是代码大小比性能重要得多。这是极不可能的。