Bug 401822 - none/tests/ppc64/jm-vmx fails and produces assembler warnings
Summary: none/tests/ppc64/jm-vmx fails and produces assembler warnings
Status: RESOLVED FIXED
Alias: None
Product: valgrind
Classification: Developer tools
Component: general (show other bugs)
Version: unspecified
Platform: Other Linux
: NOR normal
Target Milestone: ---
Assignee: Julian Seward
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-12-06 13:38 UTC by Mark Wielaard
Modified: 2018-12-06 19:56 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
none/tests/ppc64/jm-insns.diff (13.90 KB, text/plain)
2018-12-06 13:42 UTC, Mark Wielaard
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Mark Wielaard 2018-12-06 13:38:47 UTC
Building 

gcc -DHAVE_CONFIG_H -I. -I../../..  -I../../.. -I../../../include -I../../../coregrind -I../../../include -I../../../VEX/pub -I../../../VEX/pub -DVGA_ppc64le=1 -DVGO_linux=1 -DVGP_ppc64le_linux=1 -DVGPV_ppc64le_linux_vanilla=1    -Winline -Wall -Wshadow -Wno-long-long -g -fno-stack-protector   -m64  -Wl,-z,norelro -Winline -Wall -O -g -mregnames -m64 -DHAS_ALTIVEC -maltivec  -MT jm_insns-jm-insns.o -MD -MP -MF .deps/jm_insns-jm-insns.Tpo -c -o jm_insns-jm-insns.o `test -f 'jm-insns.c' || echo './'`jm-insns.c
/tmp/ccub8B9V.s: Assembler messages:
/tmp/ccub8B9V.s:7810: Warning: invalid register expression
/tmp/ccub8B9V.s:7865: Warning: invalid register expression
/tmp/ccub8B9V.s:7882: Warning: invalid register expression
/tmp/ccub8B9V.s:8899: Warning: invalid register expression
/tmp/ccub8B9V.s:8958: Warning: invalid register expression
/tmp/ccub8B9V.s:8975: Warning: invalid register expression
/tmp/ccub8B9V.s:9270: Warning: invalid register expression
/tmp/ccub8B9V.s:9321: Warning: invalid register expression
/tmp/ccub8B9V.s:9338: Warning: invalid register expression
/tmp/ccub8B9V.s:9612: Warning: invalid register expression
/tmp/ccub8B9V.s:9649: Warning: invalid register expression
/tmp/ccub8B9V.s:9666: Warning: invalid register expression
/tmp/ccub8B9V.s:9914: Warning: invalid register expression
/tmp/ccub8B9V.s:9965: Warning: invalid register expression
/tmp/ccub8B9V.s:9982: Warning: invalid register expression
/tmp/ccub8B9V.s:10234: Warning: invalid register expression
/tmp/ccub8B9V.s:10292: Warning: invalid register expression
/tmp/ccub8B9V.s:10309: Warning: invalid register expression
/tmp/ccub8B9V.s:10605: Warning: invalid register expression
/tmp/ccub8B9V.s:10656: Warning: invalid register expression
/tmp/ccub8B9V.s:10673: Warning: invalid register expression
/tmp/ccub8B9V.s:11860: Warning: invalid register expression
/tmp/ccub8B9V.s:11911: Warning: invalid register expression
/tmp/ccub8B9V.s:12397: Warning: invalid register expression
/tmp/ccub8B9V.s:12441: Warning: invalid register expression
/tmp/ccub8B9V.s:12458: Warning: invalid register expression
/tmp/ccub8B9V.s:12849: Warning: invalid register expression
/tmp/ccub8B9V.s:12900: Warning: invalid register expression
/tmp/ccub8B9V.s:12917: Warning: invalid register expression
/tmp/ccub8B9V.s:13197: Warning: invalid register expression
/tmp/ccub8B9V.s:13234: Warning: invalid register expression
/tmp/ccub8B9V.s:13251: Warning: invalid register expression
/tmp/ccub8B9V.s:13721: Warning: invalid register expression
/tmp/ccub8B9V.s:13765: Warning: invalid register expression
/tmp/ccub8B9V.s:13782: Warning: invalid register expression
/tmp/ccub8B9V.s:18346: Warning: invalid register expression
/tmp/ccub8B9V.s:18390: Warning: invalid register expression
/tmp/ccub8B9V.s:18407: Warning: invalid register expression
/tmp/ccub8B9V.s:18832: Warning: invalid register expression
/tmp/ccub8B9V.s:18872: Warning: invalid register expression
/tmp/ccub8B9V.s:18889: Warning: invalid register expression
mv -f .deps/jm_insns-jm-insns.Tpo .deps/jm_insns-jm-insns.Po

The testcase also fails:
jm-vmx:          valgrind   ./jm-insns -a 
*** jm-vmx failed (stdout) ***

The warnings are about mfvscr %r10 and vor %r6.

Which come from the following asm statements:

__asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));

__asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));

It looks to me that the constraints are wrong on those.
The "=vr" should probably be "=v".
Comment 1 Mark Wielaard 2018-12-06 13:42:29 UTC
Created attachment 116713 [details]
none/tests/ppc64/jm-insns.diff

This changes all the constriants for mfvscr and vor from "=vr" to "=v".
This makes jm-insns.c compile without warnings and the tests now passes for me.
Comment 2 Mark Wielaard 2018-12-06 19:56:10 UTC
After discussion on irc I committed this:

commit a0d97e88ec6d71239d30a5a4b2b129e094150873
Author: Mark Wielaard <mark@klomp.org>
Date:   Thu Dec 6 20:52:22 2018 +0100

    Bug 401822 Fix asm constraints for ppc64 jm-vmx jm-insns.c test.
    
    The mfvscr and vor instructions in jm-insns.c had a "=vr" constraint.
    This should have been an "=v" constraint. This resolved assembler
    warnings and the testcase failing on ppc64le with gcc 8.2 and
    binutils 2.30.