From nobody Mon Feb 9 16:09:02 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1530631328852740.24508984577; Tue, 3 Jul 2018 08:22:08 -0700 (PDT) Received: from localhost ([::1]:41061 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1faN84-00012Y-3l for importer@patchew.org; Tue, 03 Jul 2018 11:22:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57696) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1faN3n-0006Ia-HR for qemu-devel@nongnu.org; Tue, 03 Jul 2018 11:17:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1faN3k-0000Nk-99 for qemu-devel@nongnu.org; Tue, 03 Jul 2018 11:17:41 -0400 Received: from mail-pf0-x242.google.com ([2607:f8b0:400e:c00::242]:44464) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1faN3k-0000NB-3I for qemu-devel@nongnu.org; Tue, 03 Jul 2018 11:17:40 -0400 Received: by mail-pf0-x242.google.com with SMTP id j3-v6so1169497pfh.11 for ; Tue, 03 Jul 2018 08:17:40 -0700 (PDT) Received: from cloudburst.twiddle.net (97-126-112-211.tukw.qwest.net. [97.126.112.211]) by smtp.gmail.com with ESMTPSA id s185-v6sm4834201pfb.116.2018.07.03.08.17.37 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 03 Jul 2018 08:17:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=kjNhSDETLhKZX1kPr5wWZdIwC2gZUpxU/1MvpywHh/8=; b=AYJ1TRV2v5yc943DrtvdZ/FHOWru8oVjZgyd3YyGa+JA7RRl1ut+0tO33QYPCw9Fbb 9ls7eCBEc+staJkbGxHIL0uzGh3g6r5ZN/CbcwMeUu5RML+W0kWMuaURV9zS92SxAc0L S89KNgCqisgVPdEWxkrSRAF7ofdBtcdHUY3Ds= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kjNhSDETLhKZX1kPr5wWZdIwC2gZUpxU/1MvpywHh/8=; b=n78bHaBpeOZuE57qtGvv5dvQFt2EZi0DNAUa843MumBK6dn5mDVgjfN4W4HI2DpgxY v8lRP4UHIF//SNnOtyA7a9MX7MVpR1uqA1duuchsCK8+kl8LljQkTihVbSW3Ko1x8RFA mclT48aVHdR3NHpFG0VNUPujIzosOkmgzqHEoid3sUR0jrvJ15jYl2oFGb6tU96hcMon 8+jojHmzUPAyA6SCoUgHOXI6Zn5+V8oFahLVfk4Xx6PKj+TYctOOTZdr0a80SPczIqQg rT51/MffbNHJS0mLnHs0W6qiOiSZ5NnPodfjqR3BcePUxCThtATFrKUkedQhEb/gYI57 Hnfw== X-Gm-Message-State: APt69E3iyweKOAvgMbWjepknKpq/JrWXVYaK1e32KIXaIbxskQq9obqy 3BoYgoiajueLy15lbcYUUtNHtQqnIkk= X-Google-Smtp-Source: AAOMgpeP7WGiN8a72RaoH0d9K3Eyf8MJBeJn8/DZOhihLyvrpDYUoN0fGekC5keMw55ezt7VWiHr/A== X-Received: by 2002:a65:4541:: with SMTP id x1-v6mr20775618pgr.26.1530631058915; Tue, 03 Jul 2018 08:17:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 3 Jul 2018 08:17:28 -0700 Message-Id: <20180703151732.29843-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180703151732.29843-1-richard.henderson@linaro.org> References: <20180703151732.29843-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::242 Subject: [Qemu-devel] [PATCH 3/7] target/ppc: Tidy helper_fmul 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: programmingkidx@gmail.com, qemu-ppc@nongnu.org, david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Tidy the invalid exception checking so that we rely on softfloat for initial argument validation, and select the kind of invalid operand exception only when we know we must. Pass and return float64 values directly rather than bounce through the CPU_DoubleU union. Signed-off-by: Richard Henderson --- target/ppc/helper.h | 2 +- target/ppc/fpu_helper.c | 25 +++++++++++-------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/target/ppc/helper.h b/target/ppc/helper.h index 151437d8fc..7ddbc0fc19 100644 --- a/target/ppc/helper.h +++ b/target/ppc/helper.h @@ -87,7 +87,7 @@ DEF_HELPER_2(frim, i64, env, i64) =20 DEF_HELPER_3(fadd, i64, env, i64, i64) DEF_HELPER_3(fsub, i64, env, i64, i64) -DEF_HELPER_3(fmul, i64, env, i64, i64) +DEF_HELPER_3(fmul, f64, env, f64, f64) DEF_HELPER_3(fdiv, f64, env, f64, f64) DEF_HELPER_4(fmadd, i64, env, i64, i64, i64) DEF_HELPER_4(fmsub, i64, env, i64, i64, i64) diff --git a/target/ppc/fpu_helper.c b/target/ppc/fpu_helper.c index 0df7e31c10..5642734b5b 100644 --- a/target/ppc/fpu_helper.c +++ b/target/ppc/fpu_helper.c @@ -627,27 +627,24 @@ uint64_t helper_fsub(CPUPPCState *env, uint64_t arg1,= uint64_t arg2) } =20 /* fmul - fmul. */ -uint64_t helper_fmul(CPUPPCState *env, uint64_t arg1, uint64_t arg2) +float64 helper_fmul(CPUPPCState *env, float64 arg1, float64 arg2) { - CPU_DoubleU farg1, farg2; + float64 ret =3D float64_mul(arg1, arg2, &env->fp_status); + int status =3D get_float_exception_flags(&env->fp_status); =20 - farg1.ll =3D arg1; - farg2.ll =3D arg2; - - if (unlikely((float64_is_infinity(farg1.d) && float64_is_zero(farg2.d)= ) || - (float64_is_zero(farg1.d) && float64_is_infinity(farg2.d)= ))) { - /* Multiplication of zero by infinity */ - farg1.ll =3D float_invalid_op_excp(env, POWERPC_EXCP_FP_VXIMZ, 1); - } else { - if (unlikely(float64_is_signaling_nan(farg1.d, &env->fp_status) || - float64_is_signaling_nan(farg2.d, &env->fp_status))) { + if (unlikely(status & float_flag_invalid)) { + if ((float64_is_infinity(arg1) && float64_is_zero(arg2)) || + (float64_is_zero(arg1) && float64_is_infinity(arg2))) { + /* Multiplication of zero by infinity */ + float_invalid_op_excp(env, POWERPC_EXCP_FP_VXIMZ, 1); + } else if (float64_is_signaling_nan(arg1, &env->fp_status) || + float64_is_signaling_nan(arg2, &env->fp_status)) { /* sNaN multiplication */ float_invalid_op_excp(env, POWERPC_EXCP_FP_VXSNAN, 1); } - farg1.d =3D float64_mul(farg1.d, farg2.d, &env->fp_status); } =20 - return farg1.ll; + return ret; } =20 /* fdiv - fdiv. */ --=20 2.17.1