qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [Bug 1245543] [NEW] Wrong implementation of SSE4.1 pmovzxbw


From: p12
Subject: [Qemu-devel] [Bug 1245543] [NEW] Wrong implementation of SSE4.1 pmovzxbw and similar instructions
Date: Mon, 28 Oct 2013 15:53:24 -0000

Public bug reported:

QEMU 1.5.0 (and git version, as far as I can tell from the source code)
has incorrect implementation of pmovzxbw and similar SSE4.1
instructions. The instruction zero-extends the first 8 8-bit elements of
a vector to 16bit vector and puts them to another vector. The current
implementation applies this operation only to the first element and
zeros out the rest.

To verify, compile the attached program for SSE4.1 (g++ -msse4.1
cvtint.cc). On real hardware, it produces the following output:

$ ./a.out
1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0

On QEMU, the output is as follows:

$ ./a.out
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

QEMU is invoked as:

qemu-system-x86_64 \
    -M pc -cpu Haswell,+sse4.1,+avx,+avx2,+fma,enforce -m 512 \
    -serial stdio -no-reboot \
    -kernel vmlinuz -initrd initrd.img \
    -netdev user,id=user.0 -device rtl8139,netdev=user.0  -redir tcp:2222::22 \
    -hda ubuntu-amd64.ext3 \
    --append "rw console=tty root=/dev/sda"

** Affects: qemu
     Importance: Undecided
         Status: New

** Attachment added: "Program to verify this bug"
   https://bugs.launchpad.net/bugs/1245543/+attachment/3893823/+files/cvtint.cc

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1245543

Title:
  Wrong implementation of SSE4.1 pmovzxbw and similar instructions

Status in QEMU:
  New

Bug description:
  QEMU 1.5.0 (and git version, as far as I can tell from the source
  code) has incorrect implementation of pmovzxbw and similar SSE4.1
  instructions. The instruction zero-extends the first 8 8-bit elements
  of a vector to 16bit vector and puts them to another vector. The
  current implementation applies this operation only to the first
  element and zeros out the rest.

  To verify, compile the attached program for SSE4.1 (g++ -msse4.1
  cvtint.cc). On real hardware, it produces the following output:

  $ ./a.out
  1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0

  On QEMU, the output is as follows:

  $ ./a.out
  1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

  QEMU is invoked as:

  qemu-system-x86_64 \
      -M pc -cpu Haswell,+sse4.1,+avx,+avx2,+fma,enforce -m 512 \
      -serial stdio -no-reboot \
      -kernel vmlinuz -initrd initrd.img \
      -netdev user,id=user.0 -device rtl8139,netdev=user.0  -redir tcp:2222::22 
\
      -hda ubuntu-amd64.ext3 \
      --append "rw console=tty root=/dev/sda"

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1245543/+subscriptions



reply via email to

[Prev in Thread] Current Thread [Next in Thread]