https://bugs.kde.org/show_bug.cgi?id=489221

            Bug ID: 489221
           Summary: Unrecognized instruction: _mm256_cvtps_ph (vcvtps2ph)
    Classification: Developer tools
           Product: valgrind
           Version: 3.19.0
          Platform: unspecified
                OS: Unspecified
            Status: REPORTED
          Severity: normal
          Priority: NOR
         Component: vex
          Assignee: jsew...@acm.org
          Reporter: steve+...@hill-mail.co.uk
  Target Milestone: ---

Created attachment 171003
  --> https://bugs.kde.org/attachment.cgi?id=171003&action=edit
Minimal reproducer for the issue

SUMMARY

I am working on code that uses half-precision floating point numbers as a
storage format. However, when I run Valgrind on the application, it fails with
Unrecognized instruction on the instructions that do the float to half
conversion.

STEPS TO REPRODUCE
1. Save the attached reproducer `repro.c`
2. Compile with `gcc repro.c -march=haswell`
3. Run `valgrind ./a.out`

OBSERVED RESULT

(With Valgrind 3.16 but have confirmed the same issue exists with 3.19):

$ valgrind ./a.out 
==1257== Memcheck, a memory error detector
==1257== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==1257== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
==1257== Command: ./a.out
==1257== 
vex amd64->IR: unhandled instruction bytes: 0xC4 0xE3 0x7D 0x1D 0xC0 0x0 0xC5
0xF9 0x7F 0x44
vex amd64->IR:   REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
vex amd64->IR:   VEX=1 VEX.L=1 VEX.nVVVV=0x0 ESC=0F3A
vex amd64->IR:   PFX.66=1 PFX.F2=0 PFX.F3=0
==1257== valgrind: Unrecognised instruction at address 0x109182.
==1257==    at 0x109182: FloatToHalf (in /data/vagrant/valgrind/a.out)
==1257==    by 0x10922A: main (in /data/vagrant/valgrind/a.out)
==1257== Your program just tried to execute an instruction that Valgrind
==1257== did not recognise.  There are two possible reasons for this.
==1257== 1. Your program has a bug and erroneously jumped to a non-code
==1257==    location.  If you are running Memcheck and you just saw a
==1257==    warning about a bad jump, it's probably your program's fault.
==1257== 2. The instruction is legitimate but Valgrind doesn't handle it,
==1257==    i.e. it's Valgrind's fault.  If you think this is the case or
==1257==    you are not sure, please let us know and we'll try to fix it.
==1257== Either way, Valgrind will now raise a SIGILL signal which will
==1257== probably kill your program.
==1257== 
==1257== Process terminating with default action of signal 4 (SIGILL)
==1257==  Illegal opcode at address 0x109182
==1257==    at 0x109182: FloatToHalf (in /data/vagrant/valgrind/a.out)
==1257==    by 0x10922A: main (in /data/vagrant/valgrind/a.out)
==1257== 
==1257== HEAP SUMMARY:
==1257==     in use at exit: 0 bytes in 0 blocks
==1257==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==1257== 
==1257== All heap blocks were freed -- no leaks are possible
==1257== 
==1257== For lists of detected and suppressed errors, rerun with: -s
==1257== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Illegal instruction

EXPECTED RESULT

The instruction should be correctly handled

SOFTWARE/OS VERSIONS
Windows: 
macOS: 
Linux/KDE Plasma: 
(available in About System)
KDE Plasma Version: 
KDE Frameworks Version: 
Qt Version: 

ADDITIONAL INFORMATION

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to