【发布时间】:2012-08-02 02:19:02
【问题描述】:
我有一个关于编译器设置符号的问题,特别是 CPU 功能标志(如 SSE、AES、AVX)实际上是如何设置的。例如,如果我用 -mavx 调用 gcc,__AVX__ 符号集 不管 将要构建代码的系统是否真的支持 AVX 指令,还是它之前检查过?
我之所以这样问,是因为我需要根据 CPU 功能构建特定的代码路径,并希望将其自动化,以便在基于构建系统的编译时确定正确的路径,而不是手动启用所需的功能。但是由于我唯一的 CPU 基本上支持所有功能,我无法测试我的上述假设(我知道第一世界的问题)
将会有很多代码,因此简单地保留所有内容并在运行时进行分支是不可接受的 - 并且假设我的库将在用于给定系统之前构建。
我的意思是,在最坏的情况下,我可以通过将 gcc 参数包装在可识别 cpuid 的脚本中来强制执行此行为,但如果 gcc 自动执行它会更可取。那么有没有人知道呢?
我最感兴趣的是 gcc 对此的看法,但我也很想知道其他 C 编译器的行为方式。
【问题讨论】:
标签: c gcc compiler-construction cpu symbols