Bug 286596

Summary: Lack of support for several SSE instructions
Product: [Developer tools] valgrind Reporter: david
Component: memcheckAssignee: Julian Seward <jseward>
Status: RESOLVED DUPLICATE    
Severity: crash CC: tom
Priority: NOR    
Version: 3.7.0   
Target Milestone: ---   
Platform: Unlisted Binaries   
OS: Linux   
Latest Commit: Version Fixed In:
Attachments: Valgrind's log output and disassembly of offending instructions

Description david 2011-11-14 14:09:00 UTC
Created attachment 65657 [details]
Valgrind's log output and disassembly of offending instructions

Version:           3.7.0 (using KDE 4.5.5) 
OS:                Linux

valgrind (MemCheck) aborts program execution when it finds SSE instructions like vcvtsi2ss, vcvtsi2sd, or even vxorps complaining about "unhandled instruction bytes" and "Unrecognised instruction".
Instructions are generated by GCC using SSE instead of 387 floating point instructions for simple FP math. Example (in C): (float)sx=((float)((uint16_t)Cfg.sx))/(uint32_t)i; generates 3 operand instruction "vcvtsi2ss %eax,%xmm0,%xmm0", that is unknown to valgrind (integer casts are informative only).
See attached file with valgrind's log, and partial disassembly of a few offending code compiled with GCC 4.5.2

Reproducible: Always

Steps to Reproduce:
Probably compiling any program with a floating point operation using a recent GCC with options like -ggdb -g3 -O0 -Wall -march=native -m64 (here the point is -march=native on a second generation i3, in my case, but probably will do the same on any SSE3+ capable)

Actual Results:  
Simply aborts execution due to lack of support for such instructions.

Expected Results:  
Execute the instruction and continue...
Comment 1 Tom Hughes 2011-11-14 14:25:11 UTC
These are AVX instructions.

*** This bug has been marked as a duplicate of bug 273475 ***