【发布时间】:2012-09-23 22:05:25
【问题描述】:
我能否为 Mac OS X 创建一个通用二进制文件,其中包含两个版本的应用程序,一个是用 SSE4.2 编译的,一个是用 SSE3 编译的?
在这种情况下,我会为支持 SSE4.2 的 CPU 自动加载使用 SSE4.2 编译的版本。
如果不是,我想获得建议,以便在不支持 SSE4.2 但在支持它的 CPU 上使用 SSE4.2 的旧 CPU 上运行我的应用程序。
请注意,我的目标是 Mac AppStore,如果有的话。 我在 Xcode 4.5 中使用 Clang。
【问题讨论】:
-
所有你需要做的是:1)检测指令集。 2) 分支到你想要的版本。
-
My answer here shows how to detect the instruction set.
__cpuid()内在函数特定于 MSVC。在 GCC 中,您可以使用内联汇编访问它。虽然我不确定你在使用什么,但应该有一种访问它的方法。 -
我不喜欢更改源代码文件,因为一些无法在旧 CPU 上运行的行来自第三方开源项目。
-
如果您无法更改源代码,那么您可能不走运,除非您 1) 找到一个编译器选项来执行此操作。或者 2) 构建一个包装器。
-
这就是为什么我正在寻找使用两个版本的应用程序制作通用二进制文件的原因。这也将有利于标准操作,如 ceil 和 floor 将在第二个版本中转换为 SSE4.1 指令。
标签: xcode sse universal-binary