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
- 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.
- 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. - 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. - 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:
- Clone the Google Highway git repository by running the
git clone https://github.com/google/highway.git google_highway
command. - Create a
hwy_ppcbe10_build
directory inside of thegoogle_highway
directory created in step #1. - 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