[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [Bug 1841990] Re: instruction 'denbcdq' misbehaving
From: |
Mark Cave-Ayland |
Subject: |
[Qemu-devel] [Bug 1841990] Re: instruction 'denbcdq' misbehaving |
Date: |
Sat, 31 Aug 2019 17:52:31 -0000 |
Thanks for the report Paul (and also the investigation work Philippe).
So yes it seems the DFP code is another fallout from the conversion of
the floating point registers over to host-endian/VSR format. I've had a
quick look at this and it seems that the simple fix to compensate for
the FP registers not being contiguous anymore still won't work on
ppc64le.
In order to fix this properly I think the best solution is to use an
approach similar to that used in my last set of VSX patches, i.e. using
macros to avoid having separate code paths for big and little endian
hosts.
I can certainly come up with some patches for this, however I don't have
any ppc64le hardware to test it myself. If I were to do a trial
conversion of denbcdq would you be able to test it for me?
--
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1841990
Title:
instruction 'denbcdq' misbehaving
Status in QEMU:
New
Bug description:
Instruction 'denbcdq' appears to have no effect. Test case attached.
On ppc64le native:
--
gcc -g -O -mcpu=power9 bcdcfsq.c test-denbcdq.c -o test-denbcdq
$ ./test-denbcdq
0x00000000000000000000000000000000
0x0000000000000000000000000000000c
0x22080000000000000000000000000000
$ ./test-denbcdq 1
0x00000000000000000000000000000001
0x0000000000000000000000000000001c
0x22080000000000000000000000000001
$ ./test-denbcdq $(seq 0 99)
0x00000000000000000000000000000064
0x0000000000000000000000000000100c
0x22080000000000000000000000000080
--
With "qemu-ppc64le -cpu power9"
--
$ qemu-ppc64le -cpu power9 -L [...] ./test-denbcdq
0x00000000000000000000000000000000
0x0000000000000000000000000000000c
0x0000000000000000000000000000000c
$ qemu-ppc64le -cpu power9 -L [...] ./test-denbcdq 1
0x00000000000000000000000000000001
0x0000000000000000000000000000001c
0x0000000000000000000000000000001c
$ qemu-ppc64le -cpu power9 -L [...] ./test-denbcdq $(seq 100)
0x00000000000000000000000000000064
0x0000000000000000000000000000100c
0x0000000000000000000000000000100c
--
I started looking at the code, but I got confused rather quickly.
Could be related to endianness? I think denbcdq arrived on the scene
before little-endian was a big deal. Maybe something to do with
utilizing implicit floating-point register pairs... I don't think the
right data is getting to helper_denbcdq, which would point back to the
gen_fprp_ptr uses in dfp-impl.inc.c (GEN_DFP_T_FPR_I32_Rc). (Maybe?)
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1841990/+subscriptions
- [Qemu-devel] [Bug 1841990] [NEW] instruction 'denbcdq' misbehaving, Paul Clarke, 2019/08/29
- [Qemu-devel] [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Alex Bennée, 2019/08/30
- [Qemu-devel] [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Philippe Mathieu-Daudé, 2019/08/30
- [Qemu-devel] [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Philippe Mathieu-Daudé, 2019/08/30
- [Qemu-devel] [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Paul Clarke, 2019/08/30
- [Qemu-devel] [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Philippe Mathieu-Daudé, 2019/08/30
- [Qemu-devel] [Bug 1841990] Re: instruction 'denbcdq' misbehaving,
Mark Cave-Ayland <=
- [Qemu-devel] [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Paul Clarke, 2019/08/31