在 Godbolt 上,执行效果很好:
volatile __m512i v = _mm512_set_epi64(1, 0, 0, 0, 0, 0, 0, 0);
但全零则不然:
volatile __m512i v = _mm512_set_epi64(0, 0, 0, 0, 0, 0, 0, 0);
它产生信号SIGILL。非法指令?
这是为什么呢?
我正在使用带有标志 -std=c++23 -O0 -mavx512vl 的 clang 18.1。
事实上,如果我改变优化级别,效果似乎会反转。所以我只想知道为什么设置不同的输入会导致这些问题?