gcc 的 __builtin_cpu_supports 是否检查 OS 支持?

does gcc's __builtin_cpu_supports check for OS support?

GCC 编译器提供了一组 builtins to test some processor features, like availability of certain instruction sets. But, according to this 线程,我们也可能知道某些 cpu 功能可能不会被 OS 启用。所以问题是:__builtin_cpu_supports 内在函数是否也检查 OS 是否启用了某些处理器功能?

没有

我通过将 noxsave 添加到 Linux 内核启动选项来禁用我的 Skylake 系统上的 AVX。当我执行 cat /proc/cpuinfo AVX(和 AVX2)不再出现​​时,当我使用 AVX 指令 运行 代码时它崩溃了。这告诉我 AVX 已被 OS.

禁用

但是,当我编译运行下面的代码时

#include <stdio.h>

int main(void) {
  __builtin_cpu_init();
  printf("%d\n", __builtin_cpu_supports ("sse"));
  printf("%d\n", __builtin_cpu_supports ("avx"));
}

它 returns 8 和 512。这意味着 __builtin_cpu_supports 不会检查 OS 是否禁用了 AVX。