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

            Bug ID: 366237
           Summary: pextrw - Unrecoginzed instruction
           Product: valgrind
           Version: 3.12 SVN
          Platform: Other
                OS: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: NOR
         Component: vex
          Assignee: jsew...@acm.org
          Reporter: olek...@gmail.com

Created attachment 100373
  --> https://bugs.kde.org/attachment.cgi?id=100373&action=edit
sample project

valgrind complains about unrecognized instruction, generated by NASM assembler.
A sample project is attached.

YASM and NASM  generate different instructions:

Yasm listing:
     1                                 %line 1+1 test_pextrw.nas
     2                                 [bits 64]
     3                                 [default rel]
     4
     5                                 [section .text align=16]
     6
     7                                 [global test_pextrw]
     8                                 test_pextrw:
     9 00000000 0F1007                  movups xmm0, [rdi]
    10 00000003 66480FC5C000            pextrw rax, xmm0, 0
    11 00000009 C3                      ret
    12

nasm listing:
     1                                  [bits 64]
     2                                  [default rel]
     3
     4                                  [section .text align=16]
     5
     6                                  [global test_pextrw]
     7                                  test_pextrw:
     8 00000000 0F1007                    movups xmm0, [rdi]
     9 00000003 66480F3A15C000            pextrw rax, xmm0, 0
    10 0000000A C3                        ret
    11


NASM  2.12.02rc7 (latest rc)
yasm 1.3.0.28.g51af (current git)
valgrind-3.12.0.SVN (current svn)

yasm generates instruction that executes on Intel Celeron E3400
nasm's instruction causes "illegal hardware instruction" exception on Celeron
E3400

both versions work on Core i7-4770S

This might be a bug in nasm.
I'll report to the nasm team too.

valgrind error messages on nasm version:

vex amd64->IR: unhandled instruction bytes: 0x66 0x48 0xF 0x3A 0x15 0xC0 0x0
0xC3 0x90 0x90
vex amd64->IR:   REX=1 REX.W=1 REX.R=0 REX.X=0 REX.B=0
vex amd64->IR:   VEX=0 VEX.L=0 VEX.nVVVV=0x0 ESC=0F3A
vex amd64->IR:   PFX.66=1 PFX.F2=0 PFX.F3=0
==6168== valgrind: Unrecognised instruction at address 0x400583.
==6168==    at 0x400583: ??? (test_pextrw.nas:9)
==6168==    by 0x4E4FCDC: (below main) (in /lib64/libc-2.12.so)
==6168== 1. Your program has a bug and erroneously jumped to a non-code
==6168==    location.  If you are running Memcheck and you just saw a
==6168==    warning about a bad jump, it's probably your program's fault.
==6168== 2. The instruction is legitimate but Valgrind doesn't handle it,
==6168==    i.e. it's Valgrind's fault.  If you think this is the case or
==6168==    you are not sure, please let us know and we'll try to fix it.
==6168== Either way, Valgrind will now raise a SIGILL signal which will
==6168== probably kill your program.
==6168==
==6168== Process terminating with default action of signal 4 (SIGILL)
==6168==  Illegal opcode at address 0x400583
==6168==    at 0x400583: ??? (test_pextrw.nas:9)
==6168==    by 0x4E4FCDC: (below main) (in /lib64/libc-2.12.so)

code produced by yasm works under valgrind without errors.

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

Reply via email to