From patchwork Fri Mar 22 17:39:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kito Cheng X-Patchwork-Id: 10866367 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AEBAF139A for ; Fri, 22 Mar 2019 17:43:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 984122A978 for ; Fri, 22 Mar 2019 17:43:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8C79D2A97C; Fri, 22 Mar 2019 17:43:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7FD882A978 for ; Fri, 22 Mar 2019 17:43:39 +0000 (UTC) Received: from localhost ([127.0.0.1]:60805 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h7OCg-0005SV-1S for patchwork-qemu-devel@patchwork.kernel.org; Fri, 22 Mar 2019 13:43:38 -0400 Received: from eggs.gnu.org ([209.51.188.92]:58979) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h7OBL-0004N7-2x for qemu-devel@nongnu.org; Fri, 22 Mar 2019 13:42:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h7O8r-0007aD-ON for qemu-devel@nongnu.org; Fri, 22 Mar 2019 13:39:42 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:43691) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h7O8p-0007Oc-Tq; Fri, 22 Mar 2019 13:39:41 -0400 Received: by mail-wr1-x443.google.com with SMTP id d17so3225732wre.10; Fri, 22 Mar 2019 10:39:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc; bh=JSoN7f9QkT3lcw9+F8G1hSeLONiyvWz6vPe2yIMOcfM=; b=WuMsqQzJyqdcRZclpwDoj8CFMeA9MS43gie0V1tkOqZZrV6nZ3qZl4fsYXAydm4Uqr wI9lq8l4piyllFqxMaS+gTj1ZtF57axTwRuSmXBl3Vcft1xkLvt4iadTArTS4VF8U9JX FLH4EE2Vj8ovejyEnOx+Xlsz76Nl1JvZF2mRHUuS3/2ahUzUr91DqTobftgOtDRwakfu evglS2GVU49Gih5GfO1D+7Zx3+XJNe9ExdFicqW/aVIgvv9BKKIq7ZGppkp7CHzV3rn5 oMGNZePybAZEsvLkxe80liGXxyylzRGAK+7VAqQKmqLqU7lLBU5Lz5T51K1c9+nxUJra vfnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=JSoN7f9QkT3lcw9+F8G1hSeLONiyvWz6vPe2yIMOcfM=; b=tfGuAjO9g/eQjcSxQZON5puKd9Dx6LjtUnuG01VM5jfMVPZAF5QN0KW/3Z3/Fj4zW8 fSSwFEo72THFutWeN1zWLZ2hezGjO7ljJbX2E1oHwHcIM/8Qvvi1EcSjmKRBrnuMHAgC HoDhH/wznKev9tOGjenZMF3Nz/BAMcyp/mEC7zQAt8NJgoOL4wqP/SA23BkFBgc9uhL2 LSKh5xOY8uXYt4/84tsaofXpjQtATE8H47e9KL8iiKDSp/bPQS9+dzUri/7lecL/WsEO meCCnJe5x418NIo7g89d6Z6bmBlg2AvjtMZZu0MbRx7Jry7bkYO4WlBsK3DvsRdwi33r 3hPA== X-Gm-Message-State: APjAAAWcf/tAvfRHvaViTYipbx/3yrxVHyqe4M6p962Giw7OQnjSXxO9 eMpdx9+htUHbZuIelfifBIryxA0TqwtU1EDD21gDxGcA X-Google-Smtp-Source: APXvYqziraxUmlNLwc89t9sMTthRtLUUZWyfy2BvoK+ZK2x8blHArTVt3juZoMbxuLt9+T0onU24y+pDunltEpdvxsU= X-Received: by 2002:a5d:6207:: with SMTP id y7mr7029994wru.60.1553276377419; Fri, 22 Mar 2019 10:39:37 -0700 (PDT) MIME-Version: 1.0 From: Kito Cheng Date: Sat, 23 Mar 2019 01:39:26 +0800 Message-ID: To: qemu-devel@nongnu.org, alex.bennee@linaro.org, cota@braap.org X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::443 Subject: [Qemu-devel] [PATCH] hardfloat: fix float32/64 fused multiply-add X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-riscv@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP hardfloat fused multiply-add might fallback to softfloat mode in some situation, but it might already changed the value of input operands, so we must restore those value before fallback. This bug is catched by running gcc testsuite on RISC-V qemu. Signed-off-by: Kito Cheng --- fpu/softfloat.c | 7 +++++++ 1 file changed, 7 insertions(+) } @@ -1608,6 +1609,8 @@ float32_muladd(float32 xa, float32 xb, float32 xc, int flags, float_status *s) if (unlikely(f32_is_inf(ur))) { s->float_exception_flags |= float_flag_overflow; } else if (unlikely(fabsf(ur.h) <= FLT_MIN)) { + ua.h = ux.h; + uc.h = uy.h; goto soft; } } @@ -1662,6 +1665,8 @@ float64_muladd(float64 xa, float64 xb, float64 xc, int flags, float_status *s) } ur.h = up.h + uc.h; } else { + union_float64 ux = ua, uy = uc; + if (flags & float_muladd_negate_product) { ua.h = -ua.h; } @@ -1674,6 +1679,8 @@ float64_muladd(float64 xa, float64 xb, float64 xc, int flags, float_status *s) if (unlikely(f64_is_inf(ur))) { s->float_exception_flags |= float_flag_overflow; } else if (unlikely(fabs(ur.h) <= FLT_MIN)) { + ua.h = ux.h; + uc.h = uy.h; goto soft; } } diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 4610738..f53f391 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1596,6 +1596,7 @@ float32_muladd(float32 xa, float32 xb, float32 xc, int flags, float_status *s) } ur.h = up.h + uc.h; } else { + union_float32 ux = ua, uy = uc; if (flags & float_muladd_negate_product) { ua.h = -ua.h;