Skip to content

Test programs that use the vextractbm, vextracthm, vextractwm, or vextractdm instructions fail on qemu-ppc64 (but not qemu-ppc64le)

Host environment

  • Operating system: Ubuntu 22.04
  • OS/kernel version: Linux ip-10-100-16-20 5.15.0-1031-aws #35-Ubuntu SMP Fri Feb 10 02:07:18 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
  • Architecture: x86_64
  • QEMU flavor: qemu-ppc64
  • QEMU version: 7.2.0
  • QEMU command line: -cpu power10 ./vsx_extract_test_030723

Emulated/Virtualized environment

  • Operating system: Ubuntu 22.04
  • OS/kernel version: Linux ip-10-100-16-20 5.15.0-1031-aws #35-Ubuntu SMP Fri Feb 10 02:07:18 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
  • Architecture: ppc64

Description of problem

Some of the test programs that use the vextractbm, vextracthm, vextractwm, or vextractdm instructions fail on qemu-ppc64 (but not qemu-ppc64le).

Steps to reproduce

  1. Download the vsx_mask_extract_runnable_test_030723.c test program from https://gist.githubusercontent.com/johnplatts/db0e9f6683e85e9288fde5c031b3c0e5/raw/ccfb8170f3e613398750830451eebb362875493d/vsx_mask_extract_runnable_test_030723.c.
  2. Install the ppc64 gcc cross-compiler and required libraries, which can be done using the sudo apt install build-essential gdb-multiarch g++-12-powerpc64-linux-gnu binutils-powerpc64-linux-gnu binutils-powerpc64-linux-gnu-dbg libc6-ppc64-cross libstdc++6-ppc64-cross command on Ubuntu 22.04.
  3. Compile the vsx_mask_extract_runnable_test_030723.c test program downloaded in step 1 using the powerpc64-linux-gnu-gcc-12 cross-compiler with the -mcpu=power10 option.
  4. Execute the program compiled in step 3 using the QEMU_LD_PREFIX=/usr/powerpc64-linux-gnu qemu-ppc64 -cpu power10 ./vsx_mask_extract_runnable_test_030723 command.

The issue can also be reproduced by compiling Google Highway and running its unit tests as follows:

  1. Clone the Google Highway git repository by running the git clone https://github.com/google/highway.git google_highway command.
  2. Create a hwy_ppcbe10_build directory inside of the google_highway directory created in step #1.
  3. In the hwy_ppc10be_build directory created in the previous step, execute the following commands:
    • CC=powerpc64-linux-gnu-gcc-12 CXX=powerpc64-linux-gnu-g++-12 cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_TARGET="powerpc64-linux-gnu" -DCMAKE_CXX_COMPILER_TARGET="powerpc64-linux-gnu" -DCMAKE_CROSSCOMPILING=true -DCMAKE_CROSSCOMPILING_EMULATOR='/usr/local/bin/qemu-ppc64;-cpu;power10' -DCMAKE_C_FLAGS='-mcpu=power10 -DHWY_DISABLED_TARGETS=6918373452571213824' -DCMAKE_CXX_FLAGS='-mcpu=power10 -DHWY_DISABLED_TARGETS=6918373452571213824'
    • QEMU_LD_PREFIX=/usr/powerpc64-linux-gnu make
    • QEMU_LD_PREFIX=/usr/powerpc64-linux-gnu ctest -j
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information