[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PULL 8/8] softfloat: Specialize udiv_qrnnd for ppc64
From: |
Laurent Vivier |
Subject: |
Re: [Qemu-devel] [PULL 8/8] softfloat: Specialize udiv_qrnnd for ppc64 |
Date: |
Wed, 31 Oct 2018 19:46:47 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 |
On 05/10/2018 20:02, Richard Henderson wrote:
> The ISA has a 128/64-bit division instruction, though it assumes the
> low 64-bits of the numerator are 0, and so requires a bit more fixup
> than a full 128-bit division insn.
>
> Reviewed-by: David Gibson <address@hidden>
> Signed-off-by: Richard Henderson <address@hidden>
> ---
> include/fpu/softfloat-macros.h | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
>
> diff --git a/include/fpu/softfloat-macros.h b/include/fpu/softfloat-macros.h
> index eafc68932b..c86687fa5e 100644
> --- a/include/fpu/softfloat-macros.h
> +++ b/include/fpu/softfloat-macros.h
> @@ -647,6 +647,22 @@ static inline uint64_t udiv_qrnnd(uint64_t *r, uint64_t
> n1,
> asm("dlgr %0, %1" : "+r"(n) : "r"(d));
> *r = n >> 64;
> return n;
> +#elif defined(_ARCH_PPC64)
> + /* From Power ISA 3.0B, programming note for divdeu. */
> + uint64_t q1, q2, Q, r1, r2, R;
> + asm("divdeu %0,%2,%4; divdu %1,%3,%4"
> + : "=&r"(q1), "=r"(q2)
> + : "r"(n1), "r"(n0), "r"(d));
> + r1 = -(q1 * d); /* low part of (n1<<64) - (q1 * d) */
> + r2 = n0 - (q2 * d);
> + Q = q1 + q2;
> + R = r1 + r2;
> + if (R >= d || R < r2) { /* overflow implies R > d */
> + Q += 1;
> + R -= d;
> + }
> + *r = R;
> + return Q;
> #else
> uint64_t d0, d1, q0, q1, r1, r0, m;
>
>
This breaks qemu-s390x (and probably some others) on PPC64.
sudo chroot chroot/s390x/stretch/ apt-get update --yes
Ign:1 http://ftp.de.debian.org/debian stretch InRelease
Hit:2 http://ftp.de.debian.org/debian stretch Release
0% [Working]Illegal instruction
I didn't find any relevant information with "QEMU_STRACE=
QEMU_SINGLESTEP= QEMU_LOG=in_asm,op,unimp,int"
I will try to add some traces manually.
Thanks,
Laurent
- [Qemu-devel] [PULL 0/8] softfloat queue, Richard Henderson, 2018/10/05
- [Qemu-devel] [PULL 1/8] softfloat: remove float64_trunc_to_int, Richard Henderson, 2018/10/05
- [Qemu-devel] [PULL 2/8] gitmodules: add berkeley's softfloat + testfloat version 3, Richard Henderson, 2018/10/05
- [Qemu-devel] [PULL 4/8] softfloat: Replace countLeadingZeros32/64 with clz32/64, Richard Henderson, 2018/10/05
- [Qemu-devel] [PULL 6/8] softfloat: Specialize udiv_qrnnd for x86_64, Richard Henderson, 2018/10/05
- [Qemu-devel] [PULL 8/8] softfloat: Specialize udiv_qrnnd for ppc64, Richard Henderson, 2018/10/05
- Re: [Qemu-devel] [PULL 8/8] softfloat: Specialize udiv_qrnnd for ppc64,
Laurent Vivier <=
- [Qemu-devel] [PULL 7/8] softfloat: Specialize udiv_qrnnd for s390x, Richard Henderson, 2018/10/05
- [Qemu-devel] [PULL 5/8] softfloat: Fix division, Richard Henderson, 2018/10/05
- [Qemu-devel] [PULL 3/8] tests/fp/fp-test: add floating point tests, Richard Henderson, 2018/10/05
- Re: [Qemu-devel] [PULL 0/8] softfloat queue, Peter Maydell, 2018/10/08