【发布时间】:2016-04-15 23:24:07
【问题描述】:
我在 Windows 7(目标平台 = Windows XP Embedded)上使用 Visual Studio 2012 Express 交叉编译 C++ 应用程序。目标 CPU 不支持 SSE 或 SSE2 指令。因此,我希望能够仔细检查我构建的 DLL 和 EXE 是否不使用任何 SSE 或 SSE2 指令。我该怎么做?
【问题讨论】:
-
当您可以简单地正确设置编译选项时,重复检查没有意义。
-
@HansPassant 我知道那个编译选项,我正在使用它。但是,我注意到我们自己构建的 QtCore4.dll 由于非法指令而在目标平台上崩溃。在与 OllyDbg 核对之后,发现它内部仍然有 SSE 指令,尽管我使用 -no-sse 和 -no-sse2 选项配置了 Qt 4.8.6。我现在试图理解为什么 DLL 仍然有 SSE 指令。我试图找出我们在 Qt 构建中忘记 /arch:IA32 选项的位置。我打算写一些脚本,所以这篇文章。
-
objdump -d | grep xmm可能是一个很好的初步近似值。 -
一些编译器使用 SSE/SSE2 进行标量 FP 数学运算,即使在 32 位二进制文件中也是如此。例如
float使用 SSE,double使用 SSE2。mulsd= FP 乘以标量双精度。 (mulpd= 压缩双精度,即 SIMD 向量,而不仅仅是向量寄存器中的低位元素。)
标签: visual-c++ assembly dll x86 sse