Valgrind非法指令AVX

使用valgrind评估我的程序时收到一些错误。 更准确地说,我得到的错误就像

vex amd64-> IR:未处理的指令字节:0xC5 0xF8 0x28 0x0 0xC5 0xF8 0x29 0x45 ……非法指令

我把问题分离成一个非常简单的例子

#include  int main() { float f __attribute__((aligned(16))); // No need to be aligned f = 2.0f; __m128 a = _mm_broadcast_ss(&f); return 0; } 

该程序使用gcc编译,选项为-mavx。 如果使用SSE2指令_mm_set1_ps,则会发生相同的错误,但仅在使用-mavx编译时才会发生。 使用-msse2编译程序时,valgrind报告没有错误。

我怀疑这是一个valgrind错误,但是找不到关于x86的任何报告。 我的机器是Core-i7 Sandy-Bridge和valgrind版本3.7.0。

如果有人有更好的替代valgrind的寄存器感知编程,我想知道。

提前致谢

mm_broadcast_ss转换为单个CPU指令,它需要AVX指令集 。 您可能需要更新的valgrind来支持该指令, 至少发布3.8。0(2012年8月10日) 。

有关说明,请参阅Valgrind核心文档 。

您正在使用2011年11月发布的非常古老的valgrind 3.7.0。它不支持AVX / AVX2。

在3.8.0中添加了对AVX的支持,在3.9.0中添加了对AVX2的支持。 最新版本是2014年11月发布的3.10.1。

目前的版本

发行说明