[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug 1841990] Re: instruction 'denbcdq' misbehaving
From: |
Mark Cave-Ayland |
Subject: |
[Bug 1841990] Re: instruction 'denbcdq' misbehaving |
Date: |
Thu, 26 Sep 2019 16:59:48 -0000 |
Ahhh in that case I suspect that you may be seeing a bug in this commit:
commit 4e6d0920e7547e6af4bbac5ffe9adfe6ea621822
Author: Stefan Brankovic <address@hidden>
Date: Mon Jul 15 16:22:48 2019 +0200
target/ppc: Optimize emulation of vsl and vsr instructions
Optimization of altivec instructions vsl and vsr(Vector Shift Left/Rigt).
Perform shift operation (left and right respectively) on 128 bit value of
register vA by value specified in bits 125-127 of register vB. Lowest 3
bits in each byte element of register vB must be identical or result is
undefined.
For vsl instruction, the first step is bits 125-127 of register vB have
to be saved in variable sh. Then, the highest sh bits of the lower
doubleword element of register vA are saved in variable shifted,
in order not to lose those bits when shift operation is performed on
the lower doubleword element of register vA, which is the next
step. After shifting the lower doubleword element shift operation
is performed on higher doubleword element of vA, with replacement of
the lowest sh bits(that are now 0) with bits saved in shifted.
For vsr instruction, firstly, the bits 125-127 of register vB have
to be saved in variable sh. Then, the lowest sh bits of the higher
doubleword element of register vA are saved in variable shifted,
in odred not to lose those bits when the shift operation is
performed on the higher doubleword element of register vA, which is
the next step. After shifting higher doubleword element, shift operation
is performed on lower doubleword element of vA, with replacement of
highest sh bits(that are now 0) with bits saved in shifted.
Signed-off-by: Stefan Brankovic <address@hidden>
Reviewed-by: Richard Henderson <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: David Gibson <address@hidden>
In fact, looking at that commit I think you should just be able to
revert it for a quick test - does that enable your regression tests to
pass?
--
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
- [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Mark Cave-Ayland, 2019/09/24
- [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Paul Clarke, 2019/09/25
- [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Mark Cave-Ayland, 2019/09/25
- [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Paul Clarke, 2019/09/25
- [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Mark Cave-Ayland, 2019/09/26
- [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Paul Clarke, 2019/09/26
- [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Mark Cave-Ayland, 2019/09/26
- [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Paul Clarke, 2019/09/26
- [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Paul Clarke, 2019/09/26
- [Bug 1841990] Re: instruction 'denbcdq' misbehaving,
Mark Cave-Ayland <=
- [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Paul Clarke, 2019/09/26
- [Bug 1841990] Re: instruction 'denbcdq' misbehaving, Mark Cave-Ayland, 2019/09/26