qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH] target/ppc: do not silence snan in xscvspdpn


From: Matheus K. Ferst
Subject: Re: [RFC PATCH] target/ppc: do not silence snan in xscvspdpn
Date: Mon, 13 Dec 2021 17:15:29 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.14.0

On 13/12/2021 09:36, Philippe Mathieu-Daudé wrote:
On 12/13/21 13:13, matheus.ferst@eldorado.org.br wrote:
From: Matheus Ferst <matheus.ferst@eldorado.org.br>

The non-signalling versions of VSX scalar convert to shorter/longer
precision insns doesn't silence SNaNs in the hardware. We are currently
honoring this behavior in xscvdpspn, since helper_xscvdpspn handles the
conversion with extracts/deposits/etc. OTOH, xscvspdpn uses
float32_to_float64 that calls parts_float_to_float, which uses
parts_return_nan that finally calls parts_silence_nan if the input is an
SNaN.

To address this problem, this patch adds a new float_status flag
(return_snan) to avoid the call to parts_silence_nan in the
float_class_snan case of parts_return_nan.

Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br>
---
This behavior was observed in a Power9 and can be reproduced with the
following code:

int main(void)
{
     __uint128_t t, b = 0x7f80000200000000;

     asm("xscvspdpn %x0, %x1\n\t"
         : "=wa" (t)
         : "wa" (b << 64));
     printf("0x%016" PRIx64 "%016" PRIx64 "\n",
            (uint64_t)(t >> 64), (uint64_t)t);

     b = 0x7ff0000000000002;
     asm("xscvdpspn %x0, %x1\n\t"
         : "=wa" (t)
         : "wa" (b << 64));
     printf("0x%016" PRIx64 "%016" PRIx64 "\n",
            (uint64_t)(t >> 64), (uint64_t)t);

     return 0;
}

Why not add this test in tests/tcg/ppc64le/ ?

I'll add it in v2. Is it ok to use __uint128_t in tests?

Thanks,
Matheus K. Ferst
Instituto de Pesquisas ELDORADO <http://www.eldorado.org.br/>
Analista de Software
Aviso Legal - Disclaimer <https://www.eldorado.org.br/disclaimer.html>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]