From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474446; cv=none; d=zohomail.com; s=zohoarc; b=SVKOYMNmrG7GADko6qfYsCXC7ln69YUPDKab/xNadg7jrEe02fpgoKWEbT/FRoVKyuIkNf7hqxAJ05fy0g4Ox1DLvuV0M4xhN+V02l2svoDK8PN94aNN/NJJetbji18Nc4prCVwW/W0YU93wR5TcQWlXsRDBoP6iwyazJWUSkC8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474446; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=u/kDXd23+ycS383PGeIrgHSsrr0fsby8WIj0IEq0o18=; b=BGN9YvbXYtfDtp9FJ8nEKmDuDMQa7otB7l6BVoCswAsAkT+Dl+0r0v7UmXk12ksLUcdEbKmSbKNArorPwO7heBfHqpnG0Bui/njgC6aouPUM5H7Gl8+H44xbh0Wal9HJ8bkX0MK7vmAsNIsAS3z529hNBT6rMSuijkCrpCihkHc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474446837958.6875323438641; Fri, 22 May 2026 11:27:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUaU-0004Yx-3E; Fri, 22 May 2026 14:27:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUaQ-0004Y9-Fn for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:08 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUaO-0004xM-MQ for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:06 -0400 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-2b9fcf7c91bso84284485ad.0 for ; Fri, 22 May 2026 11:27:03 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474423; x=1780079223; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=u/kDXd23+ycS383PGeIrgHSsrr0fsby8WIj0IEq0o18=; b=MMLn56i4EKIf7qsOJ9D2C2K03Zd5U6sxPlYIQG3kLb1q4I05ZJrFDlgq51FKkCdyiP Yh5Q71H9+AGnCppGFYktOzspm2JVsnzay6Ejnj8A0786tseUhrjc1Q7AfwFJtEDR9K4u qViP8eMdpXQO76keD1XZx+Fqx31ngtFoZRC6qgaL+C9IUpSsaclZgmlx1v3a/VYfRc0x 0TxsQZunY+p07Fk9aWXCBzsyb55D6j5ewY91oSY0CZQK2yEw+L3r2ubm44ug/lhWmrDm Z+Be+X+VDX5d+lZtdfRcE3QVOmG8XrKYOVX0VJ4sCXZKA77a4m0Dwp/0V1yle03oQnWp VCBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474423; x=1780079223; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=u/kDXd23+ycS383PGeIrgHSsrr0fsby8WIj0IEq0o18=; b=BjzOFYUw8FUGTHyOqfRBYrItPj3zlW30d+ok1DwNrE90XeeZJe5GHlPrkRgFRLTZo6 fuxpQeExjvghrHxz5Ony3g9c0i4nu2kmvA6YiQlS+WwExpmIMIvGlR0OCnEvv9bXOZiA i4g1JLidf/WiiFnNsVaz8yCIhBCORuJpO2dRrgKTZY5uvyjVao+kK8gF32j1wo+Rl9K9 vDwdqMaTy47BWG8EkJgOPfhT8vnD/QLQcQAAWnRo1J3FxN/92K/YmLSUcMs7EaWLmb5L hKH4nqsguV1vxwh0UZy6RcLIqu3TC1dsUIxa6sVs/QoSyGTI4vv+Nq94QSS7Q1rhHYN2 JE6Q== X-Gm-Message-State: AOJu0YzegLCy622MtYhuI5AFZMUHcljR5G1e8iTXnjjDibRBuYhCL8Q0 1/cdpi3NNqJdbewy+nboDPVY50aRgzawEludoHLa+xQ4i10VMKzyj1PXwJQHLJkHVtdCN2W0WhQ BJNEa X-Gm-Gg: Acq92OGm24dvYpfaEXL621HsJCrzdVL3lhBWo5TR5nhK96d6NRs32EOpvanW4BdIR7m B45IjLyzJyJHraYLMQM3lGeupowXE8uJ6otOMpTXUib0cwbcqfWOOGkjoaXxqtgqEYP5l25qd2P gFE+fKqStiLFXrGH+KkVtE8EdEBYtg0AU4fYnDcGYi6xT+gOp2XsyiB/+8zZVFPDizOnle1uOMp 6jkFNQ5Y4Awt2mLHnn8l4RNFBa+1pU/QbPUdc7Y2pjOle7ZoRA8+mzS6HoaQEASFYxURsz77gTy EDArQKCGbA0dCQ1XGEFoqLUOzDyEAVtwHUbhtwYATMSSK+zyWcpu9wuiJOK227O5EV0nDvC7ae6 gwY/bvH/JmgLmfjoIyycmMD3DCJtkw7F0HSqAiNgenepcfNmA1o/QvA1b7MGxmgf2ffWnhM+8gh nTQHmNPEl0l9V8BVgdPEgKw06WVSDW X-Received: by 2002:a17:902:e885:b0:2bc:e62a:979b with SMTP id d9443c01a7336-2beb0699cdemr52513425ad.30.1779474422520; Fri, 22 May 2026 11:27:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 01/30] fpu: Return struct from parts{64,128}_scalbn Date: Fri, 22 May 2026 11:26:29 -0700 Message-ID: <20260522182658.184604-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62e; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474449159154100 At the same time, export. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/fpu/softfloat-parts.h | 3 +++ fpu/softfloat.c | 18 +++++++++--------- fpu/softfloat-parts.c.inc | 14 ++++++++------ 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/include/fpu/softfloat-parts.h b/include/fpu/softfloat-parts.h index 9504d0daa0..46618d217e 100644 --- a/include/fpu/softfloat-parts.h +++ b/include/fpu/softfloat-parts.h @@ -214,4 +214,7 @@ FloatParts128 parts128_round_to_int(const FloatParts128= *a, FloatParts64 parts64_round_to_fmt(const FloatParts64 *p, float_status *s, const FloatFmt *fmt); =20 +FloatParts64 parts64_scalbn(const FloatParts64 *a, int n, float_status *s); +FloatParts128 parts128_scalbn(const FloatParts128 *a, int n, float_status = *s); + #endif diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 90ebd83f69..7fc6df461e 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1910,7 +1910,7 @@ float16 float16_muladd_scalbn(float16 a, float16 b, f= loat16 c, =20 /* Before rounding, scale. */ if (scale) { - parts64_scalbn(pr, scale, status); + *pr =3D parts64_scalbn(pr, scale, status); } parts64_uncanon(pr, status, &float16_params, false); /* After rounding, apply negate result, especially for -0.0. */ @@ -1937,7 +1937,7 @@ float32_muladd_scalbn(float32 a, float32 b, float32 c, =20 /* Before rounding, scale. */ if (scale) { - parts64_scalbn(pr, scale, status); + *pr =3D parts64_scalbn(pr, scale, status); } parts64_uncanon(pr, status, &float32_params, false); /* After rounding, apply negate result, especially for -0.0. */ @@ -1958,7 +1958,7 @@ float64_muladd_scalbn(float64 a, float64 b, float64 c, =20 /* Before rounding, scale. */ if (scale) { - parts64_scalbn(pr, scale, status); + *pr =3D parts64_scalbn(pr, scale, status); } parts64_uncanon(pr, status, &float64_params, false); /* After rounding, apply negate result, especially for -0.0. */ @@ -4312,7 +4312,7 @@ float16 float16_scalbn(float16 a, int n, float_status= *status) { FloatParts64 p =3D float16_unpack_canonical(a, status); =20 - parts64_scalbn(&p, n, status); + p =3D parts64_scalbn(&p, n, status); return float16_round_pack_canonical(&p, status); } =20 @@ -4320,7 +4320,7 @@ float32 float32_scalbn(float32 a, int n, float_status= *status) { FloatParts64 p =3D float32_unpack_canonical(a, status); =20 - parts64_scalbn(&p, n, status); + p =3D parts64_scalbn(&p, n, status); return float32_round_pack_canonical(&p, status); } =20 @@ -4328,7 +4328,7 @@ float64 float64_scalbn(float64 a, int n, float_status= *status) { FloatParts64 p =3D float64_unpack_canonical(a, status); =20 - parts64_scalbn(&p, n, status); + p =3D parts64_scalbn(&p, n, status); return float64_round_pack_canonical(&p, status); } =20 @@ -4336,7 +4336,7 @@ bfloat16 bfloat16_scalbn(bfloat16 a, int n, float_sta= tus *status) { FloatParts64 p =3D bfloat16_unpack_canonical(a, status); =20 - parts64_scalbn(&p, n, status); + p =3D parts64_scalbn(&p, n, status); return bfloat16_round_pack_canonical(&p, status); } =20 @@ -4344,7 +4344,7 @@ float128 float128_scalbn(float128 a, int n, float_sta= tus *status) { FloatParts128 p =3D float128_unpack_canonical(a, status); =20 - parts128_scalbn(&p, n, status); + p =3D parts128_scalbn(&p, n, status); return float128_round_pack_canonical(&p, status); } =20 @@ -4355,7 +4355,7 @@ floatx80 floatx80_scalbn(floatx80 a, int n, float_sta= tus *status) if (!floatx80_unpack_canonical(&p, a, status)) { return floatx80_default_nan(status); } - parts128_scalbn(&p, n, status); + p =3D parts128_scalbn(&p, n, status); return floatx80_round_pack_canonical(&p, status); } =20 diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 2114797aca..3a9c2748cd 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -1633,22 +1633,24 @@ FloatRelation partsN(compare)(const FloatPartsN *a,= const FloatPartsN *b, /* * Multiply A by 2 raised to the power N. */ -static void partsN(scalbn)(FloatPartsN *a, int n, float_status *s) +FloatPartsN partsN(scalbn)(const FloatPartsN *a, int n, float_status *s) { switch (a->cls) { case float_class_snan: case float_class_qnan: - *a =3D partsN(return_nan)(a, s); - break; + return partsN(return_nan)(a, s); case float_class_zero: case float_class_inf: - break; + return *a; case float_class_denormal: float_raise(float_flag_input_denormal_used, s); /* fall through */ case float_class_normal: - a->exp +=3D MIN(MAX(n, -0x10000), 0x10000); - break; + { + FloatPartsN r =3D *a; + r.exp +=3D MIN(MAX(n, -0x10000), 0x10000); + return r; + } default: g_assert_not_reached(); } --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474745; cv=none; d=zohomail.com; s=zohoarc; b=ELBxS8ZlkO5iVkyAVGDDj4nZAy5MdmSDxBBP830x1o8vaQwJkXrXS3RhhOe9E9hoDQw16bmDp6qx7FEhQlog6g11JW1BkEnUsG39fQ1IDGuBNWF0n9cRksdC9ajmyBnZK2mnIQPSG0LyhvDgzIXMfoNuvjDJn4FDY1ye3gnMKmY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474745; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=AIP97JpAti9CBhJAGj5cYJK7hFfMC9+CjBTqIhrsE0Q=; b=XL0l8fvcUy7eTR2r1ne9QlEy7shs+7GZU6pagk07df0T2Z7np8UQUmPCJIKTW6kjSRj+5v/OH0CQ/IzX/9vy0+msqjBf4uoKHLbS+Bd0I2+ea9+zZ74EKExy9XXJi6SDxG66uoo7Edo2/F8IMtbq9jYs7nHhTbLFIK3k+G/7Oak= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474745620763.6425754710417; Fri, 22 May 2026 11:32:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUas-0004ir-Of; Fri, 22 May 2026 14:27:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUam-0004e7-Aa for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:28 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUai-0005HG-O0 for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:28 -0400 Received: by mail-pg1-x52c.google.com with SMTP id 41be03b00d2f7-c828daf83e2so3599719a12.2 for ; Fri, 22 May 2026 11:27:24 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474443; x=1780079243; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AIP97JpAti9CBhJAGj5cYJK7hFfMC9+CjBTqIhrsE0Q=; b=nymvdQFNc5spAiydrbZSRMQ+Iewy2jA8tEKhyVEn/CKcfAgzKv6/C8P9PQIrEGP7c8 uMmux2x/mx3ebdZ9GETa6bm4Gp/ciIc0CNIOErzvN5t/1s1rEbmYjZC1m9Vj9UKbPB5D FfJUhbz0Qmj2rSDC0f3j0+UZBafRK01MSSFyQeA5vxahNTwjXC8Cc0DpU/NpFsx1XC+Z FfziUu5pumqPEWM+X9iwYnLaJA7TPELK57d5l71yRWCeue2d+Ty7NldvygwlQiv1cs8l b2TZVnz/W5UzyS4IxnX6ZQR9lG/qD3gAFLHCjoGJ005iG30YMMMPGLuqw5RKgo+lJcFm Xf6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474443; x=1780079243; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=AIP97JpAti9CBhJAGj5cYJK7hFfMC9+CjBTqIhrsE0Q=; b=VjfOd4Enw8BS1evrxFAjM+0LmhIIre9ska0NLfCsaa+5wLPdcDugmCmQkZb4iaI+Jk NOw7SHNyZEBZXcl0hkDJckEw/C6rYLY7D5Cq5AXjv+w9Ezbne37BEzAir5K3INHG4Umi mKEnNKzfr+z8inIal269oO3tLssOSE+b41gZBkFPF4n2W10xWumODzLlreDFSjpa6QDp TjXdp+oWMoLOTgKSFc2h2yTIRrrT9qizFYyJaq+nEvcLqy0ljUT1uwUISMUX4aZSxDgN WW2RwJmhh8tpjtGJDq83M1FhYohUYhVT8HZL+15/QlyX3+Cfy84gIcQjrxpsPwKVVBeP WlkA== X-Gm-Message-State: AOJu0YxWvmMnw0gO8ZVp5CZm42U2caME2gf/yJas6Y7JHDeZVn1eXNW0 jcT8Dczo5yxPvZspWXY5AvEdcmiZe5MwC5/74emSk/Jgh07PlQ76ziUTiPPtyc91vF3c4JtFsg7 f9sD9 X-Gm-Gg: Acq92OGWKSKuz/Xdj+/GjqYUblWxdW5l4upnv0Az2MhTiSnZ52Vysn8pcVnllkcZ8Tq 5NECZ6Ach6ZPsPjkswwGVc/QUhFDwZ5W5/YAvm7tmzgHG5QZWkReJmNt8/34vNxEAP63dLZn3pT XEgIwgm/FGBZQNIlHj1buGy++2+qhqG9cXo3zp1nFJaacMWGWbG5JC1txS99B25aal4ggYPwggr CkWb4lMyRVP8ZVZh14W1CihKgPOI2sjN2HZaxSR6r2V5CUt3yqF5XjstseZyRAJ6reFdFGQAnu/ 4nxkEUWKNCqAGBwwGhWXW2Wbtcrd5/9OFWf/JbuLzdAyBFWlOrFfrpKFGuSyo1bA9WFI1GbLPaG 1gS9SUD+b/+J1geUT0JwLLCO10PgZRmTqBqLDCLynWMI0ShIcCuoxlE++xcJL4OsW7XE99YCkFd SRKBotyR3CFlS8xj708n7m57lpup/1/b+7LI70IjE= X-Received: by 2002:a17:903:2bcc:b0:2bc:b80f:677e with SMTP id d9443c01a7336-2beb069970bmr49615995ad.25.1779474442938; Fri, 22 May 2026 11:27:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PULL 02/30] fpu: Reorganize partsN(muladd) Date: Fri, 22 May 2026 11:26:30 -0700 Message-ID: <20260522182658.184604-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52c; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474747860154100 Content-Type: text/plain; charset="utf-8" Check the likely case of normal product and normal or zero addend first; shift NaN and infinity detection down; end with zero product + addend. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- fpu/softfloat-parts.c.inc | 156 +++++++++++++++++--------------------- 1 file changed, 71 insertions(+), 85 deletions(-) diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 3a9c2748cd..ca2d7a15c9 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -681,11 +681,47 @@ static FloatPartsN *partsN(muladd)(FloatPartsN *a, Fl= oatPartsN *b, FloatPartsN *c, int flags, float_status *s) { - int ab_mask, abc_mask; - FloatPartsW p_widen, c_widen; + int ab_mask =3D float_cmask(a->cls) | float_cmask(b->cls); + int c_mask =3D float_cmask(c->cls); + int abc_mask =3D ab_mask | c_mask; + bool c_sign =3D c->sign ^ !!(flags & float_muladd_negate_c); + bool p_sign =3D a->sign ^ b->sign ^ !!(flags & float_muladd_negate_pro= duct); =20 - ab_mask =3D float_cmask(a->cls) | float_cmask(b->cls); - abc_mask =3D float_cmask(c->cls) | ab_mask; + /* + * The "likely" case is A and B normal, so that the product is normal, + * and C normal or zero so that the result is normal. + */ + int likely_mask =3D ab_mask | (c_mask & ~float_cmask_zero); + if (likely(cmask_is_only_normals(likely_mask))) { + record_denormals_used(abc_mask, s); + + /* Perform the multiplication step. */ + FloatPartsW p_widen =3D { .sign =3D p_sign, .exp =3D a->exp + b->e= xp + 1 }; + fracN(mulw)(&p_widen, a, b); + if (!(p_widen.frac_hi & DECOMPOSED_IMPLICIT_BIT)) { + fracW(add)(&p_widen, &p_widen, &p_widen); + p_widen.exp -=3D 1; + } + + /* Perform the addition step. */ + if (!(c_mask & float_cmask_zero)) { + /* Zero-extend C to less significant bits. */ + FloatPartsW c_widen =3D { .sign =3D c_sign, .exp =3D c->exp }; + fracN(widen)(&c_widen, c); + + if (p_sign =3D=3D c_sign) { + partsW(add_normal)(&p_widen, &c_widen); + } else if (!partsW(sub_normal)(&p_widen, &c_widen)) { + goto return_sub_zero; + } + } + + /* Narrow with sticky bit, for proper rounding later. */ + fracN(truncjam)(a, &p_widen); + a->sign =3D p_widen.sign; + a->exp =3D p_widen.exp; + return a; + } =20 /* * It is implementation-defined whether the cases of (0,inf,qnan) @@ -698,97 +734,47 @@ static FloatPartsN *partsN(muladd)(FloatPartsN *a, Fl= oatPartsN *b, return a; } =20 - if (flags & float_muladd_negate_c) { - c->sign ^=3D 1; + if (unlikely(ab_mask =3D=3D float_cmask_infzero)) { + /* Inf * Zero =3D=3D NaN */ + float_raise(float_flag_invalid | float_flag_invalid_imz, s); + goto d_nan; } =20 - /* Compute the sign of the product into A. */ - a->sign ^=3D b->sign; - if (flags & float_muladd_negate_product) { - a->sign ^=3D 1; - } - - if (unlikely(!cmask_is_only_normals(ab_mask))) { - if (unlikely(ab_mask =3D=3D float_cmask_infzero)) { - float_raise(float_flag_invalid | float_flag_invalid_imz, s); + if (unlikely(ab_mask & float_cmask_inf)) { + if ((c_mask & float_cmask_inf) && p_sign !=3D c_sign) { + /* Inf - Inf =3D=3D NaN */ + float_raise(float_flag_invalid | float_flag_invalid_isi, s); goto d_nan; } - - if (ab_mask & float_cmask_inf) { - if (c->cls =3D=3D float_class_inf && a->sign !=3D c->sign) { - float_raise(float_flag_invalid | float_flag_invalid_isi, s= ); - goto d_nan; - } - goto return_inf; - } - - g_assert(ab_mask & float_cmask_zero); - if (is_anynorm(c->cls)) { - *a =3D *c; - goto finish_sign; - } - if (c->cls =3D=3D float_class_zero) { - if (flags & float_muladd_suppress_add_product_zero) { - a->sign =3D c->sign; - } else if (a->sign !=3D c->sign) { - goto return_sub_zero; - } - goto return_zero; - } - g_assert(c->cls =3D=3D float_class_inf); + /* Inf + C =3D=3D Inf */ + record_denormals_used(abc_mask, s); + a->sign =3D p_sign; + a->cls =3D float_class_inf; + return a; } - - if (unlikely(c->cls =3D=3D float_class_inf)) { - a->sign =3D c->sign; - goto return_inf; - } - - /* Perform the multiplication step. */ - p_widen.sign =3D a->sign; - p_widen.exp =3D a->exp + b->exp + 1; - fracN(mulw)(&p_widen, a, b); - if (!(p_widen.frac_hi & DECOMPOSED_IMPLICIT_BIT)) { - fracW(add)(&p_widen, &p_widen, &p_widen); - p_widen.exp -=3D 1; - } - - /* Perform the addition step. */ - if (c->cls !=3D float_class_zero) { - /* Zero-extend C to less significant bits. */ - fracN(widen)(&c_widen, c); - c_widen.exp =3D c->exp; - - if (a->sign =3D=3D c->sign) { - partsW(add_normal)(&p_widen, &c_widen); - } else if (!partsW(sub_normal)(&p_widen, &c_widen)) { - goto return_sub_zero; - } - } - - /* Narrow with sticky bit, for proper rounding later. */ - fracN(truncjam)(a, &p_widen); - a->sign =3D p_widen.sign; - a->exp =3D p_widen.exp; - - finish_sign: - /* - * All result types except for "return the default NaN - * because this is an Invalid Operation" go through here; - * this matches the set of cases where we consumed a - * denormal input. - */ record_denormals_used(abc_mask, s); - return a; + + /* Only remaining cases are zero product or inf addend. */ + assert((ab_mask & float_cmask_zero) | (c_mask & float_cmask_inf)); + + /* + * P + Inf =3D=3D Inf, or + * 0 + C =3D=3D C, + * except for 0 - 0, which needs special rounding, + * except for when we want to suppress this addition step. + */ + if (!(c_mask & float_cmask_zero) + || p_sign =3D=3D c_sign + || (flags & float_muladd_suppress_add_product_zero)) { + c->sign =3D c_sign; + return c; + } =20 return_sub_zero: + /* 0 - 0 =3D=3D -0 for round_down, +0 otherwise. */ a->sign =3D s->float_rounding_mode =3D=3D float_round_down; - return_zero: a->cls =3D float_class_zero; - goto finish_sign; - - return_inf: - a->cls =3D float_class_inf; - goto finish_sign; + return a; =20 d_nan: *a =3D partsN(default_nan)(s); --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474616; cv=none; d=zohomail.com; s=zohoarc; b=FoxiQZni/2MJiMdXQqRUNo17PLSd+LtH+QTT+sXY/N+J5BnuJbmjXWUGwErcHZHeMdQErWuHjKPu2rc6A8O7juUqvxSpq/QaD/3Q1BzUFxAPv60oKx2yTOugVHCx000bNo/EjvPgbtJZm82zPrb/YnaDR39xWz8j8YpR6ADTI50= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474616; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Er8/h7hcdrH0i8AVq283Mmmr7LBMQsIla5HO90Oj/dc=; b=CizS0b7/LnQUdjqU1GrPxyOpBQzlC2M09WLWKGxp5xbeVXzvTiZRwOUnJx1zDhQCU12SZlE7ZTy/XD6tTwKY+NrCrevdG3l4NCQ3pOOZ6Tw6q4BXLiDf9zpjgHedvtuSt9R+YqDZ7zrkuRCA9ZQ3lNY5c6mUXGHV6bUMM49iSnk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17794746168221020.4788740573222; Fri, 22 May 2026 11:30:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUap-0004fj-8N; Fri, 22 May 2026 14:27:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUam-0004eC-RN for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:30 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUaj-0005Kq-LP for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:28 -0400 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-36a8ee1e28cso321977a91.0 for ; Fri, 22 May 2026 11:27:25 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474444; x=1780079244; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Er8/h7hcdrH0i8AVq283Mmmr7LBMQsIla5HO90Oj/dc=; b=GPcjNbyjIrsRgTk1vCu5eftum0VmxZseBilEyoSSvPy/M4RcHXlROQ4Hwodh23WLnd Q0NSsK/NOtN4Xo8GuzjrjIthzHoxBQECJo6QWCGCijwOh3gGQmS2K7PegzqzfaTsVEFQ Ef/3pW/V61iSdEiBW0eqe38lDcl2JTQLTtgV0HQzji5hdTfaVGnOXaL/zLigR2d3fqsP WkPfX1/bWyvJBdsgI0FvJ1+OXQTVLN4TkSm8ovY1kxXqF/Sc5KRCEQBKtng53vwsN/Z7 fBXnmRWY9EY0ajl7Teix7X357tOY88XU7xby6lYpgIytEEMNHvkErDPrvWYWQmJUk6Ec /xeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474444; x=1780079244; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Er8/h7hcdrH0i8AVq283Mmmr7LBMQsIla5HO90Oj/dc=; b=MSWRczwyUbvriWeAJ2kCQ6e8XZXqMg4Sjlx72jf8B9fCTbMu/g65xjIqgV9lgb5fgl E8fKz2c40UvDcZmQ4q8uj2gWhv3bb1lgrVBuXp3tmxrN0+5WMq6dLHimds1dJW+c6ogl jN3Wzd4tyrDMtULoIAwp89SsWn3jErCdlDjA3zf0L0C9vRAA4NmiFfcCnqGLjI3WTxnN 7ZIhGQ5h9EgZgizHlSK12f/qp/KNIpg8jGCIzApsXmY5aljJ2JP9xnnvolDA1y1DwRlk bTCPpLLEd9fCDg8T38pzh6+kG9mOxXX8kmkGWv9UzAtcuY21AANgwbd9kIptdgIFlAwW u1Ug== X-Gm-Message-State: AOJu0Yz/+mobm5kGLUI3hdfpxum6xY57UXzhAhnU4FFynd0FVpp3vjLe sC6Be7l13SwqurQ2rw1sHwsfRYLWxjMaN7D53Ul2vZIGc25aQsRAR8nIpNXUHORLjF3YZ//fjWx cILCe X-Gm-Gg: Acq92OEAti2BNK5yowAA6ZSpU4gNxmzHLdMYziDr4y5uF3LTpVdvrarJIDsxfc1632m Xvpn2IS8ri3RgmRG3I3aCYoXR3aKRyNz5A3H4/37sFX95NZg4I+SaULepFuJR9EWeB0GJj/8a6B EXcl67OD4AuH8Wbs/HX501opAkvveFqtw4BGMhtRGr2MUPIiavJhSOwhAr0SWIQ6AMrt2yF9N8u OZM5KI34DhaKcc3gRya8YDdwa+IZX/KH9WKg++j7VoSFG8MQHomwLg4vtOQNuegHVz1sbPhjWQ6 3M/GM9aus2Q/rePh0APAGcnZqQDRKW7Ua2CfQzIW8+JMmvnOSJuyjQe6h6hXZ5mrT47FlgZZVDi P5bJ61mBtTCGHVyrm0YOQRPm4Wg+rL8QZFg7fVuG4wIpl7OFvayjsFWWct/ZULKcKPr5Oz4qsxe kW7KbQ7d35f/OIWh90aivibfvpLqUl X-Received: by 2002:a17:902:ef11:b0:2bd:d7b5:83ed with SMTP id d9443c01a7336-2beb07001camr55242415ad.39.1779474443839; Fri, 22 May 2026 11:27:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 03/30] fpu: Return struct from parts{64,128}_muladd Date: Fri, 22 May 2026 11:26:31 -0700 Message-ID: <20260522182658.184604-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474617928154100 At the same time, export. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/fpu/softfloat-parts.h | 9 ++++ fpu/softfloat.c | 83 +++++++++++++++++------------------ fpu/softfloat-parts.c.inc | 38 ++++++++-------- 3 files changed, 69 insertions(+), 61 deletions(-) diff --git a/include/fpu/softfloat-parts.h b/include/fpu/softfloat-parts.h index 46618d217e..7170cc7b6a 100644 --- a/include/fpu/softfloat-parts.h +++ b/include/fpu/softfloat-parts.h @@ -202,6 +202,15 @@ FloatParts64 parts64_mul(const FloatParts64 *a, const = FloatParts64 *b, FloatParts128 parts128_mul(const FloatParts128 *a, const FloatParts128 *b, float_status *s); =20 +FloatParts64 parts64_muladd(const FloatParts64 *a, + const FloatParts64 *b, + const FloatParts64 *c, + int flags, float_status *s); +FloatParts128 parts128_muladd(const FloatParts128 *a, + const FloatParts128 *b, + const FloatParts128 *c, + int flags, float_status *s); + FloatParts64 parts64_round_to_int(const FloatParts64 *a, FloatRoundMode rmode, int scale, float_status *s, diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 7fc6df461e..905ba6ecf8 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1906,18 +1906,18 @@ float16 float16_muladd_scalbn(float16 a, float16 b,= float16 c, FloatParts64 pa =3D float16_unpack_canonical(a, status); FloatParts64 pb =3D float16_unpack_canonical(b, status); FloatParts64 pc =3D float16_unpack_canonical(c, status); - FloatParts64 *pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); + FloatParts64 pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); =20 /* Before rounding, scale. */ if (scale) { - *pr =3D parts64_scalbn(pr, scale, status); + pr =3D parts64_scalbn(&pr, scale, status); } - parts64_uncanon(pr, status, &float16_params, false); + parts64_uncanon(&pr, status, &float16_params, false); /* After rounding, apply negate result, especially for -0.0. */ - if ((flags & float_muladd_negate_result) && !is_nan(pr->cls)) { - pr->sign ^=3D 1; + if ((flags & float_muladd_negate_result) && !is_nan(pr.cls)) { + pr.sign ^=3D 1; } - return pack_raw64(pr, &float16_params); + return pack_raw64(&pr, &float16_params); } =20 float16 float16_muladd(float16 a, float16 b, float16 c, @@ -1933,18 +1933,18 @@ float32_muladd_scalbn(float32 a, float32 b, float32= c, FloatParts64 pa =3D float32_unpack_canonical(a, status); FloatParts64 pb =3D float32_unpack_canonical(b, status); FloatParts64 pc =3D float32_unpack_canonical(c, status); - FloatParts64 *pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); + FloatParts64 pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); =20 /* Before rounding, scale. */ if (scale) { - *pr =3D parts64_scalbn(pr, scale, status); + pr =3D parts64_scalbn(&pr, scale, status); } - parts64_uncanon(pr, status, &float32_params, false); + parts64_uncanon(&pr, status, &float32_params, false); /* After rounding, apply negate result, especially for -0.0. */ - if ((flags & float_muladd_negate_result) && !is_nan(pr->cls)) { - pr->sign ^=3D 1; + if ((flags & float_muladd_negate_result) && !is_nan(pr.cls)) { + pr.sign ^=3D 1; } - return pack_raw64(pr, &float32_params); + return pack_raw64(&pr, &float32_params); } =20 float64 QEMU_SOFTFLOAT_ATTR @@ -1954,18 +1954,18 @@ float64_muladd_scalbn(float64 a, float64 b, float64= c, FloatParts64 pa =3D float64_unpack_canonical(a, status); FloatParts64 pb =3D float64_unpack_canonical(b, status); FloatParts64 pc =3D float64_unpack_canonical(c, status); - FloatParts64 *pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); + FloatParts64 pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); =20 /* Before rounding, scale. */ if (scale) { - *pr =3D parts64_scalbn(pr, scale, status); + pr =3D parts64_scalbn(&pr, scale, status); } - parts64_uncanon(pr, status, &float64_params, false); + parts64_uncanon(&pr, status, &float64_params, false); /* After rounding, apply negate result, especially for -0.0. */ - if ((flags & float_muladd_negate_result) && !is_nan(pr->cls)) { - pr->sign ^=3D 1; + if ((flags & float_muladd_negate_result) && !is_nan(pr.cls)) { + pr.sign ^=3D 1; } - return pack_raw64(pr, &float64_params); + return pack_raw64(&pr, &float64_params); } =20 static bool force_soft_fma; @@ -2115,14 +2115,14 @@ float64 float64r32_muladd(float64 a, float64 b, flo= at64 c, FloatParts64 pa =3D float64_unpack_canonical(a, status); FloatParts64 pb =3D float64_unpack_canonical(b, status); FloatParts64 pc =3D float64_unpack_canonical(c, status); - FloatParts64 *pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); + FloatParts64 pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); =20 /* Round before applying negate result. */ - parts64_uncanon(pr, status, &float32_params, false); - if ((flags & float_muladd_negate_result) && !is_nan(pr->cls)) { - pr->sign ^=3D 1; + parts64_uncanon(&pr, status, &float32_params, false); + if ((flags & float_muladd_negate_result) && !is_nan(pr.cls)) { + pr.sign ^=3D 1; } - return float64r32_pack_raw(pr); + return float64r32_pack_raw(&pr); } =20 bfloat16 bfloat16_muladd(bfloat16 a, bfloat16 b, bfloat16 c, @@ -2131,14 +2131,14 @@ bfloat16 bfloat16_muladd(bfloat16 a, bfloat16 b, bf= loat16 c, FloatParts64 pa =3D bfloat16_unpack_canonical(a, status); FloatParts64 pb =3D bfloat16_unpack_canonical(b, status); FloatParts64 pc =3D bfloat16_unpack_canonical(c, status); - FloatParts64 *pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); + FloatParts64 pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); =20 /* Round before applying negate result. */ - parts64_uncanon(pr, status, &bfloat16_params, false); - if ((flags & float_muladd_negate_result) && !is_nan(pr->cls)) { - pr->sign ^=3D 1; + parts64_uncanon(&pr, status, &bfloat16_params, false); + if ((flags & float_muladd_negate_result) && !is_nan(pr.cls)) { + pr.sign ^=3D 1; } - return pack_raw64(pr, &bfloat16_params); + return pack_raw64(&pr, &bfloat16_params); } =20 float128 float128_muladd(float128 a, float128 b, float128 c, @@ -2147,14 +2147,14 @@ float128 float128_muladd(float128 a, float128 b, fl= oat128 c, FloatParts128 pa =3D float128_unpack_canonical(a, status); FloatParts128 pb =3D float128_unpack_canonical(b, status); FloatParts128 pc =3D float128_unpack_canonical(c, status); - FloatParts128 *pr =3D parts128_muladd(&pa, &pb, &pc, flags, status); + FloatParts128 pr =3D parts128_muladd(&pa, &pb, &pc, flags, status); =20 /* Round before applying negate result. */ - parts128_uncanon(pr, status, &float128_params, false); - if ((flags & float_muladd_negate_result) && !is_nan(pr->cls)) { - pr->sign ^=3D 1; + parts128_uncanon(&pr, status, &float128_params, false); + if ((flags & float_muladd_negate_result) && !is_nan(pr.cls)) { + pr.sign ^=3D 1; } - return float128_pack_raw(pr); + return float128_pack_raw(&pr); } =20 /* @@ -5126,7 +5126,7 @@ float32 float32_exp2(float32 a, float_status *status) rp =3D float64_unpack_canonical(float64_one, status); for (int i =3D 0; i < 15; i++) { tp =3D float64_unpack_canonical(float32_exp2_coefficients[i], stat= us); - rp =3D *parts64_muladd(&tp, &xnp, &rp, 0, status); + rp =3D parts64_muladd(&tp, &xnp, &rp, 0, status); xnp =3D parts64_mul(&xnp, &xp, status); } =20 @@ -5175,7 +5175,7 @@ static void parts_s390_divide_to_integer(FloatParts64= *a, FloatParts64 *b, n->sign =3D a->sign ^ b->sign; *cc =3D 0; } else { - FloatParts64 *q, q_buf, *r_precise, r_precise_buf; + FloatParts64 *q, q_buf, r_precise; int float_exception_flags =3D 0; bool is_q_smallish; uint32_t r_flags; @@ -5205,12 +5205,11 @@ static void parts_s390_divide_to_integer(FloatParts= 64 *a, FloatParts64 *b, 0, fmt->frac_size); =20 /* Compute precise remainder */ - r_precise_buf =3D *b; - r_precise =3D parts64_muladd(&r_precise_buf, n, a, + r_precise =3D parts64_muladd(b, n, a, float_muladd_negate_product, status); =20 /* Round remainder to the target format */ - *r =3D *r_precise; + *r =3D r_precise; status->float_exception_flags =3D 0; *r =3D parts64_round_to_fmt(r, status, fmt); r_flags =3D status->float_exception_flags; @@ -5234,17 +5233,17 @@ static void parts_s390_divide_to_integer(FloatParts= 64 *a, FloatParts64 *b, * toward zero) or incremented. */ saved_r_sign =3D r->sign; - saved_r_precise_sign =3D r_precise->sign; + saved_r_precise_sign =3D r_precise.sign; r->sign =3D false; - r_precise->sign =3D false; - if (parts64_compare(r, r_precise, status, true) < + r_precise.sign =3D false; + if (parts64_compare(r, &r_precise, status, true) < float_relation_equal) { *dxc =3D 0x8; } else { *dxc =3D 0xc; } r->sign =3D saved_r_sign; - r_precise->sign =3D saved_r_precise_sign; + r_precise.sign =3D saved_r_precise_sign; } } } diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index ca2d7a15c9..437b333341 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -677,9 +677,8 @@ FloatPartsN partsN(mul)(const FloatPartsN *a, const Flo= atPartsN *b, * Requires A and C extracted into a double-sized structure to provide the * extra space for the widening multiply. */ -static FloatPartsN *partsN(muladd)(FloatPartsN *a, FloatPartsN *b, - FloatPartsN *c, - int flags, float_status *s) +FloatPartsN partsN(muladd)(const FloatPartsN *a, const FloatPartsN *b, + const FloatPartsN *c, int flags, float_status *= s) { int ab_mask =3D float_cmask(a->cls) | float_cmask(b->cls); int c_mask =3D float_cmask(c->cls); @@ -717,10 +716,13 @@ static FloatPartsN *partsN(muladd)(FloatPartsN *a, Fl= oatPartsN *b, } =20 /* Narrow with sticky bit, for proper rounding later. */ - fracN(truncjam)(a, &p_widen); - a->sign =3D p_widen.sign; - a->exp =3D p_widen.exp; - return a; + FloatPartsN r =3D { + .sign =3D p_widen.sign, + .exp =3D p_widen.exp, + .cls =3D float_class_normal, + }; + fracN(truncjam)(&r, &p_widen); + return r; } =20 /* @@ -730,8 +732,7 @@ static FloatPartsN *partsN(muladd)(FloatPartsN *a, Floa= tPartsN *b, * off to the target-specific pick-a-NaN routine. */ if (unlikely(abc_mask & float_cmask_anynan)) { - *a =3D partsN(pick_nan_muladd)(a, b, c, s, ab_mask, abc_mask); - return a; + return partsN(pick_nan_muladd)(a, b, c, s, ab_mask, abc_mask); } =20 if (unlikely(ab_mask =3D=3D float_cmask_infzero)) { @@ -748,9 +749,7 @@ static FloatPartsN *partsN(muladd)(FloatPartsN *a, Floa= tPartsN *b, } /* Inf + C =3D=3D Inf */ record_denormals_used(abc_mask, s); - a->sign =3D p_sign; - a->cls =3D float_class_inf; - return a; + return (FloatPartsN){ .sign =3D p_sign, .cls =3D float_class_inf }; } record_denormals_used(abc_mask, s); =20 @@ -766,19 +765,20 @@ static FloatPartsN *partsN(muladd)(FloatPartsN *a, Fl= oatPartsN *b, if (!(c_mask & float_cmask_zero) || p_sign =3D=3D c_sign || (flags & float_muladd_suppress_add_product_zero)) { - c->sign =3D c_sign; - return c; + FloatPartsN r =3D *c; + r.sign =3D c_sign; + return r; } =20 return_sub_zero: /* 0 - 0 =3D=3D -0 for round_down, +0 otherwise. */ - a->sign =3D s->float_rounding_mode =3D=3D float_round_down; - a->cls =3D float_class_zero; - return a; + return (FloatPartsN){ + .sign =3D s->float_rounding_mode =3D=3D float_round_down, + .cls =3D float_class_zero + }; =20 d_nan: - *a =3D partsN(default_nan)(s); - return a; + return partsN(default_nan)(s); } =20 /* --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474543; cv=none; d=zohomail.com; s=zohoarc; b=gXx7v9q9BZo28aY1hwsTUlDpGKqAAkymZxX1aQqKgxEZmZP0dW9tfHFUFohvuRjCYzarR/xR5IXW1CXSM9VYlwOQXdnPR7wpM+JiMD8Fqzpz1IEcj2tDJ6FAb5YKwoH+MPsGFkTqREgL3CBNUtFxZQjLNPyuyiaHMyLQPZ2xPz8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474543; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=LXEFjIA2Rc2Ly2XJsgxo/zPmqwc6w9LU/oPQ8iHupDk=; b=EnsnOFn+LyUM+qIi4CJOrBTs5SuFfXdS0OM9j5eC/fcAQLa0sluv0JSWo0Zlapv+BlGS1YhA4462Tno867O6MF6bG0XBQH7IFyMtWeCqg6Z/e2srjGl/f75ALM/vOyImKAc8TAB7t7a8PybZ4ibfnMUy2LdQzfayEl5FNckOyZ4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474543926970.1311958409506; Fri, 22 May 2026 11:29:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUap-0004fi-62; Fri, 22 May 2026 14:27:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUam-0004e6-7h for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:28 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUak-0005MQ-FW for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:27 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-3697f25d26eso4036492a91.1 for ; Fri, 22 May 2026 11:27:26 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474445; x=1780079245; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LXEFjIA2Rc2Ly2XJsgxo/zPmqwc6w9LU/oPQ8iHupDk=; b=jHj5bquY0cq90bX4Lgh86t3Rh+hTCXo8c30fXZo/zWVN6aadbw21UURN6CyjwqWQ+H YEffA2y+LxI4jxMKlmSYlEkU0ulM9wgI1sgZU4ouwsMG6sn2C3WAL18km/u7NVoKjYZ2 1BsPTC4sz+haRQ+B9ZRdwHekwaxff43d8/1juyEB5NO6sKCe2oKIKRJf0ORqibqdHsEG 2MCVy6TZXZ4jC9zVMs/OAWIfyIuTL6Lgj1S7CGmWt7yeQurOBdnt/Tx3KL1tvZM66pzt AUl04PCZASgBy7SrTswuaXVzcR/8phWgO2fmg/fDTR+lRhOCcq3y30FgPOsZe2huLtSp wbqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474445; x=1780079245; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=LXEFjIA2Rc2Ly2XJsgxo/zPmqwc6w9LU/oPQ8iHupDk=; b=YtKjjJBSZ6eqE70lIQQOMNgqbEx0JfwljaZELFCVS3zenD8N7BqKfK22GlOGxpP0vS UQH70lYEY//vybTGU+qB5YOWRzlQGZYjwFmZTRoUddsDSFQbsjyNPk3mDnqzuR2Nf8SY 0L7t4vjbzXChYjbkvl7YreL1NGa9lZiBVBg6G64qEvJeEm4LskJSftQGrXLUZMRq/7FU Qe7c0u4DDEeI/NoUtfjB9BxnfnXL4cLaswe1nn8hFBz2LnwkrCy0jHxEx380lX53gWex GNmRIQQH7aDE+4MQI5xdpSkvLBcAgCInuRUbpHiTDMcrp8P2BRCXL8smR0TmCJPd2FLH 0dlw== X-Gm-Message-State: AOJu0Yz/0j+pHVTE03B3VJiBiprVuI4hXYtqhRuCCDTx9vLsxqC2v5/R cRVvpHe0+AKCmthOfNT/sw2XLJ8v0IAcDyCZlmDPBP8CAYPdBwbllaS1jYzPhuQ/rwcA1cgUDhY IW0sL X-Gm-Gg: Acq92OE5iZ5NnnrOQVy/TWBrj8YWOLU/3cmfXBQzI7ms78Mfmy3l1AC/30KvzocovKl hxokHgji5iNrRvb6DiQpEaFs+393RD2Y8re+zgmtWQNLgD980K5I+R7TuVsDo3JUQ6/Ff1bgmH5 9GT3Y1PTxkQgJEMWHL3XLAfytz+xh4xfzi8i44wII/3OBmsY5uKtcodBok3aG5o1Y3NRXLqtlv4 nLgiJFFm9nC88Al2eZYSLfZYs+ZWN+xFYbpZyB3ApH5Yq90ED9nxZs1ae3Ov+rp5tQmx4790H5R O6+UKOPuQhL+haD7R9aq85V+Qn4zXh3OFCMdTpDKLfTm/NzJAYaA6+fTGXtAZWGV6Mjjq++IXFA wz372mytPqTaubXKjbGT+h3gEhQBTLsnDs6SlXh52UCBUJB6N8v5RSd6yM9DzxsP1H5FHZHeYjQ iDS0f1LWxqgSJi0Zr0dooiHf7TAFmo X-Received: by 2002:a17:902:ce92:b0:2bc:a52c:c8fa with SMTP id d9443c01a7336-2beb076ead2mr50178885ad.26.1779474444810; Fri, 22 May 2026 11:27:24 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 04/30] fpu: Hoist nan check in partsN_addsub Date: Fri, 22 May 2026 11:26:32 -0700 Message-ID: <20260522182658.184604-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474545895158500 The nan test had been down below because it was unlikely. But if we have to have one anyway because of denormals, we might as well take care of them right away. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat-parts.c.inc | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 437b333341..3246702289 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -530,13 +530,15 @@ FloatPartsN partsN(addsub)(const FloatPartsN *a_orig, { int ab_mask =3D float_cmask(a_orig->cls) | float_cmask(b_orig->cls); =20 + if (unlikely(ab_mask & float_cmask_anynan)) { + return partsN(pick_nan)(a_orig, b_orig, s); + } + /* * For addition and subtraction, we will consume an * input denormal unless the other input is a NaN. */ - if (!(ab_mask & float_cmask_anynan)) { - record_denormals_used(ab_mask, s); - } + record_denormals_used(ab_mask, s); =20 FloatPartsN a =3D *a_orig; FloatPartsN b =3D *b_orig; @@ -558,10 +560,6 @@ FloatPartsN partsN(addsub)(const FloatPartsN *a_orig, return a; } =20 - if (unlikely(ab_mask & float_cmask_anynan)) { - goto p_nan; - } - if (ab_mask & float_cmask_inf) { if (a.cls !=3D float_class_inf) { /* N - Inf */ @@ -586,10 +584,6 @@ FloatPartsN partsN(addsub)(const FloatPartsN *a_orig, return a; } =20 - if (unlikely(ab_mask & float_cmask_anynan)) { - goto p_nan; - } - if (ab_mask & float_cmask_inf) { a.cls =3D float_class_inf; return a; @@ -604,9 +598,6 @@ FloatPartsN partsN(addsub)(const FloatPartsN *a_orig, g_assert(a.cls =3D=3D float_class_zero); g_assert(is_anynorm(b.cls)); return b; - - p_nan: - return partsN(pick_nan)(a_orig, b_orig, s); } =20 /* --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474464; cv=none; d=zohomail.com; s=zohoarc; b=gIK4BYLkVBpjq63iBSV0QBOIelozGhGtObYcan8gLp9jzbufF6bPxtyFYAw6JOFkUqPYs6MVkrNul4Tk2lyfYT4nxTmrK3lCkDD+aHlcDoBosOcj4BKnLWON6IIuedR3Ln/nLswQ96S4gRBv3yTa/uHcGUgIHeIX9733gC1t+iI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474464; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=bCgdRyITzXe+PAn36FnB4uw07GyhqVI89lgA/9dEQq4=; b=GtB2Jv8KFIMC9z21acs/XtiY6HgP85PBujhIClYLmUdUBM3jHLqstHRxT3o5U3woar+St80YZIeu08S0LQsKh4/2tJl1hRi1LmkdxVq1Gq0bLTsOm/ph5RTTdmno8etPXNy8q3IFClLjNMDrCD3HOdnbVM9vpSMPjEJLywjsXFM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474464076428.2445516797932; Fri, 22 May 2026 11:27:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUaq-0004hN-AC; Fri, 22 May 2026 14:27:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUan-0004eF-UK for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:30 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUam-0005Ms-C5 for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:29 -0400 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-2bccb978bd9so51850505ad.0 for ; Fri, 22 May 2026 11:27:27 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474447; x=1780079247; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=bCgdRyITzXe+PAn36FnB4uw07GyhqVI89lgA/9dEQq4=; b=exO4k8p/4Ig2bjrKqke8xS/M7sJ4bKRc5RtpYWrWkvo1YgZM/piCKiH6TeHy03tMiO xxnYdAQpdvNOxeAZ8DTyRKEW/8Kb4XEE6sJfNczamhVXS7nmBsebar9R3/XOxw7PTIpc WvV+5KvXAHZo49hxolkw9Nns4OU1hS5h9iRpK4BCauwdVnSCqV6x/RGdm/8UCS9O7TJe uJj5yW4Pvt66bN8bfr7GR1GoCxw0J/lh2DM8Cp4HMvhKhnyHXuqCUAvWoCo6Ctl0aG6D H3+unirRAO93sMEiJ/XN7drhrPKK36O/Vgv4tiCQR+w+4N27yNTRfHZTHeUJYEE+YUgF ibcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474447; x=1780079247; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=bCgdRyITzXe+PAn36FnB4uw07GyhqVI89lgA/9dEQq4=; b=L0piy5kT+z8y+dKfMoGNBwtW5tSL9qY8iadw4pkOt8AZSWpa7VLxMNT6kRCzehK9sH naZRMChzDOOUfWtWgp2kSlFGAh6pZwVIG1Ukncedp8Dgk/I29TtOw2ez6tWhg23YNI6I j5hIftPhi36jUpFgCMf8J3hvQpjZd01CjTip8AiNtVifWleGIxu5IDLQUFekb5Jj+DQE 9jYdlo/4Mh8fMjG0MZ5b8K0M1wFt8cii8GZc5nPQgqpyrBedsa/XFxuKX5TTlfO4cRU/ B+jQ/AgfSjbbg/7IngLTwBfvyjUwvW02Sg0faweWRLezdGbL8v2j4VpHZ9xs6JEjvwKJ PqCw== X-Gm-Message-State: AOJu0Yy6yLHiuwjKkYK4EGmVpr8XtEmX0y+eoU5tU8wsOsWJ3MBB6Dfp c96AMAKAoL6WXbZ35SGnC6wEBWH8O6mxQpEluQ0UqvJT2F6LYPdOzf/LqDrLVO5Bmh1TntHmrZ1 4qSrC X-Gm-Gg: Acq92OF1fDdYHAm+QGTrAAurKlxwvhsb9WAu6SQRbiVocNj3T5fQeKjRa9XXZt1Dae8 HFqwqzhMurmHdUGWxZvHP4/02V99WyXWLo8bcj/uKw0iw5r52jnl6PTtFKrHSZ3/9KhvuUpEcEF 8YyAtbafErx99w9fTJwREUmUsBPcvU55FpWw2zWRkSe3/VCS7QMDdjea3fm/9Sel2Fl/dNTBV7o WyDpc9S0JwX2OO67++WiKVZhfu/gUfsFEmrw7YTF7sKG0WbwCdvbZqnQOxAZxPOAZ+GCKW9V6gu 7jaLR/IVaC+U6jxdGBFscrtejBhEzlvd6g/Jgl3CWmwRou6I1kg781w6jfYl5dolQKVxzpFgbGK r/9bkAgdhr8uo4l1lWOAYz98/a+mIlZNr3AHtACIGqhAcxL7em8GioC3ihSVNRMlBurKV0El9RW SGpZthjBhypxLEyCFuZ3Zbir+Yqt9jDJPIPyaiDgrrhN1J0zeuIg== X-Received: by 2002:a17:903:350c:b0:2b0:6068:4c5f with SMTP id d9443c01a7336-2bea21d2cafmr83439355ad.8.1779474446718; Fri, 22 May 2026 11:27:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 05/30] fpu: Simplify 0 +/- N case in parts_addsub Date: Fri, 22 May 2026 11:26:33 -0700 Message-ID: <20260522182658.184604-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::630; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x630.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474465577154100 Consolidate the tests for zero and anynorm. Add comments for a few cases. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat-parts.c.inc | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 3246702289..45606f8402 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -556,6 +556,7 @@ FloatPartsN partsN(addsub)(const FloatPartsN *a_orig, } =20 if (ab_mask =3D=3D float_cmask_zero) { + /* 0 - 0 */ a.sign =3D s->float_rounding_mode =3D=3D float_round_down; return a; } @@ -581,23 +582,20 @@ FloatPartsN partsN(addsub)(const FloatPartsN *a_orig, } =20 if (ab_mask =3D=3D float_cmask_zero) { + /* 0 + 0 */ return a; } =20 if (ab_mask & float_cmask_inf) { + /* N + Inf or Inf + N */ a.cls =3D float_class_inf; return a; } } =20 - if (b.cls =3D=3D float_class_zero) { - g_assert(is_anynorm(a.cls)); - return a; - } - - g_assert(a.cls =3D=3D float_class_zero); - g_assert(is_anynorm(b.cls)); - return b; + /* 0 +/- N or N +/- 0 */ + assert((ab_mask & float_cmask_zero) && (ab_mask & float_cmask_anynorm)= ); + return b.cls =3D=3D float_class_zero ? a : b; } =20 /* --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474617; cv=none; d=zohomail.com; s=zohoarc; b=fiXe/hbDlX7L/EVW2FdKi21F7WhkEm//0U+SN3qn9rhT7K+9NK2CZqpGNMOcNjnoqOdg7aHe4eV3M9ljFFwfTX5/qFg1FX6C4TO//MbKP3K4EsmVUzTP6ds+WPWVvqqYg1s4mYCYCGD6YOyz46HbT3A/3sRr93tUw8hBXm/9ZSg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474617; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+WCZC6SUBC071bfRFwXvhf4AY+W4PJMZ0UFTCQc+Jc8=; b=duLn1TMT6FLRMap0Pors/t30FTyNe4f+Kx7vXrE5nMrOlBk5hVS7n9hzF7KvhwQHlbhrto/jJ5Cqw2+33erX7cxz8PxAMWdfv4hEiGluOqpAU1cZPOeIthTgbCanr4Bs37lxkfKNpU5jj5qlXl1StqlykFa7GQvdwugGE19/W8U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474617297607.691566014852; Fri, 22 May 2026 11:30:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUay-0004l9-0V; Fri, 22 May 2026 14:27:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUaq-0004ho-ME for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:32 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUao-0005No-VO for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:32 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2b4650d5f5cso31743705ad.0 for ; Fri, 22 May 2026 11:27:30 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474449; x=1780079249; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+WCZC6SUBC071bfRFwXvhf4AY+W4PJMZ0UFTCQc+Jc8=; b=jfGEf0UH+xkGIbTdurkSsnqOk6o6leEn1J9HhomkB6g7JL33lLyX25C1ziA3goPhuE GdQglxVzIK6fGndcx/STBBzdn55nMomRf0XjHNTs7wH9ZWL1wjgYFl/zeaVkxmpYnaCk OWzS6ptpsgH/OQyrteGoxbFS72Q5CDJkgbTO9y8l8zH4zBHWsgxtqE5KUYidXB7oeDS+ x+sDBKtdLk/i8c9RLhd/JOyKQ8gHAt23csCSeGn+P0LkYeI4dVuNku1m/q9fwxMeZ1B+ kzGeS8gVAtAvgtuAAXvum4oy1MoVPwbDu3wcU7e4TVC0vocxeVXh6rIw0JKs+1D5HpHF Z2Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474449; x=1780079249; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=+WCZC6SUBC071bfRFwXvhf4AY+W4PJMZ0UFTCQc+Jc8=; b=AKe3JVTmo2XZNOxJ9viNzwztGLQGbJgz0mjI3nJBJS2SyN4gPSuATq6zVTzCDgG0he Uyf/C4BG1QMDphKrebt1XFhklVogWY9+99y5QihxAarzrDwntUhF0aTcyanzSaqwlgvx FBmITwhZbuDiuhpdXmqpP1Qsa6nuWu2s4F15vex99eMHf+SJniAqUhKzr+o6cwB5VqkG 9vOFlesvlvqTVEf7kZUNR4vWt04PRZF2A7GP5XweHckuXYOodQDmBWlzx0JYj6M+ATaB hD/zvn2b7UDxw8vC9kEJgItHJR3//q4P39Y5wwzFcnTA1Jn4W1TP/ptztzq15dk8SqdT F6lQ== X-Gm-Message-State: AOJu0YyIj9JGHUIP5EZ0dWjHdq2Kajmidj4iLJnEnM1Am7MCluSFg8xB URDfAQpmnbPql5H1E6q+ObuTzyJXINrPHz1gWc3G5S4pP6LlowyBokodBBRsEUh9zkWihThSXtP YS2GO X-Gm-Gg: Acq92OHUwcOYg0Vpz8reVZTun7YXbLXA3Qz0nY1a63uInU25MabXvXpiHeQ4cSzPvWU B22r8y5IQaBmMIJsh/f27fXHlum5C2uhoZMe2byt8C7C8aoFXx3uR/m7On31Qz5PN5/B0r3BHBu V7WbmP+BRkBQyIFLrYMOQMviKg3ME8BJVZvWqFXTDAEaYiVYsYmyLwUtKRYxwCJYSumPJ3uYB2t eH9uSZxavLoV5QDqUcrDdBJlPnfZtFHyESLNOZ6bkqwADdYMkiGbxZ3DKuTmfIhVn7esGXcXKNQ JVlY6uhMd1lkmN5Ye4Ddioxpu3HZ5XSlM8XEFdtb558MvK1zrkjvweyndiOMyy3P+YHHatqofLD 5tkeHr1CF1Icj5iVsJe5dw7Wz1lF/bK8I0Iw2B5cgzz6Wawz6W7GZYLMfwZuyt8N2sUBdghhkT9 Y7NKowQSNixQWaOGrDTtURw+dy0prNLi/E6eIdUXk= X-Received: by 2002:a17:902:db07:b0:2ba:3e50:e3f5 with SMTP id d9443c01a7336-2beb0634c8amr53733745ad.30.1779474449345; Fri, 22 May 2026 11:27:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 06/30] fpu: Use parts64_round_to_int in parts_s390_divide_to_integer Date: Fri, 22 May 2026 11:26:34 -0700 Message-ID: <20260522182658.184604-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474618387158500 We will not expose parts_round_to_int_normal. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 905ba6ecf8..08ea56a71d 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -5197,12 +5197,11 @@ static void parts_s390_divide_to_integer(FloatParts= 64 *a, FloatParts64 *b, * Rounding of partial quotient may be inexact. This is the whole = point * of distinguishing partial quotients, so ignore the exception. */ - *n =3D *q; - parts64_round_to_int_normal(n, - is_q_smallish - ? final_quotient_rounding_mode - : float_round_to_zero, - 0, fmt->frac_size); + *n =3D parts64_round_to_int(q, + is_q_smallish + ? final_quotient_rounding_mode + : float_round_to_zero, + 0, status, fmt); =20 /* Compute precise remainder */ r_precise =3D parts64_muladd(b, n, a, --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474540; cv=none; d=zohomail.com; s=zohoarc; b=aysBMYt/kd2h57njIB098faF2j19bqWO2r2VtQlBBH7FBbjQX0sZnnqVGroZ5aZ/jtbX/uvgAViS140Ayca2NYFE224u1Ht+aYaRS86CkuQfOsZRxIIT5V2Y/nNOHcraeCBpuJ3s+dQ4wjw6nmhd47r2A0y3EyTkO+6QbPYPC3A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474540; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fCZyoqgqjVXJJtjxCkZlZshfx8C6L5WwhqI7H2CZ8tM=; b=hpa2n+yHFH180v5GkDF0yiBf4EGZabkM/XJHj0xiP4uTMguLbcF7reulL4tB4zTH0pQFlhWB1bGppuEThBXWVxP0GRekVKYhOTH/dKcts8lpscWgVVzPE/qWdHHeFCdxM9nFwUysxm0hrqeQbSKuequTj6KiD+DhPxDSqvwgZtM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474540337948.0799965749708; Fri, 22 May 2026 11:29:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUaz-0004lj-6K; Fri, 22 May 2026 14:27:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUaw-0004kb-4f for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:38 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUat-0005OV-Qm for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:37 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2ba6485d219so58750255ad.3 for ; Fri, 22 May 2026 11:27:35 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474454; x=1780079254; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fCZyoqgqjVXJJtjxCkZlZshfx8C6L5WwhqI7H2CZ8tM=; b=r1XBVd0ISlOEEeNo5lucXlEJe8EpdOgs0fZAKXarx7goAhP5sNRwt/NoPK3RM0JOUD 9ZSKLtZ95vFFfDuwC6Lt/Opav09UXJjKoG+DPn6rNxt0SPgZbc4j9UDVcldgwep0PXxX 0teZcxUwK2IwrEW8xoA/1v96UIDoCOuADDzHOIJfX8qW31zI6uBZ4mGvw4P8MhdnS908 2CIKEkkOm/Q/LgAoSgnPzzV/hw6Z/ibp9SOes/f1C+buEjmYG1UrW/24sNY2ZhcqMadk mqPXwFrJgRgH2cupSGIYFCYIziZ6NurhOdHQOOkbnZE8uhVToC6E7ZXTB8m4CRWaIiEm kY+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474454; x=1780079254; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=fCZyoqgqjVXJJtjxCkZlZshfx8C6L5WwhqI7H2CZ8tM=; b=LsV63ycIJSuVE5KAOq/wLt4vj2LYbWl4pH6zZkk6nfEVD4k2RjfcK1iR9vzicgmAsg YaJXM1fGZws3YjdXz+/2TS+fm1optmbMAuLZj7LI68Xtn/m7obCTuNd1YpGbR7SnwUCb ZLHLULn2PmMEP1FDRWg2GOeBerp94tGmeHTnpCQ0LgM0FKlH9KjtbJ8SHJ3tNtUAIQ7K MnzB2OH3vZRfuaTaX1+hdHB5MNwUpkqJpmBV4DBJ/slxMVa70K3qZq8Pb0kGSLwQZtq9 YshEC5/ZJT6hDWii1qSSkg/SQk34Tle7V1NM/W7muny75anEHCqsacimnoCpkF1ELmMm eD9Q== X-Gm-Message-State: AOJu0YyVmYzf4EOTWFKoNqB5ASle2ThkSUBMSXp4UU+Tc70+Th9WHE2u CSqInxmBWFmKK5vwMTZO4NLBPG42NcQy4p11bls6DU9MwRt2fkXgMZVaybhfwt/hu70QnbnDLSb PkmxE X-Gm-Gg: Acq92OGc9Z7+5JTzgIrJ5yNLdgS/WbWwmrISLN1wGsZLbJ4mWcQjJBcM5gTE5x8PAcC FsxKDVjnEWt9gx3AP2ZXOZNyjiqYeZOn85l7O0qjwZuSoYUYWpBMyPA0O0K6S7PD8ZnRUCn2yEk LO4YN34u9gACELSISvyM8EYPfAZIkvbIg7LLxrMYiuvkicFfpBO5fMTj2Mw2eit/k7F4cldhQgq U3oWmt5A7i3W/njdmQxr3gXwa6m54WZU1CbM+6ezYJOGQPUCi+kwavsSRWa+D8CNUK1MBsdC1UU ZK+IjUkplbmHAnLPbyWNZlx7Iawz9GUa7oKXqFWXqmJ4Tzn7qOcz+QT8CWI1wBfj1cLwzOr4mTa DOTyXZ3mBsvdC9+HwDCwNeZIM/JGDxgpPauZuKqTN9pUXLZf32ks6kdd+GhOd0MC4KD8j+DcZpM 4yDK/y3+q++0mxgnlTQZ85qNi04SZk X-Received: by 2002:a17:903:3c6d:b0:2b7:86be:7673 with SMTP id d9443c01a7336-2beb0366450mr51607485ad.6.1779474454295; Fri, 22 May 2026 11:27:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ilya Leoshkevich Subject: [PULL 07/30] target/s390x: Move float{32,64}_s390_divide_to_integer Date: Fri, 22 May 2026 11:26:35 -0700 Message-ID: <20260522182658.184604-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474542507154100 Now that we've exposed enough infrastructure, this can be implemented in the backend that needs it. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- include/fpu/softfloat.h | 11 --- fpu/softfloat.c | 137 ---------------------------------- target/s390x/tcg/fpu_helper.c | 135 +++++++++++++++++++++++++++++++++ 3 files changed, 135 insertions(+), 148 deletions(-) diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h index 8389a07b04..1580d956d5 100644 --- a/include/fpu/softfloat.h +++ b/include/fpu/softfloat.h @@ -1386,15 +1386,4 @@ static inline bool float128_unordered_quiet(float128= a, float128 b, *-------------------------------------------------------------------------= ---*/ float128 float128_default_nan(float_status *status); =20 -#define DECLARE_S390_DIVIDE_TO_INTEGER(floatN) = \ -void floatN ## _s390_divide_to_integer(floatN a, floatN b, = \ - int final_quotient_rounding_mode, = \ - bool mask_underflow, bool mask_inex= act, \ - floatN *r, floatN *n, = \ - uint32_t *cc, int *dxc, = \ - float_status *status) -DECLARE_S390_DIVIDE_TO_INTEGER(float32); -DECLARE_S390_DIVIDE_TO_INTEGER(float64); - - #endif /* SOFTFLOAT_H */ diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 08ea56a71d..a762f4b43a 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -5151,143 +5151,6 @@ floatx80 floatx80_round(floatx80 a, float_status *s= tatus) return floatx80_round_pack_canonical(&p, status); } =20 -static void parts_s390_divide_to_integer(FloatParts64 *a, FloatParts64 *b, - int final_quotient_rounding_mode, - bool mask_underflow, bool mask_in= exact, - const FloatFmt *fmt, - FloatParts64 *r, FloatParts64 *n, - uint32_t *cc, int *dxc, - float_status *status) -{ - /* POp table "Results: DIVIDE TO INTEGER (Part 1 of 2)" */ - if ((float_cmask(a->cls) | float_cmask(b->cls)) & float_cmask_anynan) { - *r =3D parts64_pick_nan(a, b, status); - *n =3D *r; - *cc =3D 1; - } else if (a->cls =3D=3D float_class_inf || b->cls =3D=3D float_class_= zero) { - *r =3D parts64_default_nan(status); - *n =3D *r; - *cc =3D 1; - status->float_exception_flags |=3D float_flag_invalid; - } else if (b->cls =3D=3D float_class_inf) { - *r =3D *a; - n->cls =3D float_class_zero; - n->sign =3D a->sign ^ b->sign; - *cc =3D 0; - } else { - FloatParts64 *q, q_buf, r_precise; - int float_exception_flags =3D 0; - bool is_q_smallish; - uint32_t r_flags; - - /* Compute precise quotient */ - q_buf =3D parts64_div(a, b, status); - q =3D &q_buf; - - /* - * Check whether two closest integers can be precisely represented, - * i.e., all their bits fit into the fractional part. - */ - is_q_smallish =3D q->exp < (fmt->frac_size + 1); - - /* - * Final quotient is rounded using final-quotient-rounding method,= and - * partial quotient is rounded toward zero. - * - * Rounding of partial quotient may be inexact. This is the whole = point - * of distinguishing partial quotients, so ignore the exception. - */ - *n =3D parts64_round_to_int(q, - is_q_smallish - ? final_quotient_rounding_mode - : float_round_to_zero, - 0, status, fmt); - - /* Compute precise remainder */ - r_precise =3D parts64_muladd(b, n, a, - float_muladd_negate_product, status); - - /* Round remainder to the target format */ - *r =3D r_precise; - status->float_exception_flags =3D 0; - *r =3D parts64_round_to_fmt(r, status, fmt); - r_flags =3D status->float_exception_flags; - - /* POp table "Results: DIVIDE TO INTEGER (Part 2 of 2)" */ - if (is_q_smallish) { - if (r->cls !=3D float_class_zero) { - if (r->exp < 2 - (1 << (fmt->exp_size - 1))) { - if (mask_underflow) { - float_exception_flags |=3D float_flag_underflow; - *dxc =3D 0x10; - r->exp +=3D fmt->exp_re_bias; - } - } else if (r_flags & float_flag_inexact) { - float_exception_flags |=3D float_flag_inexact; - if (mask_inexact) { - bool saved_r_sign, saved_r_precise_sign; - - /* - * Check whether remainder was truncated (rounded - * toward zero) or incremented. - */ - saved_r_sign =3D r->sign; - saved_r_precise_sign =3D r_precise.sign; - r->sign =3D false; - r_precise.sign =3D false; - if (parts64_compare(r, &r_precise, status, true) < - float_relation_equal) { - *dxc =3D 0x8; - } else { - *dxc =3D 0xc; - } - r->sign =3D saved_r_sign; - r_precise.sign =3D saved_r_precise_sign; - } - } - } - *cc =3D 0; - } else if (n->exp > (1 << (fmt->exp_size - 1)) - 1) { - n->exp -=3D fmt->exp_re_bias; - *cc =3D r->cls =3D=3D float_class_zero ? 1 : 3; - } else { - *cc =3D r->cls =3D=3D float_class_zero ? 0 : 2; - } - - /* Adjust signs of zero results */ - if (r->cls =3D=3D float_class_zero) { - r->sign =3D a->sign; - } - if (n->cls =3D=3D float_class_zero) { - n->sign =3D a->sign ^ b->sign; - } - - status->float_exception_flags =3D float_exception_flags; - } -} - -#define DEFINE_S390_DIVIDE_TO_INTEGER(floatN) = \ -void floatN ## _s390_divide_to_integer(floatN a, floatN b, = \ - int final_quotient_rounding_mode, = \ - bool mask_underflow, bool mask_inex= act, \ - floatN *r, floatN *n, = \ - uint32_t *cc, int *dxc, = \ - float_status *status) = \ -{ = \ - FloatParts64 pa =3D floatN ## _unpack_canonical(a, status); = \ - FloatParts64 pb =3D floatN ## _unpack_canonical(b, status); = \ - FloatParts64 pr, pn; = \ - parts_s390_divide_to_integer(&pa, &pb, final_quotient_rounding_mode, = \ - mask_underflow, mask_inexact, = \ - &floatN ## _params, = \ - &pr, &pn, cc, dxc, status); = \ - *r =3D floatN ## _round_pack_canonical(&pr, status); = \ - *n =3D floatN ## _round_pack_canonical(&pn, status); = \ -} - -DEFINE_S390_DIVIDE_TO_INTEGER(float32) -DEFINE_S390_DIVIDE_TO_INTEGER(float64) - static void __attribute__((constructor)) softfloat_init(void) { union_float64 ua, ub, uc, ur; diff --git a/target/s390x/tcg/fpu_helper.c b/target/s390x/tcg/fpu_helper.c index 122994960a..33e0f6100d 100644 --- a/target/s390x/tcg/fpu_helper.c +++ b/target/s390x/tcg/fpu_helper.c @@ -24,6 +24,7 @@ #include "tcg_s390x.h" #include "exec/helper-proto.h" #include "fpu/softfloat.h" +#include "fpu/softfloat-parts.h" =20 /* #define DEBUG_HELPER */ #ifdef DEBUG_HELPER @@ -315,6 +316,140 @@ Int128 HELPER(dxb)(CPUS390XState *env, Int128 a, Int1= 28 b) return RET128(ret); } =20 +static void parts_s390_divide_to_integer(FloatParts64 *a, FloatParts64 *b, + int final_quotient_rounding_mode, + bool mask_underflow, bool mask_in= exact, + const FloatFmt *fmt, + FloatParts64 *r, FloatParts64 *n, + uint32_t *cc, int *dxc, + float_status *status) +{ + /* POp table "Results: DIVIDE TO INTEGER (Part 1 of 2)" */ + if ((float_cmask(a->cls) | float_cmask(b->cls)) & float_cmask_anynan) { + *r =3D parts64_pick_nan(a, b, status); + *n =3D *r; + *cc =3D 1; + } else if (a->cls =3D=3D float_class_inf || b->cls =3D=3D float_class_= zero) { + *r =3D parts64_default_nan(status); + *n =3D *r; + *cc =3D 1; + status->float_exception_flags |=3D float_flag_invalid; + } else if (b->cls =3D=3D float_class_inf) { + *r =3D *a; + n->cls =3D float_class_zero; + n->sign =3D a->sign ^ b->sign; + *cc =3D 0; + } else { + FloatParts64 *q, q_buf, r_precise; + int float_exception_flags =3D 0; + bool is_q_smallish; + uint32_t r_flags; + + /* Compute precise quotient */ + q_buf =3D parts64_div(a, b, status); + q =3D &q_buf; + + /* + * Check whether two closest integers can be precisely represented, + * i.e., all their bits fit into the fractional part. + */ + is_q_smallish =3D q->exp < (fmt->frac_size + 1); + + /* + * Final quotient is rounded using final-quotient-rounding method,= and + * partial quotient is rounded toward zero. + * + * Rounding of partial quotient may be inexact. This is the whole = point + * of distinguishing partial quotients, so ignore the exception. + */ + *n =3D parts64_round_to_int(q, + is_q_smallish + ? final_quotient_rounding_mode + : float_round_to_zero, + 0, status, fmt); + + /* Compute precise remainder */ + r_precise =3D parts64_muladd(b, n, a, + float_muladd_negate_product, status); + + /* Round remainder to the target format */ + *r =3D r_precise; + status->float_exception_flags =3D 0; + *r =3D parts64_round_to_fmt(r, status, fmt); + r_flags =3D status->float_exception_flags; + + /* POp table "Results: DIVIDE TO INTEGER (Part 2 of 2)" */ + if (is_q_smallish) { + if (r->cls !=3D float_class_zero) { + if (r->exp < 2 - (1 << (fmt->exp_size - 1))) { + if (mask_underflow) { + float_exception_flags |=3D float_flag_underflow; + *dxc =3D 0x10; + r->exp +=3D fmt->exp_re_bias; + } + } else if (r_flags & float_flag_inexact) { + float_exception_flags |=3D float_flag_inexact; + if (mask_inexact) { + bool saved_r_sign, saved_r_precise_sign; + + /* + * Check whether remainder was truncated (rounded + * toward zero) or incremented. + */ + saved_r_sign =3D r->sign; + saved_r_precise_sign =3D r_precise.sign; + r->sign =3D false; + r_precise.sign =3D false; + if (parts64_compare(r, &r_precise, status, true) < + float_relation_equal) { + *dxc =3D 0x8; + } else { + *dxc =3D 0xc; + } + r->sign =3D saved_r_sign; + r_precise.sign =3D saved_r_precise_sign; + } + } + } + *cc =3D 0; + } else if (n->exp > (1 << (fmt->exp_size - 1)) - 1) { + n->exp -=3D fmt->exp_re_bias; + *cc =3D r->cls =3D=3D float_class_zero ? 1 : 3; + } else { + *cc =3D r->cls =3D=3D float_class_zero ? 0 : 2; + } + + /* Adjust signs of zero results */ + if (r->cls =3D=3D float_class_zero) { + r->sign =3D a->sign; + } + if (n->cls =3D=3D float_class_zero) { + n->sign =3D a->sign ^ b->sign; + } + + status->float_exception_flags =3D float_exception_flags; + } +} + +#define DEFINE_S390_DIVIDE_TO_INTEGER(floatN) = \ +static void floatN ## _s390_divide_to_integer(floatN a, floatN b, = \ + int final_quotient_rounding_mode, bool mask_underflow, bool mask_inexa= ct, \ + floatN *r, floatN *n, uint32_t *cc, int *dxc, float_status *status) = \ +{ = \ + FloatParts64 pa =3D floatN ## _unpack_canonical(a, status); = \ + FloatParts64 pb =3D floatN ## _unpack_canonical(b, status); = \ + FloatParts64 pr, pn; = \ + parts_s390_divide_to_integer(&pa, &pb, final_quotient_rounding_mode, = \ + mask_underflow, mask_inexact, = \ + &floatN ## _params, = \ + &pr, &pn, cc, dxc, status); = \ + *r =3D floatN ## _round_pack_canonical(&pr, status); = \ + *n =3D floatN ## _round_pack_canonical(&pn, status); = \ +} + +DEFINE_S390_DIVIDE_TO_INTEGER(float32) +DEFINE_S390_DIVIDE_TO_INTEGER(float64) + void HELPER(dib)(CPUS390XState *env, uint32_t r1, uint32_t r2, uint32_t r3, uint32_t m4, uint32_t bits) { --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474544; cv=none; d=zohomail.com; s=zohoarc; b=jrz5E20g5gMi1o4y+JEmG5viH84nuYRKlC5Iabrz8VJ/a+HIT2FGuGE3lHdIYiAUXMxhrxpsK0VzWbVIHDZIkr/3gD2aT1RvXTxHNsQ60YAOB1RLrgCFOygxqkA8Xj4zI+IoQ2FBuKidB3wGgxYX8C9+NBtAEMJumejMaC7g9zU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474544; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=zmkEFB6oOfB6a2ylH8LqqZtIcmvXziHGDfc7NRPoi8s=; b=CcMdtDNelfEwCjd6RSAduCe0iEsoKBcoNRabr8LXBt0x/xjJB9zQRuK7eqTFfOwZc14sryjBI/dbhP52/LfXzMhuh+Q2/j/OShUI3Cqg6p7FGhaCcibOMJa/qZGTXn7J1gvFqqwwUW+o7XHNi8rm7cExzUwGhwyhiIh4CJhFY0U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177947454416299.07404352713752; Fri, 22 May 2026 11:29:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUay-0004lX-Iq; Fri, 22 May 2026 14:27:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUax-0004kr-E2 for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:39 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUau-0005Ok-FX for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:39 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2bd9c3b550aso53378755ad.2 for ; Fri, 22 May 2026 11:27:36 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474455; x=1780079255; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zmkEFB6oOfB6a2ylH8LqqZtIcmvXziHGDfc7NRPoi8s=; b=ItfxGpCwtbsoRNIYi4NiAYeFG7z0GjG3XSO62Q8mJXSvGyxTZ/b8+tsMauG2nTGUCn qZ6XdG9MRlry5MaddOf2LZbuvCpbBnYSx6z5o5ct4R92k4M3KTnkti2zZquYp16Qq/kr zmHLHy9ZDIx3oLdmb6ueXiTz9Xk3SeYiJmzJfuS0sjZx6AV21KyAruy1l+9JQNtV92GF 4yvOMTtXoJ65a32oZz0fqSCUvVimTZ/RIVApnJ1e4rxUjj9iMV5C3h9Jry2acjElfL/w J+1z6u4r3LUgEgVYuls8o2v44QKyBDLv7GNF4DX1iz1fSQjZNaAgB6A5CZO6iOuFQPHO jbDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474455; x=1780079255; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=zmkEFB6oOfB6a2ylH8LqqZtIcmvXziHGDfc7NRPoi8s=; b=Bf7nP9hblULX4A2fdpTTyCDd7kSAiOB2Nt7ZK4NMeB1Cm+D48rqTS30Eqnpy7jh556 gJVHPqF8kw7X3T5fyMvVLUb0cUQD++W3tw7jKAzTrmIcSLY3/+ee1v196TVnQ8t7Hl4m NhLa6/hPrT/wXL3z1bfTxLSXDwX9PNBswKGCaKQtfKmuIYKzxwV4JHZgf+SIqJYqlChr 03xdq+ecMggCpgNon5f2EowJgk6NyU2SxXjuTtk8nY/K+9JUOCGAPlFkqz0HumPf7rNi 0x5hQurrzUDSSW1ASyQd+rQNcWtUVRo+XzSJ+E2sJq7ctrzQpyYB+JFSCV5JisFLF4Ck kmcA== X-Gm-Message-State: AOJu0YyuytN58DucIOOYqCakNn02uijsEJhNPsUEMgEBwmGCaREILoeH ajEAjSWHadwZISuVoOrI7gZNpUn9vTxiRLf6T7nPVwcXBZ4uR4eUqHXOsfzLIvwMswuXhmW9vlI QaH7H X-Gm-Gg: Acq92OGJ9SrHaKfdjbqEcJsG11L6MomXJxlAaX69bRjyj+agSX71TA5jehJwJxQ5koz dQsrCcL0taMLIeaFhBwxCb6RtaQRppCDpiB25hTz0olPNIaK6bqbszbX+99peML39KDJ+Ki73ae We2wtyTdZqZgIzY10+RqJ0QZl0zcop3cHQA0fGSLoGUepWa5O7SUfV1d3q59SD4mQDVUEAoMz0N UjdYx5MpcEbTZp/zdAu80xW2SCcAhMa/hQCCEHzlMZG8mkxQK7oGfudmVORP3dJKNt66vkGy/gP kgdTsAA3iA1eMdvy4ijd8l0SaIuc0+luk3vidUatri3Pjq/ieN/pDRj6YX5+1h899PzMLP3znl7 pFOGymFtmWPENdV+YXxLkvzbQ13tls1UiY6P6/4isTFEStDzj2yeH9bCNnr0O1FLLOHokPX8dGt 64Cvsp5FNZBvJNSdsQvlLHeOO10kpc+1PI3bAfdvk= X-Received: by 2002:a17:903:2bcc:b0:2bd:e5d4:dc63 with SMTP id d9443c01a7336-2beb070343emr52771985ad.26.1779474455049; Fri, 22 May 2026 11:27:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 08/30] fpu: Introduce exp_scalbn Date: Fri, 22 May 2026 11:26:36 -0700 Message-ID: <20260522182658.184604-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474546493154100 Avoid exponent overflow as well as checking that we don't lose information = with opposing scaling. Use it in partsN(scalbn) and partsN(round_to_int_normal). Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat.c | 29 +++++++++++++++++++++++++++++ fpu/softfloat-parts.c.inc | 5 ++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index a762f4b43a..df94f299e1 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -461,6 +461,15 @@ typedef struct { uint64_t frac_lo; } FloatParts256; =20 +/* + * Minimum and maximum exponent for scalbn. + * These are chosen to be much larger than the true exponent for any input= format, + * but also not at the bounds of INT32_{MIN,MAX} so that we can perform ot= her + * arithmetic on the exponent without overflowing, particularly during unc= anon. + */ +#define SCALBN_EXP_MAX 0x0fffffff +#define SCALBN_EXP_MIN (-SCALBN_EXP_MAX) + /* These apply to the most significant word of each FloatPartsN. */ #define DECOMPOSED_BINARY_POINT 63 #define DECOMPOSED_IMPLICIT_BIT (1ull << DECOMPOSED_BINARY_POINT) @@ -601,6 +610,26 @@ static float128 QEMU_FLATTEN float128_pack_raw(const F= loatParts128 *p) *-------------------------------------------------------------------------= ---*/ #include "softfloat-specialize.c.inc" =20 +static int32_t exp_scalbn(int32_t exp, int32_t scale) +{ + /* + * Catch chains of scaling which lose information. + * In particular, if the exponent has been saturated, + * do not allow it to become unsaturated. + */ + if (exp >=3D SCALBN_EXP_MAX) { + assert(scale >=3D 0); + } else if (exp <=3D SCALBN_EXP_MIN) { + assert(scale <=3D 0); + } + if (sadd32_overflow(exp, scale, &exp)) { + exp =3D scale < 0 ? SCALBN_EXP_MIN : SCALBN_EXP_MAX; + } else { + exp =3D MIN(MAX(exp, SCALBN_EXP_MIN), SCALBN_EXP_MAX); + } + return exp; +} + /* * Helper functions for softfloat-parts.c.inc, per-size operations. */ diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 45606f8402..4715187017 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -1098,8 +1098,7 @@ static bool partsN(round_to_int_normal)(FloatPartsN *= a, FloatRoundMode rmode, uint64_t frac_lsb, frac_lsbm1, rnd_even_mask, rnd_mask, inc; int shift_adj; =20 - scale =3D MIN(MAX(scale, -0x10000), 0x10000); - a->exp +=3D scale; + a->exp =3D exp_scalbn(a->exp, scale); =20 if (a->exp < 0) { bool one; @@ -1623,7 +1622,7 @@ FloatPartsN partsN(scalbn)(const FloatPartsN *a, int = n, float_status *s) case float_class_normal: { FloatPartsN r =3D *a; - r.exp +=3D MIN(MAX(n, -0x10000), 0x10000); + r.exp =3D exp_scalbn(r.exp, n); return r; } default: --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474542; cv=none; d=zohomail.com; s=zohoarc; b=fBx/O8q1uC1Y9UzBKLsKidrjHL5vRt/fGaFAOYzDamR+Sv024grQc6j6bj+/yub7NhcZrOr3nWL0/d6LE4R/AEO20KV2ekDx1ylDvqMehxhIFUwPinqWRZtnHcD7juxQVBKZTrx+OCNw6Su+C7st3Bmhx6SwXqYvETqalHC/B+g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474542; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=eFuftV4ssvx9bSSs5jnFr2ka5o9L8dvlbwyKZe1RxvE=; b=oBq5QHffkHjegYjjpS/yZYYaQPaMcFvzHtuvZatR/njjzaKp8susPm3MOszY4FX4SqQgMAiDR6HBW8TAvyUWpp8VXbLMEUqSDR2Yv3M3Pn6QqEGNWjtPoJRzwunhX3hmhamxS2SgonMKIFoAeF8gwRIj4bH3GxgBUKVRPiL5XPA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474542635714.1460222403725; Fri, 22 May 2026 11:29:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUaz-0004lf-55; Fri, 22 May 2026 14:27:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUax-0004ks-EQ for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:39 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUav-0005PG-8j for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:39 -0400 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-2ba4efedbeaso56998075ad.1 for ; Fri, 22 May 2026 11:27:36 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474456; x=1780079256; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eFuftV4ssvx9bSSs5jnFr2ka5o9L8dvlbwyKZe1RxvE=; b=Ja7jXpbbKVvkk8P5+nk1vCLkSrnwsqyE7z9PulX2d6w21jxf2kyVj94965HPj0pdc/ NFS6btOf9DxDHuGeAoQbZa8spe2jmHpkKJPhkb8TOCrORfILnNp8VS0dush5IUa4Uqh+ UusW7uH6ihvnrUbVNmSjyTkexIY7OKyFDUqvb70mC5Ourfm9LbRyHizWv+AufGbXDGNe MZqVwKTpQSi0Ogfh8JALJgUAEkZtHY3OpX/j2dF1ABBCGyV1ppGkNT4jTNyZbBaC62QK ISjBUzMn8em1+1OwqFqGUqxWg2qrboBbAePsxnFcEdIyesmkqC+FcMYMdhOkFO/oj3Ct H+9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474456; x=1780079256; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=eFuftV4ssvx9bSSs5jnFr2ka5o9L8dvlbwyKZe1RxvE=; b=DGJaASaCeeWZ4FQ4yKuuENqqr6nbY1zWdKJve+AJG78koIlZxgEGg8lcd/mM54Kv7c kSwwiNl1xYwkBgdFdCvGzzSbCjfbcbjVHL4xJzEmekZMjYtlW4/1VuB6I3PBL15Hu6A2 AaqDJe0V17IsJs+Jntm4LuRXF9Nuqj1y7VsQi8JXYpw9n0Xmcd1kUegdffDqpbax7QeH jooFzQgqxeNYS9RQoQVkjPllRgT2n9F8441p5r5LKES7QmkGu49vYc/AX+nbsGJnfTRw 8XwVxQIrlChaSwGaLkyzYAZRu90hetMgALDOwtYLHPaCQ6/ngfxzTaCQPrWwzXuhhnjh MPqQ== X-Gm-Message-State: AOJu0YxuB+qSBTBI8o4fS7cj+fus9VEMcN/8lJtN9iSpPJqvHMtIYrvi xZrnupeKBDf3WGxqusd+fKFAUnlDsQ9Z7MtYZiUzy9UEwulbVcCoOYdyAuiNLpMA9EHmX2F76uE U2Hnq X-Gm-Gg: Acq92OEVG+epCt7kA/wxErKhfC0ejlYeUKaX/3YW1sOHLbJvLPlpKWtfbNVHIPC7/as +2kGGnm26v2O2+MvROgOSPCvkkAoL+xa4/eCEozuzWsh6VUiPR3bz5/Z1rKH64MjGxf9GhXr318 km1NSR+QnACAbDT2ZCvUwruWainvd5iam4cIY9DXVqFtqi06BY9P/RpF8j/B6VCRdBE3H9EdRXp UJHLB+F4sShR16etF5JspSKGmSxhxLn2dl4uHbJU00KNQSAgv8UwItd+yJUzzdeQzjYkohkVDgx tTTfGLtySDvLtYA37RoncnOgFFS4lw1FUYbyJid/0NqHJQvVrqqmAwEuahNRZsP9xjRvNPYYxPd a2Evjh1ufPW4LM5wWACdHyUIP00geUnvYhCowjgMAg3VC0NCNupH2F+voovBPBBwa/DiWNIseXa 8yRBkUZMG9aZvGjAuo48NZiHZsvL2gAkoDfuUigH2G8BDOSEXljA== X-Received: by 2002:a17:902:e885:b0:2bc:e62a:979b with SMTP id d9443c01a7336-2beb0699cdemr52531995ad.30.1779474455830; Fri, 22 May 2026 11:27:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 09/30] target/alpha: Remove CONFIG_SOFTFLOAT_INLINE Date: Fri, 22 May 2026 11:26:37 -0700 Message-ID: <20260522182658.184604-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::630; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x630.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474543874158500 Don't peek into float_status internals. Fix the helper calls that were missing an argument. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- target/alpha/translate.c | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/target/alpha/translate.c b/target/alpha/translate.c index d2d1467a81..c66e3f9c14 100644 --- a/target/alpha/translate.c +++ b/target/alpha/translate.c @@ -34,7 +34,6 @@ #undef HELPER_H =20 #undef ALPHA_DEBUG_DISAS -#define CONFIG_SOFTFLOAT_INLINE =20 #ifdef ALPHA_DEBUG_DISAS # define LOG_DISAS(...) qemu_log_mask(CPU_LOG_TB_IN_ASM, ## __VA_ARGS__) @@ -578,15 +577,7 @@ static void gen_qual_roundmode(DisasContext *ctx, int = fn11) break; } =20 -#if defined(CONFIG_SOFTFLOAT_INLINE) - /* ??? The "fpu/softfloat.h" interface is to call set_float_rounding_m= ode. - With CONFIG_SOFTFLOAT that expands to an out-of-line call that just - sets the one field. */ - tcg_gen_st8_i32(tmp, tcg_env, - offsetof(CPUAlphaState, fp_status.float_rounding_mode)= ); -#else - gen_helper_setroundmode(tmp); -#endif + gen_helper_setroundmode(tcg_env, tmp); } =20 static void gen_qual_flushzero(DisasContext *ctx, int fn11) @@ -609,12 +600,7 @@ static void gen_qual_flushzero(DisasContext *ctx, int = fn11) tcg_gen_movi_i32(tmp, 1); } =20 -#if defined(CONFIG_SOFTFLOAT_INLINE) - tcg_gen_st8_i32(tmp, tcg_env, - offsetof(CPUAlphaState, fp_status.flush_to_zero)); -#else - gen_helper_setflushzero(tmp); -#endif + gen_helper_setflushzero(tcg_env, tmp); } =20 static TCGv_i64 gen_ieee_input(DisasContext *ctx, int reg, int fn11, int i= s_cmp) --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474589; cv=none; d=zohomail.com; s=zohoarc; b=my236XgcTCtRQlyaj+SNvXObfKDwAfuUEbKUdM8K43fVOJH++N6Ap/vJiPOZCuSgkKVcZ4k49x6xrfdoeAS/l8EhykYO/HPyV5DWXWJ+5itWt+FNpvTMBUeTzcmEdFjVXDDWTlrm9W1k8/XMjzy6fKt+BYJoYz4ZCZ9o3K2X7mM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474589; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=N6pOylLIPPF3SzGGD/hO5sB9wT9twUN2F4g4tckWWxE=; b=bHLZCV3sPAyAJr3hOOB3FAXg1V5L0mj1+Nis3r6z79Y3knNvaINRbUv9C61qobMfVsqO47aCMUlSkH0+oFyxOQBAMMbYcF7Enpx9I3Os32XDscKHGgieptT2qcZ8CtQnYKNZI+nisX3O0uaPKSUPd0lySTy0k7x2/8kiKQfMMV0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474589505909.8891568490643; Fri, 22 May 2026 11:29:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUb2-0004pf-IY; Fri, 22 May 2026 14:27:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUay-0004lM-6C for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:40 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUaw-0005PN-6J for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:39 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2b458ca2296so56004825ad.0 for ; Fri, 22 May 2026 11:27:37 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474457; x=1780079257; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=N6pOylLIPPF3SzGGD/hO5sB9wT9twUN2F4g4tckWWxE=; b=eKX2Fx4E+ua434tjuaBvpkG+XvXSW2CSX+3QKwBhmhHZntQFH0pZZvCXOuhFYD6Eft vf3XYII2bUfQ35NtJaPcdwftmnk+BPU14QmA7CMafVag6Y+pTfHgWwVnzNfrAZITIFLK Snpa06tLJnAT2bIUsX5H2ZTlDvP1DBhxzyi0BRbLN0BqmlqsEJWyNe6UljGTgcrGExJ5 t8j1WgK5bltMqObBIo7ED5WS6AuXCe0JetiLF/zdawEUMEfwFTg/7Ss6lfPT4jN0W5Zh qAQZ0Tw7aV3Gr2GeHB9MGe8Hp/gMZYS0CsOaBqavtlQ1443wGEf+fPC+891Bh4rGAMmo M6TA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474457; x=1780079257; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=N6pOylLIPPF3SzGGD/hO5sB9wT9twUN2F4g4tckWWxE=; b=So/KERLSnfUKDSsE+mslBo5V08tjiV/Fkl1vc1IXo0scF5rwA31TcFFRFM7OgIYkcK HU65VCIHq0AxvxUyiNtkVTchX2JfsI+ffijxhXlp1WubG6HEwRjjZd1/+0+xEdb7BW7y 1/ukIs6g1YAGC0ycFIaxoBdErx7yLfsXPXtJ0IEuNg2Z19dwpzZv7U3Y1XRUdk0UfdAV 8PalvvzTh3e0TRrNbjtKpcIKyN5WYoC+JxbdOSruhJ3KYwBD41LaWWDfHg6CaE3eZwsg cppbQh1S6sL+3rw+8p0TOlGSbS2IYfyCAkn3M+Rl/oeOPUZBpzfkX/PHQwn6dWrhzQR8 nsGg== X-Gm-Message-State: AOJu0YwOw7dOwYfDcY+S9Ivt6FsXbIq6zYKyw5EsL2bgg52smPM2uPPl U5zXAtbxfF7EEOBCt+dxBMgh0+pY+YPH3zSy+nLcWqyr9zBsDAlTkuVpWkfsA+PMOUL5XGiwtf1 t5ReR X-Gm-Gg: Acq92OE1ESnPpGJ6OBftsoEW87ftwAuYc/K7cKrHgtImAwXhW/HsRCy5VJ05dmBu4JG 9DQSyWxnQPNTHdn7UTxC3NqkxJz/ktHFP+rhRrcJ6Svp/dlaF3Ov9e/k5D3veMhDN+GCWUPvFbA qV16ByWR3XjP/fDz5j7p/dh6yEXgHhMNkkoVy0BHtza5ckvAbhEYp99XwSN6kp0sHPUR3txXVEb KpEWewCw1MKm0JEUQnj//95hHmZ3YjL2LkFA2aAt3ocx1epD531qfj0jtn7A/gkvvDJ9UQud4yr JuuohlUVDzqBBiuZFbCxtnPvyInKd2uXB3rLLjsXqYkrBIZfcPkJ2v+/hyJhDFk6XJ2BrjdCi/o rzn7GEw4MXdFKVcYSP6z/M2NNMWs15sfb1g4GQy0384Eoy34AALKd9V8wzG05DwR5jlCX6SQxos +QTAPvjtv47Xx+trOs8zG8xAj274pc X-Received: by 2002:a17:902:fc48:b0:2b0:c45a:bc2 with SMTP id d9443c01a7336-2beb059cebcmr51923135ad.16.1779474456695; Fri, 22 May 2026 11:27:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 10/30] fpu: Introduce FloatExceptionFlags Date: Fri, 22 May 2026 11:26:38 -0700 Message-ID: <20260522182658.184604-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474590258158500 We have, in the past, used any of uint8_t, uint16_t or int to hold the set of exception flags. Use a typedef instead. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/fpu/softfloat-helpers.h | 6 ++++-- include/fpu/softfloat-types.h | 4 +++- include/fpu/softfloat.h | 2 +- fpu/softfloat.c | 2 +- fpu/softfloat-parts.c.inc | 7 ++++--- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/include/fpu/softfloat-helpers.h b/include/fpu/softfloat-helper= s.h index 90862f5cd2..745a49f07a 100644 --- a/include/fpu/softfloat-helpers.h +++ b/include/fpu/softfloat-helpers.h @@ -64,7 +64,8 @@ static inline void set_float_rounding_mode(FloatRoundMode= val, status->float_rounding_mode =3D val; } =20 -static inline void set_float_exception_flags(int val, float_status *status) +static inline void +set_float_exception_flags(FloatExceptionFlags val, float_status *status) { status->float_exception_flags =3D val; } @@ -146,7 +147,8 @@ static inline FloatRoundMode get_float_rounding_mode(co= nst float_status *status) return status->float_rounding_mode; } =20 -static inline int get_float_exception_flags(const float_status *status) +static inline FloatExceptionFlags +get_float_exception_flags(const float_status *status) { return status->float_exception_flags; } diff --git a/include/fpu/softfloat-types.h b/include/fpu/softfloat-types.h index ead146c22d..5048faa76f 100644 --- a/include/fpu/softfloat-types.h +++ b/include/fpu/softfloat-types.h @@ -181,6 +181,8 @@ enum { float_flag_input_denormal_used =3D 0x4000, }; =20 +typedef uint16_t FloatExceptionFlags; + /* * Rounding precision for floatx80. */ @@ -385,7 +387,7 @@ typedef enum __attribute__((__packed__)) { */ =20 typedef struct float_status { - uint16_t float_exception_flags; + FloatExceptionFlags float_exception_flags; FloatRoundMode float_rounding_mode; FloatX80RoundPrec floatx80_rounding_precision; FloatX80Behaviour floatx80_behaviour; diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h index 1580d956d5..4ae4ddc799 100644 --- a/include/fpu/softfloat.h +++ b/include/fpu/softfloat.h @@ -101,7 +101,7 @@ typedef enum { | Routine to raise any or all of the software IEC/IEEE floating-point | exception flags. *-------------------------------------------------------------------------= ---*/ -static inline void float_raise(uint16_t flags, float_status *status) +static inline void float_raise(FloatExceptionFlags flags, float_status *st= atus) { status->float_exception_flags |=3D flags; } diff --git a/fpu/softfloat.c b/fpu/softfloat.c index df94f299e1..391d8f3169 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -2976,7 +2976,7 @@ static int64_t float128_to_int64_scalbn(float128 a, F= loatRoundMode rmode, static Int128 float128_to_int128_scalbn(float128 a, FloatRoundMode rmode, int scale, float_status *s) { - int flags =3D 0; + FloatExceptionFlags flags =3D 0; Int128 r; FloatParts128 p =3D float128_unpack_canonical(a, s); =20 diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 4715187017..bc348f75a3 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -297,7 +297,8 @@ static void partsN(uncanon_normal)(FloatPartsN *p, floa= t_status *s, const uint64_t roundeven_mask =3D round_mask | frac_lsb; uint64_t inc; bool overflow_norm =3D saturate; - int exp, flags =3D 0; + int exp; + FloatExceptionFlags flags =3D 0; =20 switch (s->float_rounding_mode) { case float_round_nearest_even_max: @@ -1256,7 +1257,7 @@ static int64_t partsN(float_to_sint)(FloatPartsN *p, = FloatRoundMode rmode, int scale, int64_t min, int64_t max, float_status *s) { - int flags =3D 0; + FloatExceptionFlags flags =3D 0; uint64_t r; =20 switch (p->cls) { @@ -1324,7 +1325,7 @@ static int64_t partsN(float_to_sint)(FloatPartsN *p, = FloatRoundMode rmode, static uint64_t partsN(float_to_uint)(FloatPartsN *p, FloatRoundMode rmode, int scale, uint64_t max, float_statu= s *s) { - int flags =3D 0; + FloatExceptionFlags flags =3D 0; uint64_t r; =20 switch (p->cls) { --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474470; cv=none; d=zohomail.com; s=zohoarc; b=GScSV5pk/3VxhCaEeq1hwadTWRL00E8Fb+lA4toE5wlFKltYieuJSX6wkbNa7hatSg1QXMVls6nYdjMhAJiJsQOtyJ6agTMJBefNiNspRjQ19H9mM41hlRZwNMWvsMw6vVj5jAhPBfxADHjJkP2mzoFWXlWlQbQ9YrhYSFb2JJ0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474470; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=9Qae3c5BjQ+dTxdzUKGbagRfnMHB9QZdBYw5eqt/8KM=; b=k53BXZWIDBi4+Abc7CqkW22tvYVIi5kJD56VMcQvkHaRkb5nhTAqmJqRhnSQmq1vr74x18cFAjX0x8GWZIiUia8gubQXrFloL+KOtre+CXYjzuJBlmnR83zWCnYqBTWAca0VnQWYg7tJq9M76OUehjNgP4qU1RUQgF0ls5aSe5E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474470770934.4321741366964; Fri, 22 May 2026 11:27:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUb0-0004n6-OF; Fri, 22 May 2026 14:27:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUay-0004lZ-Ok for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:40 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUax-0005Pe-1I for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:40 -0400 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-2bc7b311e77so35021695ad.0 for ; Fri, 22 May 2026 11:27:38 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474458; x=1780079258; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9Qae3c5BjQ+dTxdzUKGbagRfnMHB9QZdBYw5eqt/8KM=; b=MytyLUX/7cvlQlBizC50FuZDMkCrCjEYKlo9sMABu4lSlaje47Txt84vRsuQ3RoAGg aHRYW/Asf9TNjizZmUcJWut5eG3pbkpMmU7nNewAjmxg3RkouzwFuflGVceNTS5g/ILx wYeYapOgAT4jSK6/o4RGSGXMq32YKqa09Pi8MQ7/vDG2D4KVNVEa/LUg2HIoX77MfOC2 Bj0+tX12jrIMczSmRsyuswxMfr4lEpXyZm1h+UR9TtoEGxym2v5gtuR6tdswOM1NBc9M 22icumycaz2aNKbL4ncqn1l3fMSus/xPmLi7KtlHMx8JSvNruga2jqwgAfOZGGtR390B QJaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474458; x=1780079258; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=9Qae3c5BjQ+dTxdzUKGbagRfnMHB9QZdBYw5eqt/8KM=; b=Ws6eUWntXnEiAbJKqbPCdJ2Njrkc3Cvo7aOeZSxNTHgjTzs/kWY5tbqPMav8zMtbzu n4/EDsFWO1q//IZvYZDd29/9inldCEtICeGNiDW7XXgmisSeCTnVDm+HNa24fkLU7gSZ M4nuSJZLJwLD+p254soQthbfrkEQ6hczvLYRynM9xOXZdaqKAdBCH/b4Kspbwt/CU/Dh qoRrIyHzhun/qUvJo6O0d+T0zKSGFUrWbDhgSAbskLEk1jAYZenr0iEtkVxpjbD3SQLz zH835EcysTM8Vd2LwMw7ep0rCUKdRJbTtSXwuIMRwNgkkiRXNqI/j7meHpxHbrd03xCP zrxg== X-Gm-Message-State: AOJu0YwKw4uByVmb990xgiLBpdufLvngt6MY7abU6C/cIJ3px3e5Elqb 2VbHJoiWHiXlmr4kXYHIqkuTQAqaOubQaM5ImPN2iQ47k2cskdsZsXSU6do1DcBfa+V36OuIZBL UuIi/ X-Gm-Gg: Acq92OHudc0MAizsP9rvuXmjN0jVbA1SuTgALa0GQeK76pTLH6vNAErNJ90+wePNOmG h2dkZyF21fdGyWAdk5nE0M6hxU2FH0VHjV4SMnFepqDVvLAOg/AXIUAsUPpJ/5qBKmQilbQEAkz /DTNDas9SK6ftAYGEG3agzXbANOx77ItZk1Lupa3qYHsGDugr6w2F3/z/CaopSJL99rBLdjoBRt P3RmOuZO7kzWQywaEWakKi9GsxiT3JgeWpWx1xz1XH+nz0z9og4t/+OnWiSOrrv/erwNBvjWvvc wwb4PKY3wG/jG/1qdNrxaTFdLls2qczpakOFc5mSWtuDHpspP2+CPQCk5gC8OkoG/7byj7ZDwgX t1qFSNPO76Oty4RqF4gggS/QVRw8oSWPxQq+TpnD6ldhogNI6xWSLB5FqSBkR4fKv2CsgqJ9hGK svczigUI0XY97gq0VCdiasriVd/7kn X-Received: by 2002:a17:903:11c9:b0:2b0:506b:e6f8 with SMTP id d9443c01a7336-2bea20a2d54mr78206775ad.5.1779474457526; Fri, 22 May 2026 11:27:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 11/30] target/alpha: Use FloatExceptionFlags Date: Fri, 22 May 2026 11:26:39 -0700 Message-ID: <20260522182658.184604-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::635; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474471714158500 Fixes a bug in which we were still using uint8_t. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- target/alpha/fpu_helper.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/alpha/fpu_helper.c b/target/alpha/fpu_helper.c index 30f3c7fd18..9af77777da 100644 --- a/target/alpha/fpu_helper.c +++ b/target/alpha/fpu_helper.c @@ -40,7 +40,7 @@ void helper_setflushzero(CPUAlphaState *env, uint32_t val) =20 static uint32_t soft_to_fpcr_exc(CPUAlphaState *env) { - uint8_t exc =3D get_float_exception_flags(&FP_STATUS); + FloatExceptionFlags exc =3D get_float_exception_flags(&FP_STATUS); uint32_t ret =3D 0; =20 if (unlikely(exc)) { @@ -455,7 +455,7 @@ static uint64_t do_cvttq(CPUAlphaState *env, uint64_t a= , int roundmode) float64 fa; int64_t ret; uint32_t exc =3D 0; - int flags; + FloatExceptionFlags flags; =20 fa =3D t_to_float64(a); ret =3D float64_to_int64_modulo(fa, roundmode, &FP_STATUS); --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474648; cv=none; d=zohomail.com; s=zohoarc; b=MOBYEXrUJh8s6L0X6iHxJYarj/Jdr7jZ+GKTHeqr6ifjg0j+VD5g1prXFjuosJ6Aw68y7xvSEs/kav6AwSaRfkfCCdebuhjShil7f3KDfY0P8FyOnmNDUfOxLaXM6SSdfM8DHUrefQJxMBrKaLGQrplabWKItdlnuq/syaEd4EA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474648; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=yj7ZvwjIiBB1Rcal6z5w1HZi23h74lNdQA/PCnqvLXY=; b=UQwmKhGYalIJrH8fOmG8w0iSNply0gKbDsOjk9V2TB8rdNkelaJeUJJ2X6BaDcjbtSrj6p9qZ3qNKx7Dqds0ycUsMA8i+Mt7XrqJAU0/hgBn9+hgdvC9YDDJ5xcKwVzzWNPXbWDaDi6wHBnK4theDg6N/c/gwHaRtBdh0tMyqZo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474648310115.05914601335951; Fri, 22 May 2026 11:30:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUb1-0004pC-PD; Fri, 22 May 2026 14:27:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUb0-0004mE-0t for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:42 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUay-0005Py-6L for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:41 -0400 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-2b458ca2296so56004995ad.0 for ; Fri, 22 May 2026 11:27:39 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474458; x=1780079258; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yj7ZvwjIiBB1Rcal6z5w1HZi23h74lNdQA/PCnqvLXY=; b=SU/MGwSkzI6kgm1eL8DItIQTSB8tQxKxe8vFUHKp6ZPYikhmQ7qy7LwWofoLHlnlqy Bgf8ouJZoNvRTGeFAQ5+u6uowuLduRvl7zhZbRjo5j0advWyQkhSoQ8QZLMJCx9rwCbU ktCesw+rHvvW8lvwyeEGQ0mGvrprso2dOK8ZJvn7iy/R+b9jaYuqxmIxBgtXlgQgwojD JEL9oytnRnofe2s3qR1snuWlqKRE35CIOKERG5wU02Vn3k3zy6/DdGsLYkKb6lZipvw/ 1YoINZdPt9njEUzq41EnM4yIWE7SdzsII4INhjbiMb39tdGaYTN0EKH2AoPrBdbIhYeD 5bzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474458; x=1780079258; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=yj7ZvwjIiBB1Rcal6z5w1HZi23h74lNdQA/PCnqvLXY=; b=l6lTbM1NSFyDQMtpmq30P7h0ggALQqo7YroLK1BTvDnKYglsV5Ze84HchTQZmY/CFd W8WyfDSSwoPbpRgttIrMKnuB776KaSh1hq6tP1qnU5K1nQA10Fzj4ilrbD2tGRTzk7O7 RoZH1HjKLgxZFyFDwbBMR3PQfHZgEXuVNieuu62lPtbQB5U72y/vSdLV7tse9jnyz33j 6dLy1Q5qRM7v2KawWEV5JqJRPLKDt0MP6qzsbt1wnSsBFmHxRHZ63eNjf6pWd61CxOPp 04t6l9KYxwTMEuEzo94VJS8dkCObTtifgUMQ/5A+Q1zz0yaMTdJCJ79V/ugkQkrfSN/F VlBA== X-Gm-Message-State: AOJu0YzvYiHCnMMkqWlubwoU4P5kPbjkfMWeQ0f70hIKDTczwBpxlw6S 70+Wyfxath0ua9jYe4iW2JHoHRZ2dra/ykWbHN09vBi+LocNfj68sWNUKwmNIHgRE2VcPx+WvAA +lTdf X-Gm-Gg: Acq92OFINsIqCtgQrKvmuYGET7vtcM1y0b440y755XrrzwUIitbzQFtWRoPD1XneqDr I8OPazLpJUS9b31KHNUdFnLrS7BbX11ozcKk6zlfBCAX/xP0JfzC1mh373/37pjd0+kQ7Jz9GJP VFxYRLhiVaQzXAu+FbPgfHleVylSyHbCdJn71dLds8QTwToA1kNs1BRMG8BDC4JTLCR9CqduOsn 8bdMqeyoG67mSerqmBsz5bnlPxOK57qCviscFHJ8KaIv44JZKFeb0zWlVPrAP+3wt5AvB4Uj2Fj dV2vaxqYs35GrEU5BUYWq07aremJHpYF1LXodmaGke8OpwhqyEKtSzjrKk9mqIwpvaQNRlQJGwk SK48FehiJp3xqfsKExGbTAIyOQeHnPA5t+fOPw5V+YTpOZIiqA99IbMZy95rjb9bnhOXq3qdsqv Qtn5PdKfJiPDzq4rfb+CT+K00dMejx X-Received: by 2002:a17:903:2ece:b0:2bd:93b0:2c1c with SMTP id d9443c01a7336-2beb0347067mr57338955ad.3.1779474458446; Fri, 22 May 2026 11:27:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 12/30] fpu: Introduce frac_msb_is_snan Date: Fri, 22 May 2026 11:26:40 -0700 Message-ID: <20260522182658.184604-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::633; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x633.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474650272154101 Unify handling of the two snan parameters, letting the caller simply extract the msb. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat-specialize.c.inc | 45 ++++++++++------------------------ 1 file changed, 13 insertions(+), 32 deletions(-) diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc index 485f082cf8..e2e3ec0e81 100644 --- a/fpu/softfloat-specialize.c.inc +++ b/fpu/softfloat-specialize.c.inc @@ -104,16 +104,21 @@ static inline bool snan_bit_is_one(float_status *stat= us) | if the fraction represents a signalling NaN; otherwise false. *-------------------------------------------------------------------------= ---*/ =20 -static bool parts_is_snan_frac(uint64_t frac, float_status *status) +static bool frac_msb_is_snan(bool msb, float_status *status) { if (no_signaling_nans(status)) { return false; } else { - bool msb =3D extract64(frac, DECOMPOSED_BINARY_POINT - 1, 1); return msb =3D=3D snan_bit_is_one(status); } } =20 +static bool parts_is_snan_frac(uint64_t frac, float_status *status) +{ + bool msb =3D extract64(frac, DECOMPOSED_BINARY_POINT - 1, 1); + return frac_msb_is_snan(msb, status); +} + /*------------------------------------------------------------------------= ---- | The pattern for a default generated deconstructed floating-point NaN. *-------------------------------------------------------------------------= ---*/ @@ -238,11 +243,7 @@ floatx80 floatx80_default_inf(bool zSign, float_status= *status) =20 static bool float16_nan_is_snan(float16 a, float_status *status) { - if (no_signaling_nans(status)) { - return false; - } - bool frac_msb_is_one =3D (a >> 9) & 1; - return frac_msb_is_one =3D=3D snan_bit_is_one(status); + return frac_msb_is_snan((a >> 9) & 1, status); } =20 /*------------------------------------------------------------------------= ---- @@ -271,11 +272,7 @@ bool float16_is_signaling_nan(float16 a_, float_status= *status) =20 static bool bfloat16_nan_is_snan(bfloat16 a, float_status *status) { - if (no_signaling_nans(status)) { - return false; - } - bool frac_msb_is_one =3D (a >> 6) & 1; - return frac_msb_is_one =3D=3D snan_bit_is_one(status); + return frac_msb_is_snan((a >> 6) & 1, status); } =20 /*------------------------------------------------------------------------= ---- @@ -302,11 +299,7 @@ bool bfloat16_is_signaling_nan(bfloat16 a_, float_stat= us *status) =20 static bool float32_nan_is_snan(float32 a, float_status *status) { - if (no_signaling_nans(status)) { - return false; - } - bool frac_msb_is_one =3D (a >> 22) & 1; - return frac_msb_is_one =3D=3D snan_bit_is_one(status); + return frac_msb_is_snan((a >> 22) & 1, status); } =20 /*------------------------------------------------------------------------= ---- @@ -335,11 +328,7 @@ bool float32_is_signaling_nan(float32 a_, float_status= *status) =20 static bool float64_nan_is_snan(float64 a, float_status *status) { - if (no_signaling_nans(status)) { - return false; - } - bool frac_msb_is_one =3D (a >> 51) & 1; - return frac_msb_is_one =3D=3D snan_bit_is_one(status); + return frac_msb_is_snan((a >> 51) & 1, status); } =20 /*------------------------------------------------------------------------= ---- @@ -370,11 +359,7 @@ bool float64_is_signaling_nan(float64 a_, float_status= *status) =20 static bool floatx80_nan_is_snan(floatx80 a, float_status *status) { - if (no_signaling_nans(status)) { - return false; - } - bool frac_msb_is_one =3D (a.low >> 62) & 1; - return frac_msb_is_one =3D=3D snan_bit_is_one(status); + return frac_msb_is_snan((a.low >> 62) & 1, status); } =20 /*------------------------------------------------------------------------= ---- @@ -416,11 +401,7 @@ floatx80 floatx80_silence_nan(floatx80 a, float_status= *status) =20 static bool float128_nan_is_snan(float128 a, float_status *status) { - if (no_signaling_nans(status)) { - return false; - } - bool frac_msb_is_one =3D (a.high >> 47) & 1; - return frac_msb_is_one =3D=3D snan_bit_is_one(status); + return frac_msb_is_snan((a.high >> 47) & 1, status); } =20 /*------------------------------------------------------------------------= ---- --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474646; cv=none; d=zohomail.com; s=zohoarc; b=QZ4aJ3KjEeQyPyOeL5PbMB8W4M1krL06Nu6c3vko/fIJJ3refhd/tdjhfNw4fA+1HPSonxFVnxWUSOCK53yQsP5luNQwpyg/5BV4z9z5JaFuxw4XPYqP4HEDQjnpgSQZMXb+kYit6flW3bGYGlbYHbAWgqy1k4fB0yke/u9EtM0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474646; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=cF7LgAgCa0OgQz/V+tfN/kuTyTf193rYcF24jrbF7ms=; b=D2esTpkJiCcYjPgsd3DHdg5jJ19APo0bHs7NF0FzAz4SiBeFKQzkWEsKKr+q7yKFrDaQC6CVaQcHoF0IxczNQINaNVUI2Q5BHvqPS0+JTvWjb9xSxu+2ERDWQurZVcJmBDsU1LoSGLL1HQ40RmXV2Xg0JCD8Vdmq4gpJB+Zli5U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474646550231.82974208486337; Fri, 22 May 2026 11:30:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUb3-0004r5-CB; Fri, 22 May 2026 14:27:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUb1-0004nO-Ap for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:43 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUay-0005QJ-TU for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:43 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2b4583f0a1aso52534785ad.3 for ; Fri, 22 May 2026 11:27:40 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474459; x=1780079259; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cF7LgAgCa0OgQz/V+tfN/kuTyTf193rYcF24jrbF7ms=; b=ru8TdGjQRf1qChkO5eSzUz+icuqX1RsDvT2bjjnZkD82g8k3Ec0Bui1AuwqNGbbXqt wWogwRJrRxvqch63AGXYvopcdvUtB8Or0DO3TVjGdh/KM5FRV0pbF+TzWmC9/6hrXXAd 2gZFJ725fRT7vI/LDos32DgWe9xOiw5j36G30inf7epGYK/L7tHQ6b2Y26F3VLNmI7LG MhAp2FZu4O0Dlfd5mStTN0q8Zzb36s5f+lD7f2S/4vHLAH38TMwFwUDfTSawOyD1CEXG 82o8mlJj7w/fgTP+lB8ZeOPW6pA5y3zDGZ2hhiiOlLGzmrsNKAGGNwVy+YO6G2nMPilN ZYbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474459; x=1780079259; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=cF7LgAgCa0OgQz/V+tfN/kuTyTf193rYcF24jrbF7ms=; b=IeV50reDynliFvgcr4YUAc+oAEKJmagL2U5jalxTsu0w79Q9d7oImx6uacaUVqmYPC lucIHbEd6HFDGDoHWDpmy5cusnG9WVJPfm4LqP/sjC9d1bKTaZS42lat0KJm0EjewV7S tOFGX5O6qd53cmg6rbEaxG2JkYZPYVC/FZKam3WWQagPxjlF3z+QfhGK6Mxxmrh9G+kP zmdDJhnVGRSXJ9gNmZ7hcNU6HwecqpjyoPuEMmTqi0PnLZ8pWLD/CFbxW1eyp72+jeD7 zP3KuidNeCI58Skjaqa118DjpmiHcjQsWD4EDgNuvMLl4IilpuqUcOomzbDa5nELZcni 7Sdw== X-Gm-Message-State: AOJu0Yw1RZR8qSvdN2+Bg6Hr1cqtkhesxAom5likQm4MizTsblkf+Dub xL5SeZ3melDno5hDslC1xUfUkiKtTnRxEctz/Hk8NFcR1quM6SpoLCkuzlzPHTok3XUv4h0sU83 ebMV/ X-Gm-Gg: Acq92OF+4IBXqoyKkBc+z/Vy/CKskUgEgIqJDWUNtVKZRcDEity28bVEs1Qwz2WSDK/ o4VPN+VK5pEILjWME3ZP0AjDZ/IgN9zDcn7tyeWtHpIfpvYSu6Xlo80yOe6f6TEyDsW12xySq4d NRe/051kIk1mbGXeJouD9KNM+RK4p5LT5hfmfJLw9Mc+T/6uzCBSDn9coK6W3w90mwbQcyR0jod WTUGoCqXXA0ZbBl+qz0DLuFCBJY56DmKcrHTInD6sQdipGlXzlf+/NbDM13sKZ2yc3NTxUByyHR wC8AE6486SVCKi4H5RD8QzD7Ezq7umErYoqMXh8V34FSf2RxuoU7TK6XgkfILSo0teU3Yd2ttdj Jll0wkvdMzMQB2jzPbJmcGy2IdA4NCQBNeGJY/R0Qp4aiQ1uph1ESI2hFt6Jj8zMOV2uz14Y0Fg kVT4X91vVczA1lHnTKdhDkG4S4/UD4 X-Received: by 2002:a17:903:1a27:b0:2b2:4b4e:e4d2 with SMTP id d9443c01a7336-2beb0758412mr49932665ad.15.1779474459199; Fri, 22 May 2026 11:27:39 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 13/30] fpu: Introduce FloatSNaNRule Date: Fri, 22 May 2026 11:26:41 -0700 Message-ID: <20260522182658.184604-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x631.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474648693158500 Merge snan_bit_is_one and no_signaling_nans into one control. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/fpu/softfloat-helpers.h | 14 +++++----- include/fpu/softfloat-types.h | 25 ++++++++++++----- target/mips/fpu_helper.h | 3 ++- target/hppa/fpu_helper.c | 2 +- target/mips/msa.c | 4 +-- target/sh4/cpu.c | 2 +- target/xtensa/cpu.c | 3 ++- fpu/softfloat-specialize.c.inc | 48 +++++++++++++-------------------- 8 files changed, 51 insertions(+), 50 deletions(-) diff --git a/include/fpu/softfloat-helpers.h b/include/fpu/softfloat-helper= s.h index 745a49f07a..95edd22842 100644 --- a/include/fpu/softfloat-helpers.h +++ b/include/fpu/softfloat-helpers.h @@ -127,14 +127,9 @@ static inline void set_default_nan_mode(bool val, floa= t_status *status) status->default_nan_mode =3D val; } =20 -static inline void set_snan_bit_is_one(bool val, float_status *status) +static inline void set_snan_rule(FloatSNaNRule val, float_status *status) { - status->snan_bit_is_one =3D val; -} - -static inline void set_no_signaling_nans(bool val, float_status *status) -{ - status->no_signaling_nans =3D val; + status->float_snan_rule =3D val; } =20 static inline bool get_float_detect_tininess(const float_status *status) @@ -203,6 +198,11 @@ static inline bool get_default_nan_mode(const float_st= atus *status) return status->default_nan_mode; } =20 +static inline FloatSNaNRule get_snan_rule(float_status *status) +{ + return status->float_snan_rule; +} + static inline FloatFTZDetection get_float_ftz_detection(const float_status= *status) { return status->ftz_detection; diff --git a/include/fpu/softfloat-types.h b/include/fpu/softfloat-types.h index 5048faa76f..cf7093fa86 100644 --- a/include/fpu/softfloat-types.h +++ b/include/fpu/softfloat-types.h @@ -192,6 +192,23 @@ typedef enum __attribute__((__packed__)) { floatx80_precision_s, } FloatX80RoundPrec; =20 +/* + * Define how the architecture discriminates signaling NaNs. + * This done with the most significant bit of the fraction. + * + * In IEEE 754-1985 this was implementation defined, but in IEEE 754-2008 + * the msb must be 0. But setting the msb to 1 got baked into HPPA, SH4, + * and pre-2008 MIPS. + * + * Further, some architectures (or modes of architectures) do not detect + * signaling NaNs at all. + */ +typedef enum __attribute__((__packed__)) { + float_snan_bit_is_zero, + float_snan_bit_is_one, + float_snan_never, +} FloatSNaNRule; + /* * 2-input NaN propagation rule. Individual architectures have * different rules for which input NaN is propagated to the output @@ -394,6 +411,7 @@ typedef struct float_status { Float2NaNPropRule float_2nan_prop_rule; Float3NaNPropRule float_3nan_prop_rule; FloatInfZeroNaNRule float_infzeronan_rule; + FloatSNaNRule float_snan_rule; bool tininess_before_rounding; /* should denormalised results go to zero and set output_denormal_flus= hed? */ bool flush_to_zero; @@ -412,13 +430,6 @@ typedef struct float_status { * create a default NaN. */ uint8_t default_nan_pattern; - /* - * The flags below are not used on all specializations and may - * constant fold away (see snan_bit_is_one()/no_signalling_nans() in - * softfloat-specialize.inc.c) - */ - bool snan_bit_is_one; - bool no_signaling_nans; /* should overflowed results subtract re_bias to its exponent? */ bool rebias_overflow; /* should underflowed results add re_bias to its exponent? */ diff --git a/target/mips/fpu_helper.h b/target/mips/fpu_helper.h index 08fb409390..cf667c6637 100644 --- a/target/mips/fpu_helper.h +++ b/target/mips/fpu_helper.h @@ -35,7 +35,8 @@ static inline void restore_snan_bit_mode(CPUMIPSState *en= v) * With nan2008, SNaNs are silenced in the usual way. * Before that, SNaNs are not silenced; default nans are produced. */ - set_snan_bit_is_one(!nan2008, &env->active_fpu.fp_status); + set_snan_rule(nan2008 ? float_snan_bit_is_zero : float_snan_bit_is_one, + &env->active_fpu.fp_status); set_default_nan_mode(!nan2008, &env->active_fpu.fp_status); /* * For MIPS systems that conform to IEEE754-1985, the (inf,zero,nan) diff --git a/target/hppa/fpu_helper.c b/target/hppa/fpu_helper.c index 2d272730f6..cdbebcfeb3 100644 --- a/target/hppa/fpu_helper.c +++ b/target/hppa/fpu_helper.c @@ -66,7 +66,7 @@ void HELPER(loaded_fr0)(CPUHPPAState *env) set_float_infzeronan_rule(float_infzeronan_dnan_never, &env->fp_status= ); /* Default NaN: sign bit clear, msb-1 frac bit set */ set_float_default_nan_pattern(0b00100000, &env->fp_status); - set_snan_bit_is_one(true, &env->fp_status); + set_snan_rule(float_snan_bit_is_one, &env->fp_status); /* * "PA-RISC 2.0 Architecture" says it is IMPDEF whether the flushing * enabled by FPSR.D happens before or after rounding. We pick "before" diff --git a/target/mips/msa.c b/target/mips/msa.c index 32c6acbcc5..53fbce10d3 100644 --- a/target/mips/msa.c +++ b/target/mips/msa.c @@ -84,8 +84,8 @@ void msa_reset(CPUMIPSState *env) /* clear float_status nan mode */ set_default_nan_mode(0, &env->active_tc.msa_fp_status); =20 - /* set proper signanling bit meaning ("1" means "quiet") */ - set_snan_bit_is_one(0, &env->active_tc.msa_fp_status); + /* set proper signanling bit meaning */ + set_snan_rule(float_snan_bit_is_zero, &env->active_tc.msa_fp_status); =20 /* Inf * 0 + NaN returns the input NaN */ set_float_infzeronan_rule(float_infzeronan_dnan_never, diff --git a/target/sh4/cpu.c b/target/sh4/cpu.c index 40d5fde76d..763424695c 100644 --- a/target/sh4/cpu.c +++ b/target/sh4/cpu.c @@ -151,7 +151,7 @@ static void superh_cpu_reset_hold(Object *obj, ResetTyp= e type) set_flush_to_zero(1, &env->fp_status); #endif set_default_nan_mode(1, &env->fp_status); - set_snan_bit_is_one(true, &env->fp_status); + set_snan_rule(float_snan_bit_is_one, &env->fp_status); /* sign bit clear, set all frac bits other than msb */ set_float_default_nan_pattern(0b00111111, &env->fp_status); /* diff --git a/target/xtensa/cpu.c b/target/xtensa/cpu.c index d6d42319e5..2015a4e3d0 100644 --- a/target/xtensa/cpu.c +++ b/target/xtensa/cpu.c @@ -209,7 +209,8 @@ static void xtensa_cpu_reset_hold(Object *obj, ResetTyp= e type) #endif /* For inf * 0 + NaN, return the input NaN */ set_float_infzeronan_rule(float_infzeronan_dnan_never, &env->fp_status= ); - set_no_signaling_nans(!dfpu, &env->fp_status); + set_snan_rule(dfpu ? float_snan_bit_is_zero : float_snan_never, + &env->fp_status); /* Default NaN value: sign bit clear, set frac msb */ set_float_default_nan_pattern(0b01000000, &env->fp_status); xtensa_use_first_nan(env, !dfpu); diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc index e2e3ec0e81..0b527302a5 100644 --- a/fpu/softfloat-specialize.c.inc +++ b/fpu/softfloat-specialize.c.inc @@ -79,26 +79,6 @@ this code that are retained. * version 2 or later. See the COPYING file in the top-level directory. */ =20 -/* - * Define whether architecture deviates from IEEE in not supporting - * signaling NaNs (so all NaNs are treated as quiet). - */ -static inline bool no_signaling_nans(float_status *status) -{ - return status->no_signaling_nans; -} - -/* Define how the architecture discriminates signaling NaNs. - * This done with the most significant bit of the fraction. - * In IEEE 754-1985 this was implementation defined, but in IEEE 754-2008 - * the msb must be zero. MIPS is (so far) unique in supporting both the - * 2008 revision and backward compatibility with their original choice. - */ -static inline bool snan_bit_is_one(float_status *status) -{ - return status->snan_bit_is_one; -} - /*------------------------------------------------------------------------= ---- | For the deconstructed floating-point with fraction FRAC, return true | if the fraction represents a signalling NaN; otherwise false. @@ -106,11 +86,15 @@ static inline bool snan_bit_is_one(float_status *statu= s) =20 static bool frac_msb_is_snan(bool msb, float_status *status) { - if (no_signaling_nans(status)) { + switch (get_snan_rule(status)) { + case float_snan_never: return false; - } else { - return msb =3D=3D snan_bit_is_one(status); + case float_snan_bit_is_one: + return msb; + case float_snan_bit_is_zero: + return !msb; } + g_assert_not_reached(); } =20 static bool parts_is_snan_frac(uint64_t frac, float_status *status) @@ -172,14 +156,18 @@ FloatParts128 parts128_default_nan(float_status *stat= us) =20 static uint64_t parts_silence_nan_frac(uint64_t frac, float_status *status) { - g_assert(!no_signaling_nans(status)); - - /* The only snan_bit_is_one target without default_nan_mode is HPPA. */ - if (snan_bit_is_one(status)) { + switch (get_snan_rule(status)) { + case float_snan_bit_is_zero: + frac |=3D 1ULL << (DECOMPOSED_BINARY_POINT - 1); + break; + case float_snan_bit_is_one: + /* The only snan_bit_is_one target without default_nan_mode is HPP= A. */ frac &=3D ~(1ULL << (DECOMPOSED_BINARY_POINT - 1)); frac |=3D 1ULL << (DECOMPOSED_BINARY_POINT - 2); - } else { - frac |=3D 1ULL << (DECOMPOSED_BINARY_POINT - 1); + break; + case float_snan_never: + default: + g_assert_not_reached(); } return frac; } @@ -390,7 +378,7 @@ bool floatx80_is_signaling_nan(floatx80 a, float_status= *status) floatx80 floatx80_silence_nan(floatx80 a, float_status *status) { /* None of the targets that have snan_bit_is_one use floatx80. */ - assert(!snan_bit_is_one(status)); + assert(get_snan_rule(status) =3D=3D float_snan_bit_is_zero); a.low |=3D UINT64_C(0xC000000000000000); return a; } --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474705; cv=none; d=zohomail.com; s=zohoarc; b=kbOcRurlCn9Irs2CPOIGPwITfL6qte2j1bCT9C0L0Ac1wR/IAEZfMXAqgyyhh9IBYP6sYjXP1X17ulkfSHjyXwIKgZFwSopU/6kQuOU2ttZ+mVMNc9QCtGitd6tDi4W4puWPYmPC0YTLS8SDQ5BOHfbNa6bolXDncF2l5wgyn9M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474705; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Q+5cfWNTJB+4Qam3ofEoqEbOPB2mlqf7aJzYceF2Hgc=; b=Wi/KX6JkG8+ttmRxkDenkGOxU5BhzZVEbRH2OC6m17Isq71YABgTvqWxP5pygRK/XA1GTySyyxajCyXTNVLY/SMoSYsOFFag8/4vj2nzVJrHArmO5qflF8bfkkWPu+vXR2WQrFb+CKDzL/Ov6u2ZTP7L76FefxOaqLMFt6isMgU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474705289983.1380200677971; Fri, 22 May 2026 11:31:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUb6-0004xh-9u; Fri, 22 May 2026 14:27:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUb5-0004um-2V for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:47 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUaz-0005Qn-UN for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:46 -0400 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-2ba4efedbeaso56998515ad.1 for ; Fri, 22 May 2026 11:27:41 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474460; x=1780079260; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Q+5cfWNTJB+4Qam3ofEoqEbOPB2mlqf7aJzYceF2Hgc=; b=fMBtpuqYHBFtFARyxV8JTxwicTnExoTMciIDtth5Kiq5tnOjFJmi40XGfQP+gNM6Kd o/HcJx9LxuhN6S5e0kR4o1sUhxHHrmLBxO3GniHCeo9DfAj6sFR6ThltFIniPyYLu5pR 2+Lja6rvOau9GB+iuv0WUr5PEgE8QABqZXmyU6YyfzKsPDaG2R4++Bx7BhJLDOyumMXK CXG91YB0QRkayb45Oi4xiXiEfz51Na9nkRe57VxDp+BBSxxJQ6xpXL+CllIbcFEZE6Ot /jYBSbdPyETGMoLupaO1fAfHSRzTswRFbPVXalVGXXjfAsn0WQ1HtqsHOPPHwwMA5MZ+ zQpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474460; x=1780079260; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Q+5cfWNTJB+4Qam3ofEoqEbOPB2mlqf7aJzYceF2Hgc=; b=WlOyS4XXfHpOoXytYvAKVTP1/AtX7q0BrQnt8lB4WuuPZdsRszPjDp5456Zu8OTANq hkZWk97m3ON5J+PdrNPJedtSv1TQ4/5BELA4/t6efgNZqX+WbOsYpIcmV0tewMJvMsqk BpcG2Xr1YwgUwtiM42NNZ3ijJXpoXiuMvvd+Cmmn8uHjZ8EwDYNCQ1xiYVwJzZRku32T 8Nel3uA9riQuzKl9Yp2uMg3pPYc9GnXIkJ0EtbcuzMJopKxN7IgXVeacaxzXLqxJniLr sSNJlddoTg7NWqMzUkrjAe1kPqQ7cMXBD9s8zawt2eXmm50ql0t2DI5dT2p3LOwxnFg1 FRcw== X-Gm-Message-State: AOJu0Yy4IuUrVynUT11fQZBzgPE3X3OPEfWgfYz37gK/qeBk6O0Xc7+b XMbr6PPK6rP3wsgvZWZe9ZZfMbSicZ/aZLJeU9y5WS/sYfPAWRWXahlsFha+WmHNipmiUlwsKAM dx6ot X-Gm-Gg: Acq92OHJL2jMybCm2foaSiS8w1Ne/bXY3mS+sH9Txfve/IiWwaUY6IQLVeKImPiJFwR F8ljg/R4rRJ7x6ZlBo5Zk0O3bH4OeDMZTUcpzpKpe0fR+VfSS/5bwfct2KuUxikkRj8b4NPH0AT j9oRSo5nQmLoGYxw/TT8rh+MkOx1YN0RumU38Q34lFDACRyHxscnA9Q34KfVSvQAhTNTf5wOV6s HIdC1LcCRMt2MotM5VW15+EgCzKv6wBZ/n2KRQgGSxeOUime1bfAjTu4j3yRt+6Ht2TQKRGFhz5 ZU2qfDHFgn/gVrfI0dd8O9vwmSNE5nLvBN+QH78nzxkj1xZEtVZsX7S8Gfl466aeyTfRmYj85Yd dIpTfgNiAmZaG2UzotejMIgl60oCGAskLV7y1HTA68eOSZl353F0aBjuO+xQxHfO9Th+2G2E21L /syCYdGt8mWeBXm9aAknYD5Bnogaep X-Received: by 2002:a17:903:1cc:b0:2b0:a980:3687 with SMTP id d9443c01a7336-2beb038f559mr51019825ad.3.1779474460077; Fri, 22 May 2026 11:27:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 14/30] fpu: Use {get,set}_float_rounding_mode everywhere Date: Fri, 22 May 2026 11:26:42 -0700 Message-ID: <20260522182658.184604-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62b; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474707107154100 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- target/i386/ops_sse.h | 24 ++--- fpu/softfloat.c | 88 +++++++++--------- target/alpha/fpu_helper.c | 2 +- target/arm/tcg/vfp_helper.c | 8 +- target/hexagon/fma_emu.c | 6 +- target/i386/tcg/fpu_helper.c | 28 +++--- target/m68k/softfloat.c | 170 +++++++++++++++++----------------- target/ppc/fpu_helper.c | 14 +-- target/riscv/vector_helper.c | 6 +- target/s390x/tcg/fpu_helper.c | 4 +- tests/fp/fp-bench.c | 2 +- tests/fp/fp-test.c | 2 +- fpu/softfloat-parts.c.inc | 8 +- tests/fp/wrap.c.inc | 12 +-- 14 files changed, 185 insertions(+), 189 deletions(-) diff --git a/target/i386/ops_sse.h b/target/i386/ops_sse.h index 99c4728ec8..5176a9f9e3 100644 --- a/target/i386/ops_sse.h +++ b/target/i386/ops_sse.h @@ -601,7 +601,7 @@ void glue(helper_cvtph2ps, SUFFIX)(CPUX86State *env, Re= g *d, Reg *s) void glue(helper_cvtps2ph, SUFFIX)(CPUX86State *env, Reg *d, Reg *s, int m= ode) { int i; - FloatRoundMode prev_rounding_mode =3D env->sse_status.float_rounding_m= ode; + FloatRoundMode prev_rounding_mode =3D get_float_rounding_mode(&env->ss= e_status); if (!(mode & (1 << 2))) { set_x86_rounding_mode(mode & 3, &env->sse_status); } @@ -613,7 +613,7 @@ void glue(helper_cvtps2ph, SUFFIX)(CPUX86State *env, Re= g *d, Reg *s, int mode) d->Q(i) =3D 0; } =20 - env->sse_status.float_rounding_mode =3D prev_rounding_mode; + set_float_rounding_mode(prev_rounding_mode, &env->sse_status); } #endif =20 @@ -1715,10 +1715,9 @@ void glue(helper_roundps, SUFFIX)(CPUX86State *env, = Reg *d, Reg *s, uint32_t mode) { int old_flags =3D get_float_exception_flags(&env->sse_status); - signed char prev_rounding_mode; + FloatRoundMode prev_rounding_mode =3D get_float_rounding_mode(&env->ss= e_status); int i; =20 - prev_rounding_mode =3D env->sse_status.float_rounding_mode; if (!(mode & (1 << 2))) { set_x86_rounding_mode(mode & 3, &env->sse_status); } @@ -1732,17 +1731,16 @@ void glue(helper_roundps, SUFFIX)(CPUX86State *env,= Reg *d, Reg *s, ~float_flag_inexact, &env->sse_status); } - env->sse_status.float_rounding_mode =3D prev_rounding_mode; + set_float_rounding_mode(prev_rounding_mode, &env->sse_status); } =20 void glue(helper_roundpd, SUFFIX)(CPUX86State *env, Reg *d, Reg *s, uint32_t mode) { int old_flags =3D get_float_exception_flags(&env->sse_status); - signed char prev_rounding_mode; + FloatRoundMode prev_rounding_mode =3D get_float_rounding_mode(&env->ss= e_status); int i; =20 - prev_rounding_mode =3D env->sse_status.float_rounding_mode; if (!(mode & (1 << 2))) { set_x86_rounding_mode(mode & 3, &env->sse_status); } @@ -1756,7 +1754,7 @@ void glue(helper_roundpd, SUFFIX)(CPUX86State *env, R= eg *d, Reg *s, ~float_flag_inexact, &env->sse_status); } - env->sse_status.float_rounding_mode =3D prev_rounding_mode; + set_float_rounding_mode(prev_rounding_mode, &env->sse_status); } =20 #if SHIFT =3D=3D 1 @@ -1764,10 +1762,9 @@ void glue(helper_roundss, SUFFIX)(CPUX86State *env, = Reg *d, Reg *v, Reg *s, uint32_t mode) { int old_flags =3D get_float_exception_flags(&env->sse_status); - signed char prev_rounding_mode; + FloatRoundMode prev_rounding_mode =3D get_float_rounding_mode(&env->ss= e_status); int i; =20 - prev_rounding_mode =3D env->sse_status.float_rounding_mode; if (!(mode & (1 << 2))) { set_x86_rounding_mode(mode & 3, &env->sse_status); } @@ -1782,17 +1779,16 @@ void glue(helper_roundss, SUFFIX)(CPUX86State *env,= Reg *d, Reg *v, Reg *s, ~float_flag_inexact, &env->sse_status); } - env->sse_status.float_rounding_mode =3D prev_rounding_mode; + set_float_rounding_mode(prev_rounding_mode, &env->sse_status); } =20 void glue(helper_roundsd, SUFFIX)(CPUX86State *env, Reg *d, Reg *v, Reg *s, uint32_t mode) { int old_flags =3D get_float_exception_flags(&env->sse_status); - signed char prev_rounding_mode; + FloatRoundMode prev_rounding_mode =3D get_float_rounding_mode(&env->ss= e_status); int i; =20 - prev_rounding_mode =3D env->sse_status.float_rounding_mode; if (!(mode & (1 << 2))) { set_x86_rounding_mode(mode & 3, &env->sse_status); } @@ -1807,7 +1803,7 @@ void glue(helper_roundsd, SUFFIX)(CPUX86State *env, R= eg *d, Reg *v, Reg *s, ~float_flag_inexact, &env->sse_status); } - env->sse_status.float_rounding_mode =3D prev_rounding_mode; + set_float_rounding_mode(prev_rounding_mode, &env->sse_status); } #endif =20 diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 391d8f3169..d99543cc60 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -234,7 +234,7 @@ static inline bool can_use_fpu(const float_status *s) return false; } return likely(s->float_exception_flags & float_flag_inexact && - s->float_rounding_mode =3D=3D float_round_nearest_even); + get_float_rounding_mode(s) =3D=3D float_round_nearest_ev= en); } =20 /* @@ -2803,7 +2803,7 @@ float16 float16_round_to_int(float16 a, float_status = *s) { FloatParts64 p =3D float16_unpack_canonical(a, s); =20 - p =3D parts64_round_to_int(&p, s->float_rounding_mode, 0, s, + p =3D parts64_round_to_int(&p, get_float_rounding_mode(s), 0, s, &float16_params); return float16_round_pack_canonical(&p, s); } @@ -2812,7 +2812,7 @@ float32 float32_round_to_int(float32 a, float_status = *s) { FloatParts64 p =3D float32_unpack_canonical(a, s); =20 - p =3D parts64_round_to_int(&p, s->float_rounding_mode, 0, s, + p =3D parts64_round_to_int(&p, get_float_rounding_mode(s), 0, s, &float32_params); return float32_round_pack_canonical(&p, s); } @@ -2821,7 +2821,7 @@ float64 float64_round_to_int(float64 a, float_status = *s) { FloatParts64 p =3D float64_unpack_canonical(a, s); =20 - p =3D parts64_round_to_int(&p, s->float_rounding_mode, 0, s, + p =3D parts64_round_to_int(&p, get_float_rounding_mode(s), 0, s, &float64_params); return float64_round_pack_canonical(&p, s); } @@ -2830,7 +2830,7 @@ bfloat16 bfloat16_round_to_int(bfloat16 a, float_stat= us *s) { FloatParts64 p =3D bfloat16_unpack_canonical(a, s); =20 - p =3D parts64_round_to_int(&p, s->float_rounding_mode, 0, s, + p =3D parts64_round_to_int(&p, get_float_rounding_mode(s), 0, s, &bfloat16_params); return bfloat16_round_pack_canonical(&p, s); } @@ -2839,7 +2839,7 @@ float128 float128_round_to_int(float128 a, float_stat= us *s) { FloatParts128 p =3D float128_unpack_canonical(a, s); =20 - p =3D parts128_round_to_int(&p, s->float_rounding_mode, 0, s, + p =3D parts128_round_to_int(&p, get_float_rounding_mode(s), 0, s, &float128_params); return float128_round_pack_canonical(&p, s); } @@ -2852,7 +2852,7 @@ floatx80 floatx80_round_to_int(floatx80 a, float_stat= us *status) return floatx80_default_nan(status); } =20 - p =3D parts128_round_to_int(&p, status->float_rounding_mode, 0, status, + p =3D parts128_round_to_int(&p, get_float_rounding_mode(status), 0, st= atus, &floatx80_params[status->floatx80_rounding_p= recision]); return floatx80_round_pack_canonical(&p, status); } @@ -3050,77 +3050,77 @@ static int64_t floatx80_to_int64_scalbn(floatx80 a,= FloatRoundMode rmode, =20 int8_t float16_to_int8(float16 a, float_status *s) { - return float16_to_int8_scalbn(a, s->float_rounding_mode, 0, s); + return float16_to_int8_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int16_t float16_to_int16(float16 a, float_status *s) { - return float16_to_int16_scalbn(a, s->float_rounding_mode, 0, s); + return float16_to_int16_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int32_t float16_to_int32(float16 a, float_status *s) { - return float16_to_int32_scalbn(a, s->float_rounding_mode, 0, s); + return float16_to_int32_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int64_t float16_to_int64(float16 a, float_status *s) { - return float16_to_int64_scalbn(a, s->float_rounding_mode, 0, s); + return float16_to_int64_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int16_t float32_to_int16(float32 a, float_status *s) { - return float32_to_int16_scalbn(a, s->float_rounding_mode, 0, s); + return float32_to_int16_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int32_t float32_to_int32(float32 a, float_status *s) { - return float32_to_int32_scalbn(a, s->float_rounding_mode, 0, s); + return float32_to_int32_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int64_t float32_to_int64(float32 a, float_status *s) { - return float32_to_int64_scalbn(a, s->float_rounding_mode, 0, s); + return float32_to_int64_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int16_t float64_to_int16(float64 a, float_status *s) { - return float64_to_int16_scalbn(a, s->float_rounding_mode, 0, s); + return float64_to_int16_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int32_t float64_to_int32(float64 a, float_status *s) { - return float64_to_int32_scalbn(a, s->float_rounding_mode, 0, s); + return float64_to_int32_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int64_t float64_to_int64(float64 a, float_status *s) { - return float64_to_int64_scalbn(a, s->float_rounding_mode, 0, s); + return float64_to_int64_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int32_t float128_to_int32(float128 a, float_status *s) { - return float128_to_int32_scalbn(a, s->float_rounding_mode, 0, s); + return float128_to_int32_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int64_t float128_to_int64(float128 a, float_status *s) { - return float128_to_int64_scalbn(a, s->float_rounding_mode, 0, s); + return float128_to_int64_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 Int128 float128_to_int128(float128 a, float_status *s) { - return float128_to_int128_scalbn(a, s->float_rounding_mode, 0, s); + return float128_to_int128_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int32_t floatx80_to_int32(floatx80 a, float_status *s) { - return floatx80_to_int32_scalbn(a, s->float_rounding_mode, 0, s); + return floatx80_to_int32_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int64_t floatx80_to_int64(floatx80 a, float_status *s) { - return floatx80_to_int64_scalbn(a, s->float_rounding_mode, 0, s); + return floatx80_to_int64_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int16_t float16_to_int16_round_to_zero(float16 a, float_status *s) @@ -3195,22 +3195,22 @@ int64_t floatx80_to_int64_round_to_zero(floatx80 a,= float_status *s) =20 int8_t bfloat16_to_int8(bfloat16 a, float_status *s) { - return bfloat16_to_int8_scalbn(a, s->float_rounding_mode, 0, s); + return bfloat16_to_int8_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int16_t bfloat16_to_int16(bfloat16 a, float_status *s) { - return bfloat16_to_int16_scalbn(a, s->float_rounding_mode, 0, s); + return bfloat16_to_int16_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int32_t bfloat16_to_int32(bfloat16 a, float_status *s) { - return bfloat16_to_int32_scalbn(a, s->float_rounding_mode, 0, s); + return bfloat16_to_int32_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int64_t bfloat16_to_int64(bfloat16 a, float_status *s) { - return bfloat16_to_int64_scalbn(a, s->float_rounding_mode, 0, s); + return bfloat16_to_int64_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 int8_t bfloat16_to_int8_round_to_zero(bfloat16 a, float_status *s) @@ -3489,67 +3489,67 @@ static Int128 float128_to_uint128_scalbn(float128 a= , FloatRoundMode rmode, =20 uint8_t float16_to_uint8(float16 a, float_status *s) { - return float16_to_uint8_scalbn(a, s->float_rounding_mode, 0, s); + return float16_to_uint8_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint16_t float16_to_uint16(float16 a, float_status *s) { - return float16_to_uint16_scalbn(a, s->float_rounding_mode, 0, s); + return float16_to_uint16_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint32_t float16_to_uint32(float16 a, float_status *s) { - return float16_to_uint32_scalbn(a, s->float_rounding_mode, 0, s); + return float16_to_uint32_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint64_t float16_to_uint64(float16 a, float_status *s) { - return float16_to_uint64_scalbn(a, s->float_rounding_mode, 0, s); + return float16_to_uint64_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint16_t float32_to_uint16(float32 a, float_status *s) { - return float32_to_uint16_scalbn(a, s->float_rounding_mode, 0, s); + return float32_to_uint16_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint32_t float32_to_uint32(float32 a, float_status *s) { - return float32_to_uint32_scalbn(a, s->float_rounding_mode, 0, s); + return float32_to_uint32_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint64_t float32_to_uint64(float32 a, float_status *s) { - return float32_to_uint64_scalbn(a, s->float_rounding_mode, 0, s); + return float32_to_uint64_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint16_t float64_to_uint16(float64 a, float_status *s) { - return float64_to_uint16_scalbn(a, s->float_rounding_mode, 0, s); + return float64_to_uint16_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint32_t float64_to_uint32(float64 a, float_status *s) { - return float64_to_uint32_scalbn(a, s->float_rounding_mode, 0, s); + return float64_to_uint32_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint64_t float64_to_uint64(float64 a, float_status *s) { - return float64_to_uint64_scalbn(a, s->float_rounding_mode, 0, s); + return float64_to_uint64_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint32_t float128_to_uint32(float128 a, float_status *s) { - return float128_to_uint32_scalbn(a, s->float_rounding_mode, 0, s); + return float128_to_uint32_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint64_t float128_to_uint64(float128 a, float_status *s) { - return float128_to_uint64_scalbn(a, s->float_rounding_mode, 0, s); + return float128_to_uint64_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 Int128 float128_to_uint128(float128 a, float_status *s) { - return float128_to_uint128_scalbn(a, s->float_rounding_mode, 0, s); + return float128_to_uint128_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint16_t float16_to_uint16_round_to_zero(float16 a, float_status *s) @@ -3614,22 +3614,22 @@ Int128 float128_to_uint128_round_to_zero(float128 a= , float_status *s) =20 uint8_t bfloat16_to_uint8(bfloat16 a, float_status *s) { - return bfloat16_to_uint8_scalbn(a, s->float_rounding_mode, 0, s); + return bfloat16_to_uint8_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint16_t bfloat16_to_uint16(bfloat16 a, float_status *s) { - return bfloat16_to_uint16_scalbn(a, s->float_rounding_mode, 0, s); + return bfloat16_to_uint16_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint32_t bfloat16_to_uint32(bfloat16 a, float_status *s) { - return bfloat16_to_uint32_scalbn(a, s->float_rounding_mode, 0, s); + return bfloat16_to_uint32_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint64_t bfloat16_to_uint64(bfloat16 a, float_status *s) { - return bfloat16_to_uint64_scalbn(a, s->float_rounding_mode, 0, s); + return bfloat16_to_uint64_scalbn(a, get_float_rounding_mode(s), 0, s); } =20 uint8_t bfloat16_to_uint8_round_to_zero(bfloat16 a, float_status *s) @@ -4878,7 +4878,7 @@ floatx80 roundAndPackFloatx80(FloatX80RoundPrec round= ingPrecision, bool zSign, bool roundNearestEven, increment, isTiny; int64_t roundIncrement, roundMask, roundBits; =20 - roundingMode =3D status->float_rounding_mode; + roundingMode =3D get_float_rounding_mode(status); roundNearestEven =3D ( roundingMode =3D=3D float_round_nearest_even ); switch (roundingPrecision) { case floatx80_precision_x: diff --git a/target/alpha/fpu_helper.c b/target/alpha/fpu_helper.c index 9af77777da..0ced53c54e 100644 --- a/target/alpha/fpu_helper.c +++ b/target/alpha/fpu_helper.c @@ -485,7 +485,7 @@ static uint64_t do_cvttq(CPUAlphaState *env, uint64_t a= , int roundmode) =20 uint64_t helper_cvttq(CPUAlphaState *env, uint64_t a) { - return do_cvttq(env, a, FP_STATUS.float_rounding_mode); + return do_cvttq(env, a, get_float_rounding_mode(&FP_STATUS)); } =20 uint64_t helper_cvttq_c(CPUAlphaState *env, uint64_t a) diff --git a/target/arm/tcg/vfp_helper.c b/target/arm/tcg/vfp_helper.c index e692bc568b..5839e82449 100644 --- a/target/arm/tcg/vfp_helper.c +++ b/target/arm/tcg/vfp_helper.c @@ -423,10 +423,10 @@ ftype HELPER(vfp_##name##to##p)(uint##isz##_t x, uin= t32_t shift, \ float_status *fpst) \ { \ ftype ret; \ - FloatRoundMode oldmode =3D fpst->float_rounding_mode; \ - fpst->float_rounding_mode =3D float_round_nearest_even; \ + FloatRoundMode oldmode =3D get_float_rounding_mode(fpst); \ + set_float_rounding_mode(float_round_nearest_even, fpst); \ ret =3D itype##_to_##float##fsz##_scalbn(x, -shift, fpst); \ - fpst->float_rounding_mode =3D oldmode; \ + set_float_rounding_mode(oldmode, fpst); \ return ret; \ } =20 @@ -663,7 +663,7 @@ static uint64_t call_recip_estimate(int *exp, int exp_o= ff, uint64_t frac, =20 static bool round_to_inf(float_status *fpst, bool sign_bit) { - switch (fpst->float_rounding_mode) { + switch (get_float_rounding_mode(fpst)) { case float_round_nearest_even: /* Round to Nearest */ return true; case float_round_up: /* Round to +Inf */ diff --git a/target/hexagon/fma_emu.c b/target/hexagon/fma_emu.c index c557141f11..a90f5c87b6 100644 --- a/target/hexagon/fma_emu.c +++ b/target/hexagon/fma_emu.c @@ -315,7 +315,7 @@ static float64 accum_round_float64(Accum a, float_statu= s *fp_status) if ((int128_gethi(a.mant) =3D=3D 0) && (int128_getlo(a.mant) =3D=3D 0) && ((a.guard | a.round | a.sticky) =3D=3D 0)) { /* result zero */ - switch (fp_status->float_rounding_mode) { + switch (get_float_rounding_mode(fp_status)) { case float_round_down: return zero_float64(1); default: @@ -362,7 +362,7 @@ static float64 accum_round_float64(Accum a, float_statu= s *fp_status) /* OK, we're relatively canonical... now we need to round */ if (a.guard || a.round || a.sticky) { float_raise(float_flag_inexact, fp_status); - switch (fp_status->float_rounding_mode) { + switch (get_float_rounding_mode(fp_status)) { case float_round_to_zero: /* Chop and we're done */ break; @@ -401,7 +401,7 @@ static float64 accum_round_float64(Accum a, float_statu= s *fp_status) /* Yep, inf result */ float_raise(float_flag_overflow, fp_status); float_raise(float_flag_inexact, fp_status); - switch (fp_status->float_rounding_mode) { + switch (get_float_rounding_mode(fp_status)) { case float_round_to_zero: return maxfinite_float64(a.sign); case float_round_up: diff --git a/target/i386/tcg/fpu_helper.c b/target/i386/tcg/fpu_helper.c index 37c83ded38..7b0b0dd520 100644 --- a/target/i386/tcg/fpu_helper.c +++ b/target/i386/tcg/fpu_helper.c @@ -1183,10 +1183,10 @@ void helper_f2xm1(CPUX86State *env) bool asign, bsign; int32_t n, aexp, bexp; uint64_t asig0, asig1, asig2, bsig0, bsig1; - FloatRoundMode save_mode =3D env->fp_status.float_rounding_mode; + FloatRoundMode save_mode =3D get_float_rounding_mode(&env->fp_stat= us); FloatX80RoundPrec save_prec =3D env->fp_status.floatx80_rounding_precision; - env->fp_status.float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, &env->fp_status); env->fp_status.floatx80_rounding_precision =3D floatx80_precision_= x; =20 /* Find the nearest multiple of 1/32 to the argument. */ @@ -1202,7 +1202,7 @@ void helper_f2xm1(CPUX86State *env) */ ST0 =3D f2xm1_table[n].t; set_float_exception_flags(float_flag_inexact, &env->fp_status); - env->fp_status.float_rounding_mode =3D save_mode; + set_float_rounding_mode(save_mode, &env->fp_status); } else { /* * Compute the lower parts of a polynomial expansion for @@ -1282,7 +1282,7 @@ void helper_f2xm1(CPUX86State *env) asign =3D bsign; } } - env->fp_status.float_rounding_mode =3D save_mode; + set_float_rounding_mode(save_mode, &env->fp_status); /* This result is inexact. */ asig1 |=3D 1; ST0 =3D normalizeRoundAndPackFloatx80(floatx80_precision_x, @@ -1483,10 +1483,10 @@ void helper_fpatan(CPUX86State *env) uint64_t azsig0, azsig1; uint64_t azsig2, azsig3, axsig0, axsig1; floatx80 x8; - FloatRoundMode save_mode =3D env->fp_status.float_rounding_mod= e; + FloatRoundMode save_mode =3D get_float_rounding_mode(&env->fp_= status); FloatX80RoundPrec save_prec =3D env->fp_status.floatx80_rounding_precision; - env->fp_status.float_rounding_mode =3D float_round_nearest_eve= n; + set_float_rounding_mode(float_round_nearest_even, &env->fp_sta= tus); env->fp_status.floatx80_rounding_precision =3D floatx80_precis= ion_x; =20 if (arg0_exp =3D=3D 0) { @@ -1793,7 +1793,7 @@ void helper_fpatan(CPUX86State *env) } } =20 - env->fp_status.float_rounding_mode =3D save_mode; + set_float_rounding_mode(save_mode, &env->fp_status); env->fp_status.floatx80_rounding_precision =3D save_prec; } /* This result is inexact. */ @@ -2121,10 +2121,10 @@ void helper_fyl2xp1(CPUX86State *env) } else { int32_t aexp; uint64_t asig0, asig1, asig2; - FloatRoundMode save_mode =3D env->fp_status.float_rounding_mode; + FloatRoundMode save_mode =3D get_float_rounding_mode(&env->fp_stat= us); FloatX80RoundPrec save_prec =3D env->fp_status.floatx80_rounding_precision; - env->fp_status.float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, &env->fp_status); env->fp_status.floatx80_rounding_precision =3D floatx80_precision_= x; =20 helper_fyl2x_common(env, ST0, &aexp, &asig0, &asig1); @@ -2139,7 +2139,7 @@ void helper_fyl2xp1(CPUX86State *env) aexp +=3D arg1_exp - 0x3ffe; /* This result is inexact. */ asig1 |=3D 1; - env->fp_status.float_rounding_mode =3D save_mode; + set_float_rounding_mode(save_mode, &env->fp_status); ST1 =3D normalizeRoundAndPackFloatx80(floatx80_precision_x, arg0_sign ^ arg1_sign, aexp, asig0, asig1, &env->fp_status); @@ -2224,10 +2224,10 @@ void helper_fyl2x(CPUX86State *env) } else { int32_t int_exp; floatx80 arg0_m1; - FloatRoundMode save_mode =3D env->fp_status.float_rounding_mode; + FloatRoundMode save_mode =3D get_float_rounding_mode(&env->fp_stat= us); FloatX80RoundPrec save_prec =3D env->fp_status.floatx80_rounding_precision; - env->fp_status.float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, &env->fp_status); env->fp_status.floatx80_rounding_precision =3D floatx80_precision_= x; =20 if (arg0_exp =3D=3D 0) { @@ -2245,7 +2245,7 @@ void helper_fyl2x(CPUX86State *env) floatx80_one, &env->fp_status); if (floatx80_is_zero(arg0_m1)) { /* Exact power of 2; multiply by ST1. */ - env->fp_status.float_rounding_mode =3D save_mode; + set_float_rounding_mode(save_mode, &env->fp_status); ST1 =3D floatx80_mul(int32_to_floatx80(int_exp, &env->fp_statu= s), ST1, &env->fp_status); } else { @@ -2284,7 +2284,7 @@ void helper_fyl2x(CPUX86State *env) aexp +=3D arg1_exp - 0x3ffe; /* This result is inexact. */ asig1 |=3D 1; - env->fp_status.float_rounding_mode =3D save_mode; + set_float_rounding_mode(save_mode, &env->fp_status); ST1 =3D normalizeRoundAndPackFloatx80(floatx80_precision_x, asign ^ arg1_sign, aexp, asig0, asig1, &env->fp_sta= tus); diff --git a/target/m68k/softfloat.c b/target/m68k/softfloat.c index d1f150e641..51706f6db8 100644 --- a/target/m68k/softfloat.c +++ b/target/m68k/softfloat.c @@ -266,9 +266,9 @@ floatx80 floatx80_lognp1(floatx80 a, float_status *stat= us) return floatx80_move(a, status); } =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 compact =3D floatx80_make_compact(aExp, aSig); @@ -336,7 +336,7 @@ floatx80 floatx80_lognp1(floatx80 a, float_status *stat= us) status); /* LOG(F)+U*V*(A2+V*(A4+V*A6)) */ fp0 =3D floatx80_add(fp0, fp1, status); /* FP0 IS LOG(F) + LOG(1+U= ) */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, klog2, status); @@ -402,7 +402,7 @@ floatx80 floatx80_lognp1(floatx80 a, float_status *stat= us) fp0 =3D floatx80_mul(fp0, fp1, status); /* U*V*([B1+W*(B3+W*B5)] + [V*(B2+W*B4= )]) */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, saveu, status); @@ -464,9 +464,9 @@ floatx80 floatx80_logn(floatx80 a, float_status *status) return floatx80_default_nan(status); } =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 compact =3D floatx80_make_compact(aExp, aSig); @@ -523,7 +523,7 @@ floatx80 floatx80_logn(floatx80 a, float_status *status) status); /* LOG(F)+U*V*(A2+V*(A4+V*A6)) */ fp0 =3D floatx80_add(fp0, fp1, status); /* FP0 IS LOG(F) + LOG(1+U= ) */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, klog2, status); @@ -569,7 +569,7 @@ floatx80 floatx80_logn(floatx80 a, float_status *status) fp0 =3D floatx80_mul(fp0, fp1, status); /* U*V*([B1+W*(B3+W*B5)] + [V*(B2+W*B4= )]) */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, saveu, status); @@ -620,15 +620,15 @@ floatx80 floatx80_log10(floatx80 a, float_status *sta= tus) return floatx80_default_nan(status); } =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 fp0 =3D floatx80_logn(a, status); fp1 =3D packFloatx80(0, 0x3FFD, UINT64_C(0xDE5BD8A937287195)); /* INV_= L10 */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_mul(fp0, fp1, status); /* LOGN(X)*INV_L10 */ @@ -679,13 +679,13 @@ floatx80 floatx80_log2(floatx80 a, float_status *stat= us) return floatx80_default_nan(status); } =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 if (aSig =3D=3D one_sig) { /* X is 2^k */ - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D int32_to_floatx80(aExp - 0x3FFF, status); @@ -693,7 +693,7 @@ floatx80 floatx80_log2(floatx80 a, float_status *status) fp0 =3D floatx80_logn(a, status); fp1 =3D packFloatx80(0, 0x3FFF, UINT64_C(0xB8AA3B295C17F0BC)); /* = INV_L2 */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_mul(fp0, fp1, status); /* LOGN(X)*INV_L2 */ @@ -739,9 +739,9 @@ floatx80 floatx80_etox(floatx80 a, float_status *status) return packFloatx80(0, one_exp, one_sig); } =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 adjflag =3D 0; @@ -817,7 +817,7 @@ floatx80 floatx80_etox(floatx80 a, float_status *status) fp0 =3D floatx80_mul(fp0, adjscale, status); } =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_mul(fp0, scale, status); @@ -827,7 +827,7 @@ floatx80 floatx80_etox(floatx80 a, float_status *status) return a; } else { /* |X| >=3D 16380 log2 */ if (compact > 0x400CB27C) { /* |X| >=3D 16480 log2 */ - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; if (aSign) { a =3D roundAndPackFloatx80( @@ -876,7 +876,7 @@ floatx80 floatx80_etox(floatx80 a, float_status *status) } } } else { /* |X| < 2^(-65) */ - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(a, float32_to_floatx80(make_float32(0x3F800000), @@ -922,9 +922,9 @@ floatx80 floatx80_twotox(floatx80 a, float_status *stat= us) return packFloatx80(0, one_exp, one_sig); } =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 fp0 =3D a; @@ -934,7 +934,7 @@ floatx80 floatx80_twotox(floatx80 a, float_status *stat= us) if (compact < 0x3FB98000 || compact > 0x400D80C0) { /* |X| > 16480 or |X| < 2^(-70) */ if (compact > 0x3FFF8000) { /* |X| > 16480 */ - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 if (aSign) { @@ -945,7 +945,7 @@ floatx80 floatx80_twotox(floatx80 a, float_status *stat= us) 0, 0x8000, aSig, 0, status); } } else { /* |X| < 2^(-70) */ - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, float32_to_floatx80( @@ -1027,7 +1027,7 @@ floatx80 floatx80_twotox(floatx80 a, float_status *st= atus) fp0 =3D floatx80_add(fp0, fact2, status); fp0 =3D floatx80_add(fp0, fact1, status); =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_mul(fp0, adjfact, status); @@ -1072,9 +1072,9 @@ floatx80 floatx80_tentox(floatx80 a, float_status *st= atus) return packFloatx80(0, one_exp, one_sig); } =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 fp0 =3D a; @@ -1084,7 +1084,7 @@ floatx80 floatx80_tentox(floatx80 a, float_status *st= atus) if (compact < 0x3FB98000 || compact > 0x400B9B07) { /* |X| > 16480 LOG2/LOG10 or |X| < 2^(-70) */ if (compact > 0x3FFF8000) { /* |X| > 16480 */ - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 if (aSign) { @@ -1095,7 +1095,7 @@ floatx80 floatx80_tentox(floatx80 a, float_status *st= atus) 0, 0x8000, aSig, 0, status); } } else { /* |X| < 2^(-70) */ - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, float32_to_floatx80( @@ -1182,7 +1182,7 @@ floatx80 floatx80_tentox(floatx80 a, float_status *st= atus) fp0 =3D floatx80_add(fp0, fact2, status); fp0 =3D floatx80_add(fp0, fact1, status); =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_mul(fp0, adjfact, status); @@ -1227,9 +1227,9 @@ floatx80 floatx80_tan(floatx80 a, float_status *statu= s) return packFloatx80(aSign, 0, 0); } =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 compact =3D floatx80_make_compact(aExp, aSig); @@ -1294,7 +1294,7 @@ floatx80 floatx80_tan(floatx80 a, float_status *statu= s) fp1 =3D floatx80_add(fp1, fp3, status); /* FP1 is r :=3D (A-R)= +a */ goto loop; } else { - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_move(a, status); @@ -1354,7 +1354,7 @@ floatx80 floatx80_tan(floatx80 a, float_status *statu= s) xSign ^=3D 1; fp1 =3D packFloatx80(xSign, xExp, xSig); =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_div(fp0, fp1, status); @@ -1392,7 +1392,7 @@ floatx80 floatx80_tan(floatx80 a, float_status *statu= s) make_float32(0x3F800000), status), status); /* 1+S(Q1+S(Q2+S(Q3+SQ4))) */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_div(fp0, fp1, status); @@ -1438,9 +1438,9 @@ floatx80 floatx80_sin(floatx80 a, float_status *statu= s) return packFloatx80(aSign, 0, 0); } =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 compact =3D floatx80_make_compact(aExp, aSig); @@ -1509,7 +1509,7 @@ floatx80 floatx80_sin(floatx80 a, float_status *statu= s) fp0 =3D float32_to_floatx80(make_float32(0x3F800000), status); /* 1 */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 /* SINTINY */ @@ -1582,7 +1582,7 @@ floatx80 floatx80_sin(floatx80 a, float_status *statu= s) x =3D packFloatx80(xSign, xExp, xSig); fp0 =3D floatx80_mul(fp0, x, status); =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, float32_to_floatx80(posneg1, status), = status); @@ -1632,7 +1632,7 @@ floatx80 floatx80_sin(floatx80 a, float_status *statu= s) fp0 =3D floatx80_mul(fp0, x, status); /* R'*S */ fp0 =3D floatx80_mul(fp0, fp1, status); /* SIN(R')-R' */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, x, status); @@ -1678,9 +1678,9 @@ floatx80 floatx80_cos(floatx80 a, float_status *statu= s) return packFloatx80(0, one_exp, one_sig); } =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 compact =3D floatx80_make_compact(aExp, aSig); @@ -1748,7 +1748,7 @@ floatx80 floatx80_cos(floatx80 a, float_status *statu= s) /* SINSM */ fp0 =3D float32_to_floatx80(make_float32(0x3F800000), status);= /* 1 */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 /* COSTINY */ @@ -1822,7 +1822,7 @@ floatx80 floatx80_cos(floatx80 a, float_status *statu= s) x =3D packFloatx80(xSign, xExp, xSig); fp0 =3D floatx80_mul(fp0, x, status); =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, float32_to_floatx80(posneg1, status), = status); @@ -1870,7 +1870,7 @@ floatx80 floatx80_cos(floatx80 a, float_status *statu= s) fp0 =3D floatx80_mul(fp0, x, status); /* R'*S */ fp0 =3D floatx80_mul(fp0, fp1, status); /* SIN(R')-R' */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, x, status); @@ -1917,9 +1917,9 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) =20 compact =3D floatx80_make_compact(aExp, aSig); =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 if (compact < 0x3FFB8000 || compact > 0x4002FFFF) { @@ -1929,7 +1929,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) fp0 =3D packFloatx80(aSign, piby2_exp, pi_sig); fp1 =3D packFloatx80(aSign, 0x0001, one_sig); =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_sub(fp0, fp1, status); @@ -1969,7 +1969,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) fp0 =3D floatx80_add(fp0, xsave, status); fp1 =3D packFloatx80(aSign, piby2_exp, pi_sig); =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, fp1, status); @@ -1980,7 +1980,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) } } else { /* |X| < 1/16 */ if (compact < 0x3FD78000) { /* |X| < 2^(-40) */ - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_move(a, status); @@ -2020,7 +2020,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) /* X*Y*([B1+Z*(B3+Z*B5)]+[Y*(B2+Z*(B4+Z*B6))]) */ fp0 =3D floatx80_mul(fp0, fp1, status); =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, xsave, status); @@ -2069,7 +2069,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) fp1 =3D floatx80_mul(fp1, fp2, status); /* A1*U*V*(A2+V*(A3+V)) */ fp0 =3D floatx80_add(fp0, fp1, status); /* ATAN(U) */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, fp3, status); /* ATAN(X) */ @@ -2122,9 +2122,9 @@ floatx80 floatx80_asin(floatx80 a, float_status *stat= us) =20 } /* |X| < 1 */ =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 one =3D packFloatx80(0, one_exp, one_sig); @@ -2136,7 +2136,7 @@ floatx80 floatx80_asin(floatx80 a, float_status *stat= us) fp1 =3D floatx80_sqrt(fp1, status); /* SQRT((1+X)*(1-X)) */ fp0 =3D floatx80_div(fp0, fp1, status); /* X/SQRT((1+X)*(1-X)) */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_atan(fp0, status); /* ATAN(X/SQRT((1+X)*(1-X)))= */ @@ -2192,9 +2192,9 @@ floatx80 floatx80_acos(floatx80 a, float_status *stat= us) } } /* |X| < 1 */ =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 one =3D packFloatx80(0, one_exp, one_sig); @@ -2206,7 +2206,7 @@ floatx80 floatx80_acos(floatx80 a, float_status *stat= us) fp0 =3D floatx80_sqrt(fp0, status); /* SQRT((1-X)/(1+X)) */ fp0 =3D floatx80_atan(fp0, status); /* ATAN(SQRT((1-X)/(1+X))) */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, fp0, status); /* 2 * ATAN(SQRT((1-X)/(1+X)= )) */ @@ -2256,9 +2256,9 @@ floatx80 floatx80_atanh(floatx80 a, float_status *sta= tus) } } /* |X| < 1 */ =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 one =3D packFloatx80(0, one_exp, one_sig); @@ -2270,7 +2270,7 @@ floatx80 floatx80_atanh(floatx80 a, float_status *sta= tus) fp0 =3D floatx80_div(fp0, fp1, status); /* Z =3D 2Y/(1-Y) */ fp0 =3D floatx80_lognp1(fp0, status); /* LOG1P(Z) */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_mul(fp0, fp2, @@ -2315,9 +2315,9 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) return packFloatx80(aSign, 0, 0); } =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 if (aExp >=3D 0x3FFD) { /* |X| >=3D 1/4 */ @@ -2410,7 +2410,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) =20 sc =3D packFloatx80(0, m + 0x3FFF, one_sig); =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_mul(fp0, sc, status); @@ -2423,7 +2423,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) fp0 =3D float32_to_floatx80(make_float32(0xBF800000), status); /* -1 */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, float32_to_floatx80( @@ -2434,7 +2434,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) =20 return a; } else { - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 return floatx80_etox(a, status); @@ -2495,7 +2495,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) fp1 =3D floatx80_add(fp1, fp2, status); /* Q */ fp0 =3D floatx80_add(fp0, fp1, status); /* S*B1+Q */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, a, status); @@ -2513,14 +2513,14 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *= status) status); fp0 =3D floatx80_add(fp0, sc, status); =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_mul(fp0, float64_to_floatx80( make_float64(0x3730000000000000), status), status); } else { - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, sc, status); @@ -2565,9 +2565,9 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) return packFloatx80(aSign, 0, 0); } =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 compact =3D floatx80_make_compact(aExp, aSig); @@ -2576,7 +2576,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) /* TANHBORS */ if (compact < 0x3FFF8000) { /* TANHSM */ - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_move(a, status); @@ -2593,7 +2593,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) sign &=3D 0x80000000; sign ^=3D 0x80800000; /* -SIGN(X)*EPS */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, float32_to_floatx80(make_float32(s= ign), @@ -2615,7 +2615,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) fp0 =3D float32_to_floatx80(make_float32(sign | 0x3F800000= ), status); /* SIGN */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp1, fp0, status); @@ -2638,7 +2638,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) =20 fp1 =3D packFloatx80(vSign ^ aSign, vExp, vSig); =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_div(fp0, fp1, status); @@ -2681,9 +2681,9 @@ floatx80 floatx80_sinh(floatx80 a, float_status *stat= us) return packFloatx80(aSign, 0, 0); } =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 compact =3D floatx80_make_compact(aExp, aSig); @@ -2691,7 +2691,7 @@ floatx80 floatx80_sinh(floatx80 a, float_status *stat= us) if (compact > 0x400CB167) { /* SINHBIG */ if (compact > 0x400CB2B3) { - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 return roundAndPackFloatx80(status->floatx80_rounding_precisio= n, @@ -2707,7 +2707,7 @@ floatx80 floatx80_sinh(floatx80 a, float_status *stat= us) fp0 =3D floatx80_etox(fp0, status); fp2 =3D packFloatx80(aSign, 0x7FFB, one_sig); =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_mul(fp0, fp2, status); @@ -2727,7 +2727,7 @@ floatx80 floatx80_sinh(floatx80 a, float_status *stat= us) =20 fact =3D packFloat32(aSign, 0x7E, 0); =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_mul(fp0, float32_to_floatx80(fact, status), status); @@ -2767,16 +2767,16 @@ floatx80 floatx80_cosh(floatx80 a, float_status *st= atus) return packFloatx80(0, one_exp, one_sig); } =20 - user_rnd_mode =3D status->float_rounding_mode; + user_rnd_mode =3D get_float_rounding_mode(status); user_rnd_prec =3D status->floatx80_rounding_precision; - status->float_rounding_mode =3D float_round_nearest_even; + set_float_rounding_mode(float_round_nearest_even, status); status->floatx80_rounding_precision =3D floatx80_precision_x; =20 compact =3D floatx80_make_compact(aExp, aSig); =20 if (compact > 0x400CB167) { if (compact > 0x400CB2B3) { - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; return roundAndPackFloatx80(status->floatx80_rounding_precisio= n, 0, 0x8000, one_sig, 0, status); @@ -2791,7 +2791,7 @@ floatx80 floatx80_cosh(floatx80 a, float_status *stat= us) fp0 =3D floatx80_etox(fp0, status); fp1 =3D packFloatx80(0, 0x7FFB, one_sig); =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_mul(fp0, fp1, status); @@ -2809,7 +2809,7 @@ floatx80 floatx80_cosh(floatx80 a, float_status *stat= us) fp1 =3D float32_to_floatx80(make_float32(0x3E800000), status); /* 1/4 = */ fp1 =3D floatx80_div(fp1, fp0, status); /* 1/(2*EXP(|X|)) */ =20 - status->float_rounding_mode =3D user_rnd_mode; + set_float_rounding_mode(user_rnd_mode, status); status->floatx80_rounding_precision =3D user_rnd_prec; =20 a =3D floatx80_add(fp0, fp1, status); diff --git a/target/ppc/fpu_helper.c b/target/ppc/fpu_helper.c index 850aca6ed1..c1bdde9e10 100644 --- a/target/ppc/fpu_helper.c +++ b/target/ppc/fpu_helper.c @@ -1616,7 +1616,7 @@ void helper_xsaddqp(CPUPPCState *env, uint32_t opcode, =20 tstat =3D env->fp_status; if (unlikely(Rc(opcode) !=3D 0)) { - tstat.float_rounding_mode =3D float_round_to_odd; + set_float_rounding_mode(float_round_to_odd, &tstat); } =20 set_float_exception_flags(0, &tstat); @@ -1688,7 +1688,7 @@ void helper_xsmulqp(CPUPPCState *env, uint32_t opcode, helper_reset_fpstatus(env); tstat =3D env->fp_status; if (unlikely(Rc(opcode) !=3D 0)) { - tstat.float_rounding_mode =3D float_round_to_odd; + set_float_rounding_mode(float_round_to_odd, &tstat); } =20 set_float_exception_flags(0, &tstat); @@ -1762,7 +1762,7 @@ void helper_xsdivqp(CPUPPCState *env, uint32_t opcode, helper_reset_fpstatus(env); tstat =3D env->fp_status; if (unlikely(Rc(opcode) !=3D 0)) { - tstat.float_rounding_mode =3D float_round_to_odd; + set_float_rounding_mode(float_round_to_odd, &tstat); } =20 set_float_exception_flags(0, &tstat); @@ -2095,7 +2095,7 @@ void helper_##op(CPUPPCState *env, ppc_vsr_t *xt, ppc= _vsr_t *s1, ppc_vsr_t *s2,\ float_status tstat =3D env->fp_status; = \ set_float_exception_flags(0, &tstat); = \ if (ro) { = \ - tstat.float_rounding_mode =3D float_round_to_odd; = \ + set_float_rounding_mode(float_round_to_odd, &tstat); = \ } = \ t.f128 =3D float128_muladd(s1->f128, s3->f128, s2->f128, maddflgs, &ts= tat); \ env->fp_status.float_exception_flags |=3D tstat.float_exception_flags;= \ @@ -2706,7 +2706,7 @@ void helper_XSCVQPDP(CPUPPCState *env, uint32_t ro, p= pc_vsr_t *xt, =20 tstat =3D env->fp_status; if (ro !=3D 0) { - tstat.float_rounding_mode =3D float_round_to_odd; + set_float_rounding_mode(float_round_to_odd, &tstat); } =20 t.VsrD(0) =3D float128_to_float64(xb->f128, &tstat); @@ -3306,7 +3306,7 @@ void helper_xssqrtqp(CPUPPCState *env, uint32_t opcod= e, =20 tstat =3D env->fp_status; if (unlikely(Rc(opcode) !=3D 0)) { - tstat.float_rounding_mode =3D float_round_to_odd; + set_float_rounding_mode(float_round_to_odd, &tstat); } =20 set_float_exception_flags(0, &tstat); @@ -3332,7 +3332,7 @@ void helper_xssubqp(CPUPPCState *env, uint32_t opcode, =20 tstat =3D env->fp_status; if (unlikely(Rc(opcode) !=3D 0)) { - tstat.float_rounding_mode =3D float_round_to_odd; + set_float_rounding_mode(float_round_to_odd, &tstat); } =20 set_float_exception_flags(0, &tstat); diff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c index 5a3554dd71..c826702bf8 100644 --- a/target/riscv/vector_helper.c +++ b/target/riscv/vector_helper.c @@ -4270,9 +4270,9 @@ static uint64_t frec7(uint64_t f, int exp_size, int f= rac_size, s->float_exception_flags |=3D (float_flag_inexact | float_flag_overflow); =20 - if ((s->float_rounding_mode =3D=3D float_round_to_zero) || - ((s->float_rounding_mode =3D=3D float_round_down) && !sign= ) || - ((s->float_rounding_mode =3D=3D float_round_up) && sign)) { + if ((get_float_rounding_mode(s) =3D=3D float_round_to_zero) || + ((get_float_rounding_mode(s) =3D=3D float_round_down) && != sign) || + ((get_float_rounding_mode(s) =3D=3D float_round_up) && sig= n)) { /* Return greatest/negative finite value. */ return (sign << (exp_size + frac_size)) | (MAKE_64BIT_MASK(frac_size, exp_size) - 1); diff --git a/target/s390x/tcg/fpu_helper.c b/target/s390x/tcg/fpu_helper.c index 33e0f6100d..6ca0b7162b 100644 --- a/target/s390x/tcg/fpu_helper.c +++ b/target/s390x/tcg/fpu_helper.c @@ -62,7 +62,7 @@ static int s390_get_bfp_rounding_mode(CPUS390XState *env,= int m3) switch (m3) { case 0: /* current mode */ - return env->fpu_status.float_rounding_mode; + return get_float_rounding_mode(&env->fpu_status); case 1: /* round to nearest with ties away from 0 */ return float_round_ties_away; @@ -634,7 +634,7 @@ uint32_t HELPER(cxb)(CPUS390XState *env, Int128 a, Int1= 28 b) =20 int s390_swap_bfp_rounding_mode(CPUS390XState *env, int m3) { - int ret =3D env->fpu_status.float_rounding_mode; + int ret =3D get_float_rounding_mode(&env->fpu_status); =20 set_float_rounding_mode(s390_get_bfp_rounding_mode(env, m3), &env->fpu_status); diff --git a/tests/fp/fp-bench.c b/tests/fp/fp-bench.c index d90f542ea2..2b6f66817e 100644 --- a/tests/fp/fp-bench.c +++ b/tests/fp/fp-bench.c @@ -615,7 +615,7 @@ static void set_soft_precision(enum rounding rounding) default: g_assert_not_reached(); } - soft_status.float_rounding_mode =3D mode; + set_float_rounding_mode(mode, &soft_status); } =20 static void parse_args(int argc, char *argv[]) diff --git a/tests/fp/fp-test.c b/tests/fp/fp-test.c index c619e5dbf7..fdb0cccf14 100644 --- a/tests/fp/fp-test.c +++ b/tests/fp/fp-test.c @@ -967,7 +967,7 @@ void run_test(void) =20 verCases_roundingCode =3D 0; slowfloat_roundingMode =3D rmode; - qsf.float_rounding_mode =3D sf_rounding_to_qemu(rmode); + set_float_rounding_mode(sf_rounding_to_qemu(rmode), &qsf); =20 if (attrs & (FUNC_ARG_ROUNDINGMODE | FUNC_EFF_ROUNDINGMODE)) { /* print rounding mode if the op is affected by it */ diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index bc348f75a3..7311c3696e 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -300,7 +300,7 @@ static void partsN(uncanon_normal)(FloatPartsN *p, floa= t_status *s, int exp; FloatExceptionFlags flags =3D 0; =20 - switch (s->float_rounding_mode) { + switch (get_float_rounding_mode(s)) { case float_round_nearest_even_max: overflow_norm =3D true; /* fall through */ @@ -431,7 +431,7 @@ static void partsN(uncanon_normal)(FloatPartsN *p, floa= t_status *s, =20 if (p->frac_lo & round_mask) { /* Need to recompute round-to-even/round-to-odd. */ - switch (s->float_rounding_mode) { + switch (get_float_rounding_mode(s)) { case float_round_nearest_even: if (N > 64 && frac_lsb =3D=3D 0) { inc =3D ((p->frac_hi & 1) || @@ -558,7 +558,7 @@ FloatPartsN partsN(addsub)(const FloatPartsN *a_orig, =20 if (ab_mask =3D=3D float_cmask_zero) { /* 0 - 0 */ - a.sign =3D s->float_rounding_mode =3D=3D float_round_down; + a.sign =3D get_float_rounding_mode(s) =3D=3D float_round_down; return a; } =20 @@ -763,7 +763,7 @@ FloatPartsN partsN(muladd)(const FloatPartsN *a, const = FloatPartsN *b, return_sub_zero: /* 0 - 0 =3D=3D -0 for round_down, +0 otherwise. */ return (FloatPartsN){ - .sign =3D s->float_rounding_mode =3D=3D float_round_down, + .sign =3D get_float_rounding_mode(s) =3D=3D float_round_down, .cls =3D float_class_zero }; =20 diff --git a/tests/fp/wrap.c.inc b/tests/fp/wrap.c.inc index 9ff884c140..a67b390e5a 100644 --- a/tests/fp/wrap.c.inc +++ b/tests/fp/wrap.c.inc @@ -168,7 +168,7 @@ WRAP_SF_TO_128(qemu_f64_to_f128M, float64_to_float128, = float64) { \ type *ap =3D (type *)&a; \ \ - qsf.float_rounding_mode =3D sf_rounding_to_qemu(round); \ + set_float_rounding_mode(sf_rounding_to_qemu(round), &qsf); \ return func(*ap, &qsf); \ } =20 @@ -328,7 +328,7 @@ WRAP_INT_TO_80(qemu_i64_to_extF80M, int64_to_floatx80, = int64_t) floatx80 a; \ \ a =3D soft_to_qemu80(*ap); \ - qsf.float_rounding_mode =3D sf_rounding_to_qemu(round); \ + set_float_rounding_mode(sf_rounding_to_qemu(round), &qsf); \ return func(a, &qsf); \ } =20 @@ -360,7 +360,7 @@ WRAP_80_TO_INT_MINMAG(qemu_extF80M_to_i64_r_minMag, float128 a; \ \ a =3D soft_to_qemu128(*ap); \ - qsf.float_rounding_mode =3D sf_rounding_to_qemu(round); \ + set_float_rounding_mode(sf_rounding_to_qemu(round), &qsf); \ return func(a, &qsf); \ } =20 @@ -414,7 +414,7 @@ WRAP_INT_TO_128(qemu_i64_to_f128M, int64_to_float128, i= nt64_t) type *ap =3D (type *)&a; \ type ret; \ \ - qsf.float_rounding_mode =3D sf_rounding_to_qemu(round); \ + set_float_rounding_mode(sf_rounding_to_qemu(round), &qsf); \ ret =3D func(*ap, &qsf); \ return *(type##_t *)&ret; \ } @@ -431,7 +431,7 @@ static void qemu_extF80M_roundToInt(const extFloat80_t = *ap, uint_fast8_t round, floatx80 ret; =20 a =3D soft_to_qemu80(*ap); - qsf.float_rounding_mode =3D sf_rounding_to_qemu(round); + set_float_rounding_mode(sf_rounding_to_qemu(round), &qsf); ret =3D floatx80_round_to_int(a, &qsf); *res =3D qemu_to_soft80(ret); } @@ -443,7 +443,7 @@ static void qemu_f128M_roundToInt(const float128_t *ap,= uint_fast8_t round, float128 ret; =20 a =3D soft_to_qemu128(*ap); - qsf.float_rounding_mode =3D sf_rounding_to_qemu(round); + set_float_rounding_mode(sf_rounding_to_qemu(round), &qsf); ret =3D float128_round_to_int(a, &qsf); *res =3D qemu_to_soft128(ret); } --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177947455102584.42124893716345; Fri, 22 May 2026 11:29:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUb7-00052F-Ot; Fri, 22 May 2026 14:27:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUb4-0004tJ-Ui for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:47 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUb0-0005Qw-P6 for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:46 -0400 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2be75f658f3so30695195ad.1 for ; Fri, 22 May 2026 11:27:42 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474461; x=1780079261; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+dIEeehv80CK8xO9ylejpJt2WMFMMHvjzFTzV0srVG0=; b=Cuxb+kfuEawewABLDVVQOWC9xenD9MlJ+OX+hY3e5+KlSqbEcrodWwXP5HrH+g/uTa IOOPhqrD4npFaCyP+oz+rmtFczsEtT8+30ZW0FIrb46Vir7A7XHxUBYAojcdBWAVAJcz 8zf1B6D6JWW7Ef9iRW1ed59d34HqxdJbPfpZ72xtXEzFXxjxjJgU55viR0smH4MyCu82 hhsBIo74mFBJsMW6tvBTe+9M5Bkv2kZYXpVjDbD3KejO6G9O8TK+K2g4MhrOa8Ia3U+Z bG0eKbHBn1xKk1n50OZzkFI/dxpv43Tv9c07Qqq5pIovfGqaq+9+FxSSGU61eNQlvc4Z 06XQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474461; x=1780079261; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=+dIEeehv80CK8xO9ylejpJt2WMFMMHvjzFTzV0srVG0=; b=bUKVxD5DcGub7mI1K5GdeUv+L/m9HYLEsGV1Mzp2UTjFvZCA/BxeGABnVE4Iri5RkH gFi+6U7c4gpf4bMn9Sp02pBkCV7CJYMjh/qD3Nm0B9Q/dpdRYkHK3WzlR+Gk+jx40RjD sIJxCeupac677u1R4gPjF8JKFOoYzsYzmXpxB4X+z9TpItbyR+Kgn4hkeFJGDmPPJE2q meQ2k3WHlO4mdvBWGNpj5VAy/SbbG8uk16zz/l3Yrh91Yt6PCIZ9lzU4fzblHK9o9VZ8 CUtSuH8GLLMnpkF2c/AfvC+AbB3bUFPf9kCv6YEYkgxw1EAsr7uKfe7DgYqYrGYK6uwu w96g== X-Gm-Message-State: AOJu0YwCK4u4ae5V2IPSxhfWKhoCdxAn1++AjiY/+QbtwoHmgGgGTqGX TU/GYy2tLY6rB+XfhERTJepm7hA9kFDVYfcV+4nZWgmH4yPKoy5JELH0zA2q499p2+DGt+fLZQm 1Zf+q X-Gm-Gg: Acq92OENZ3+LmvXjBihevK34TQw/0UiQqt/BHxgbHDcUaw085CljMUI21hxMiex1OWg GevMRW9yWdoHPox0xv2DbBZkjyAILABMlNLZiztUP41IjdBr4JwabE8Yx2cSal9x8S4fW3u6jZP 8eiiayiHc0JhnVgGoEP9pxp3/LZZbJUVYD39wkv3d15t02Yq8WPEImxLXnalsztIPILTYXx8Dim oAZcJFbvZGUhoYbLB052F98P9xpyUNNFQJwNyzWfFmAhRNdCX9PM+DYRkehzBBFCyeI4IxfjSFV C+WEGoi1gBS3/6twl58zGmIy2E1LU1n/AGCKStrCcQD6Q310y+qRjOOh6uEF3d2OPS94nRY4x34 QkM9ih7glpc76YoTwJxgGrPbU9ZXvfJJcURQVdmEpD1RDHgwzw4Qc3s8yzMTVDyoFRsIYBxV2z6 QhhEYyiB/P9BhkIalTA1W+ZdCX5ozHhPUKR9nJOT0= X-Received: by 2002:a17:903:2985:b0:2bd:907:2cfe with SMTP id d9443c01a7336-2beb079591cmr48867425ad.33.1779474460862; Fri, 22 May 2026 11:27:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 15/30] fpu: Use of {get, set}_floatx80_rounding_precision everywhere Date: Fri, 22 May 2026 11:26:43 -0700 Message-ID: <20260522182658.184604-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::636; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x636.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1779474552831154100 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat.c | 10 +- target/i386/tcg/fpu_helper.c | 37 ++++--- target/m68k/softfloat.c | 208 ++++++++++++++++++----------------- tests/fp/fp-test.c | 2 +- 4 files changed, 130 insertions(+), 127 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index d99543cc60..d2a9f97089 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1515,7 +1515,7 @@ float128 float128_round_pack_canonical(FloatParts128 = *p, float_status *s) bool floatx80_unpack_canonical(FloatParts128 *p, floatx80 f, float_status = *s) { /* Ensure rounding precision is set before beginning. */ - switch (s->floatx80_rounding_precision) { + switch (get_floatx80_rounding_precision(s)) { case floatx80_precision_x: case floatx80_precision_d: case floatx80_precision_s: @@ -1550,14 +1550,14 @@ bool floatx80_unpack_canonical(FloatParts128 *p, fl= oatx80 f, float_status *s) =20 floatx80 floatx80_round_pack_canonical(FloatParts128 *p, float_status *s) { - const FloatFmt *fmt =3D &floatx80_params[s->floatx80_rounding_precisio= n]; + const FloatFmt *fmt =3D &floatx80_params[get_floatx80_rounding_precisi= on(s)]; uint64_t frac; int exp; =20 switch (p->cls) { case float_class_normal: case float_class_denormal: - if (s->floatx80_rounding_precision =3D=3D floatx80_precision_x) { + if (get_floatx80_rounding_precision(s) =3D=3D floatx80_precision_x= ) { parts128_uncanon_normal(p, s, fmt, false); frac =3D p->frac_hi; exp =3D p->exp; @@ -2853,7 +2853,7 @@ floatx80 floatx80_round_to_int(floatx80 a, float_stat= us *status) } =20 p =3D parts128_round_to_int(&p, get_float_rounding_mode(status), 0, st= atus, - &floatx80_params[status->floatx80_rounding_p= recision]); + &floatx80_params[get_floatx80_rounding_preci= sion(status)]); return floatx80_round_pack_canonical(&p, status); } =20 @@ -4503,7 +4503,7 @@ floatx80 floatx80_sqrt(floatx80 a, float_status *s) if (!floatx80_unpack_canonical(&p, a, s)) { return floatx80_default_nan(s); } - parts128_sqrt(&p, s, &floatx80_params[s->floatx80_rounding_precision]); + parts128_sqrt(&p, s, &floatx80_params[get_floatx80_rounding_precision(= s)]); return floatx80_round_pack_canonical(&p, s); } =20 diff --git a/target/i386/tcg/fpu_helper.c b/target/i386/tcg/fpu_helper.c index 7b0b0dd520..978eb1411b 100644 --- a/target/i386/tcg/fpu_helper.c +++ b/target/i386/tcg/fpu_helper.c @@ -1185,9 +1185,9 @@ void helper_f2xm1(CPUX86State *env) uint64_t asig0, asig1, asig2, bsig0, bsig1; FloatRoundMode save_mode =3D get_float_rounding_mode(&env->fp_stat= us); FloatX80RoundPrec save_prec =3D - env->fp_status.floatx80_rounding_precision; + get_floatx80_rounding_precision(&env->fp_status); set_float_rounding_mode(float_round_nearest_even, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D floatx80_precision_= x; + set_floatx80_rounding_precision(floatx80_precision_x, &env->fp_sta= tus); =20 /* Find the nearest multiple of 1/32 to the argument. */ tmp =3D floatx80_scalbn(ST0, 5, &env->fp_status); @@ -1290,7 +1290,7 @@ void helper_f2xm1(CPUX86State *env) &env->fp_status); } =20 - env->fp_status.floatx80_rounding_precision =3D save_prec; + set_floatx80_rounding_precision(save_prec, &env->fp_status); } merge_exception_flags(env, old_flags); } @@ -1406,10 +1406,10 @@ void helper_fpatan(CPUX86State *env) * (and underflowing where appropriate). */ FloatX80RoundPrec save_prec =3D - env->fp_status.floatx80_rounding_precision; - env->fp_status.floatx80_rounding_precision =3D floatx80_precision_= x; + get_floatx80_rounding_precision(&env->fp_status); + set_floatx80_rounding_precision(floatx80_precision_x, &env->fp_sta= tus); ST1 =3D floatx80_div(ST1, ST0, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D save_prec; + set_floatx80_rounding_precision(save_prec, &env->fp_status); if (!floatx80_is_zero(ST1) && !(get_float_exception_flags(&env->fp_status) & float_flag_inexact)) { @@ -1485,9 +1485,10 @@ void helper_fpatan(CPUX86State *env) floatx80 x8; FloatRoundMode save_mode =3D get_float_rounding_mode(&env->fp_= status); FloatX80RoundPrec save_prec =3D - env->fp_status.floatx80_rounding_precision; + get_floatx80_rounding_precision(&env->fp_status); set_float_rounding_mode(float_round_nearest_even, &env->fp_sta= tus); - env->fp_status.floatx80_rounding_precision =3D floatx80_precis= ion_x; + set_floatx80_rounding_precision(floatx80_precision_x, + &env->fp_status); =20 if (arg0_exp =3D=3D 0) { normalizeFloatx80Subnormal(arg0_sig, &arg0_exp, &arg0_sig); @@ -1794,7 +1795,7 @@ void helper_fpatan(CPUX86State *env) } =20 set_float_rounding_mode(save_mode, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D save_prec; + set_floatx80_rounding_precision(save_prec, &env->fp_status); } /* This result is inexact. */ rsig1 |=3D 1; @@ -2123,9 +2124,9 @@ void helper_fyl2xp1(CPUX86State *env) uint64_t asig0, asig1, asig2; FloatRoundMode save_mode =3D get_float_rounding_mode(&env->fp_stat= us); FloatX80RoundPrec save_prec =3D - env->fp_status.floatx80_rounding_precision; + get_floatx80_rounding_precision(&env->fp_status); set_float_rounding_mode(float_round_nearest_even, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D floatx80_precision_= x; + set_floatx80_rounding_precision(floatx80_precision_x, &env->fp_sta= tus); =20 helper_fyl2x_common(env, ST0, &aexp, &asig0, &asig1); /* @@ -2143,7 +2144,7 @@ void helper_fyl2xp1(CPUX86State *env) ST1 =3D normalizeRoundAndPackFloatx80(floatx80_precision_x, arg0_sign ^ arg1_sign, aexp, asig0, asig1, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D save_prec; + set_floatx80_rounding_precision(save_prec, &env->fp_status); } fpop(env); merge_exception_flags(env, old_flags); @@ -2226,9 +2227,9 @@ void helper_fyl2x(CPUX86State *env) floatx80 arg0_m1; FloatRoundMode save_mode =3D get_float_rounding_mode(&env->fp_stat= us); FloatX80RoundPrec save_prec =3D - env->fp_status.floatx80_rounding_precision; + get_floatx80_rounding_precision(&env->fp_status); set_float_rounding_mode(float_round_nearest_even, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D floatx80_precision_= x; + set_floatx80_rounding_precision(floatx80_precision_x, &env->fp_sta= tus); =20 if (arg0_exp =3D=3D 0) { normalizeFloatx80Subnormal(arg0_sig, &arg0_exp, &arg0_sig); @@ -2290,7 +2291,7 @@ void helper_fyl2x(CPUX86State *env) asig0, asig1, &env->fp_sta= tus); } =20 - env->fp_status.floatx80_rounding_precision =3D save_prec; + set_floatx80_rounding_precision(save_prec, &env->fp_status); } fpop(env); merge_exception_flags(env, old_flags); @@ -2368,14 +2369,14 @@ void helper_fscale(CPUX86State *env) } } else { int n; - FloatX80RoundPrec save =3D env->fp_status.floatx80_rounding_precis= ion; + FloatX80RoundPrec save =3D get_floatx80_rounding_precision(&env->f= p_status); int save_flags =3D get_float_exception_flags(&env->fp_status); set_float_exception_flags(0, &env->fp_status); n =3D floatx80_to_int32_round_to_zero(ST1, &env->fp_status); set_float_exception_flags(save_flags, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D floatx80_precision_= x; + set_floatx80_rounding_precision(floatx80_precision_x, &env->fp_sta= tus); ST0 =3D floatx80_scalbn(ST0, n, &env->fp_status); - env->fp_status.floatx80_rounding_precision =3D save; + set_floatx80_rounding_precision(save, &env->fp_status); } merge_exception_flags(env, old_flags); } diff --git a/target/m68k/softfloat.c b/target/m68k/softfloat.c index 51706f6db8..f5d683bcc5 100644 --- a/target/m68k/softfloat.c +++ b/target/m68k/softfloat.c @@ -72,7 +72,8 @@ floatx80 floatx80_getman(floatx80 a, float_status *status) normalizeFloatx80Subnormal(aSig, &aExp, &aSig); } =20 - return roundAndPackFloatx80(status->floatx80_rounding_precision, aSign, + return roundAndPackFloatx80(get_floatx80_rounding_precision(status), + aSign, 0x3FFF, aSig, 0, status); } =20 @@ -160,7 +161,7 @@ floatx80 floatx80_scale(floatx80 a, floatx80 b, float_s= tatus *status) =20 if (0x400F < bExp) { aExp =3D bSign ? -0x6001 : 0xE000; - return roundAndPackFloatx80(status->floatx80_rounding_precision, + return roundAndPackFloatx80(get_floatx80_rounding_precision(status= ), aSign, aExp, aSig, 0, status); } =20 @@ -168,7 +169,7 @@ floatx80 floatx80_scale(floatx80 a, floatx80 b, float_s= tatus *status) bSig >>=3D shiftCount; aExp =3D bSign ? (aExp - bSig) : (aExp + bSig); =20 - return roundAndPackFloatx80(status->floatx80_rounding_precision, + return roundAndPackFloatx80(get_floatx80_rounding_precision(status), aSign, aExp, aSig, 0, status); } =20 @@ -192,10 +193,11 @@ floatx80 floatx80_move(floatx80 a, float_status *stat= us) if (aSig =3D=3D 0) { return a; } - normalizeRoundAndPackFloatx80(status->floatx80_rounding_precision, + normalizeRoundAndPackFloatx80(get_floatx80_rounding_precision(stat= us), aSign, aExp, aSig, 0, status); } - return roundAndPackFloatx80(status->floatx80_rounding_precision, aSign, + return roundAndPackFloatx80(get_floatx80_rounding_precision(status), + aSign, aExp, aSig, 0, status); } =20 @@ -267,9 +269,9 @@ floatx80 floatx80_lognp1(floatx80 a, float_status *stat= us) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 @@ -337,7 +339,7 @@ floatx80 floatx80_lognp1(floatx80 a, float_status *stat= us) fp0 =3D floatx80_add(fp0, fp1, status); /* FP0 IS LOG(F) + LOG(1+U= ) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, klog2, status); =20 @@ -403,7 +405,7 @@ floatx80 floatx80_lognp1(floatx80 a, float_status *stat= us) status); /* U*V*([B1+W*(B3+W*B5)] + [V*(B2+W*B4= )]) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, saveu, status); =20 @@ -465,9 +467,9 @@ floatx80 floatx80_logn(floatx80 a, float_status *status) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 @@ -524,7 +526,7 @@ floatx80 floatx80_logn(floatx80 a, float_status *status) fp0 =3D floatx80_add(fp0, fp1, status); /* FP0 IS LOG(F) + LOG(1+U= ) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, klog2, status); =20 @@ -570,7 +572,7 @@ floatx80 floatx80_logn(floatx80 a, float_status *status) status); /* U*V*([B1+W*(B3+W*B5)] + [V*(B2+W*B4= )]) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, saveu, status); =20 @@ -621,15 +623,15 @@ floatx80 floatx80_log10(floatx80 a, float_status *sta= tus) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 fp0 =3D floatx80_logn(a, status); fp1 =3D packFloatx80(0, 0x3FFD, UINT64_C(0xDE5BD8A937287195)); /* INV_= L10 */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, fp1, status); /* LOGN(X)*INV_L10 */ =20 @@ -680,13 +682,13 @@ floatx80 floatx80_log2(floatx80 a, float_status *stat= us) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 if (aSig =3D=3D one_sig) { /* X is 2^k */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D int32_to_floatx80(aExp - 0x3FFF, status); } else { @@ -694,7 +696,7 @@ floatx80 floatx80_log2(floatx80 a, float_status *status) fp1 =3D packFloatx80(0, 0x3FFF, UINT64_C(0xB8AA3B295C17F0BC)); /* = INV_L2 */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, fp1, status); /* LOGN(X)*INV_L2 */ } @@ -740,9 +742,9 @@ floatx80 floatx80_etox(floatx80 a, float_status *status) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 adjflag =3D 0; =20 @@ -818,7 +820,7 @@ floatx80 floatx80_etox(floatx80 a, float_status *status) } =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, scale, status); =20 @@ -828,15 +830,13 @@ floatx80 floatx80_etox(floatx80 a, float_status *stat= us) } else { /* |X| >=3D 16380 log2 */ if (compact > 0x400CB27C) { /* |X| >=3D 16480 log2 */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); if (aSign) { - a =3D roundAndPackFloatx80( - status->floatx80_rounding_preci= sion, - 0, -0x1000, aSig, 0, status); + a =3D roundAndPackFloatx80(get_floatx80_rounding_preci= sion(status), + 0, -0x1000, aSig, 0, status); } else { - a =3D roundAndPackFloatx80( - status->floatx80_rounding_preci= sion, - 0, 0x8000, aSig, 0, status); + a =3D roundAndPackFloatx80(get_floatx80_rounding_preci= sion(status), + 0, 0x8000, aSig, 0, status); } float_raise(float_flag_inexact, status); =20 @@ -877,7 +877,7 @@ floatx80 floatx80_etox(floatx80 a, float_status *status) } } else { /* |X| < 2^(-65) */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(a, float32_to_floatx80(make_float32(0x3F800000), status), status); /* 1 + X */ @@ -923,9 +923,9 @@ floatx80 floatx80_twotox(floatx80 a, float_status *stat= us) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 fp0 =3D a; =20 @@ -935,18 +935,18 @@ floatx80 floatx80_twotox(floatx80 a, float_status *st= atus) /* |X| > 16480 or |X| < 2^(-70) */ if (compact > 0x3FFF8000) { /* |X| > 16480 */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 if (aSign) { - return roundAndPackFloatx80(status->floatx80_rounding_prec= ision, + return roundAndPackFloatx80(get_floatx80_rounding_precisio= n(status), 0, -0x1000, aSig, 0, status); } else { - return roundAndPackFloatx80(status->floatx80_rounding_prec= ision, + return roundAndPackFloatx80(get_floatx80_rounding_precisio= n(status), 0, 0x8000, aSig, 0, status); } } else { /* |X| < 2^(-70) */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, float32_to_floatx80( make_float32(0x3F800000), status), @@ -1028,7 +1028,7 @@ floatx80 floatx80_twotox(floatx80 a, float_status *st= atus) fp0 =3D floatx80_add(fp0, fact1, status); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, adjfact, status); =20 @@ -1073,9 +1073,9 @@ floatx80 floatx80_tentox(floatx80 a, float_status *st= atus) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 fp0 =3D a; =20 @@ -1085,18 +1085,18 @@ floatx80 floatx80_tentox(floatx80 a, float_status *= status) /* |X| > 16480 LOG2/LOG10 or |X| < 2^(-70) */ if (compact > 0x3FFF8000) { /* |X| > 16480 */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 if (aSign) { - return roundAndPackFloatx80(status->floatx80_rounding_prec= ision, + return roundAndPackFloatx80(get_floatx80_rounding_precisio= n(status), 0, -0x1000, aSig, 0, status); } else { - return roundAndPackFloatx80(status->floatx80_rounding_prec= ision, + return roundAndPackFloatx80(get_floatx80_rounding_precisio= n(status), 0, 0x8000, aSig, 0, status); } } else { /* |X| < 2^(-70) */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, float32_to_floatx80( make_float32(0x3F800000), status), @@ -1183,7 +1183,7 @@ floatx80 floatx80_tentox(floatx80 a, float_status *st= atus) fp0 =3D floatx80_add(fp0, fact1, status); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, adjfact, status); =20 @@ -1228,9 +1228,9 @@ floatx80 floatx80_tan(floatx80 a, float_status *statu= s) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 @@ -1295,7 +1295,7 @@ floatx80 floatx80_tan(floatx80 a, float_status *statu= s) goto loop; } else { set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_move(a, status); =20 @@ -1355,7 +1355,7 @@ floatx80 floatx80_tan(floatx80 a, float_status *statu= s) fp1 =3D packFloatx80(xSign, xExp, xSig); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_div(fp0, fp1, status); =20 @@ -1393,7 +1393,7 @@ floatx80 floatx80_tan(floatx80 a, float_status *statu= s) status); /* 1+S(Q1+S(Q2+S(Q3+SQ4))) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_div(fp0, fp1, status); =20 @@ -1439,9 +1439,9 @@ floatx80 floatx80_sin(floatx80 a, float_status *statu= s) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 @@ -1510,7 +1510,7 @@ floatx80 floatx80_sin(floatx80 a, float_status *statu= s) status); /* 1 */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 /* SINTINY */ a =3D floatx80_move(a, status); @@ -1583,7 +1583,7 @@ floatx80 floatx80_sin(floatx80 a, float_status *statu= s) fp0 =3D floatx80_mul(fp0, x, status); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, float32_to_floatx80(posneg1, status), = status); =20 @@ -1633,7 +1633,7 @@ floatx80 floatx80_sin(floatx80 a, float_status *statu= s) fp0 =3D floatx80_mul(fp0, fp1, status); /* SIN(R')-R' */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, x, status); =20 @@ -1679,9 +1679,9 @@ floatx80 floatx80_cos(floatx80 a, float_status *statu= s) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 @@ -1749,7 +1749,7 @@ floatx80 floatx80_cos(floatx80 a, float_status *statu= s) fp0 =3D float32_to_floatx80(make_float32(0x3F800000), status);= /* 1 */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 /* COSTINY */ a =3D floatx80_sub(fp0, float32_to_floatx80( @@ -1823,7 +1823,7 @@ floatx80 floatx80_cos(floatx80 a, float_status *statu= s) fp0 =3D floatx80_mul(fp0, x, status); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, float32_to_floatx80(posneg1, status), = status); =20 @@ -1871,7 +1871,7 @@ floatx80 floatx80_cos(floatx80 a, float_status *statu= s) fp0 =3D floatx80_mul(fp0, fp1, status); /* SIN(R')-R' */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, x, status); =20 @@ -1918,9 +1918,9 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) compact =3D floatx80_make_compact(aExp, aSig); =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 if (compact < 0x3FFB8000 || compact > 0x4002FFFF) { /* |X| >=3D 16 or |X| < 1/16 */ @@ -1930,7 +1930,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) fp1 =3D packFloatx80(aSign, 0x0001, one_sig); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_sub(fp0, fp1, status); =20 @@ -1970,7 +1970,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) fp1 =3D packFloatx80(aSign, piby2_exp, pi_sig); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, fp1, status); =20 @@ -1981,7 +1981,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) } else { /* |X| < 1/16 */ if (compact < 0x3FD78000) { /* |X| < 2^(-40) */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_move(a, status); =20 @@ -2021,7 +2021,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) fp0 =3D floatx80_mul(fp0, fp1, status); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, xsave, status); =20 @@ -2070,7 +2070,7 @@ floatx80 floatx80_atan(floatx80 a, float_status *stat= us) fp0 =3D floatx80_add(fp0, fp1, status); /* ATAN(U) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, fp3, status); /* ATAN(X) */ =20 @@ -2123,9 +2123,9 @@ floatx80 floatx80_asin(floatx80 a, float_status *stat= us) } /* |X| < 1 */ =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 one =3D packFloatx80(0, one_exp, one_sig); fp0 =3D a; @@ -2137,7 +2137,7 @@ floatx80 floatx80_asin(floatx80 a, float_status *stat= us) fp0 =3D floatx80_div(fp0, fp1, status); /* X/SQRT((1+X)*(1-X)) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_atan(fp0, status); /* ATAN(X/SQRT((1+X)*(1-X)))= */ =20 @@ -2171,7 +2171,8 @@ floatx80 floatx80_acos(floatx80 a, float_status *stat= us) } if (aExp =3D=3D 0 && aSig =3D=3D 0) { float_raise(float_flag_inexact, status); - return roundAndPackFloatx80(status->floatx80_rounding_precision, 0, + return roundAndPackFloatx80(get_floatx80_rounding_precision(status= ), + 0, piby2_exp, pi_sig, 0, status); } =20 @@ -2193,9 +2194,9 @@ floatx80 floatx80_acos(floatx80 a, float_status *stat= us) } /* |X| < 1 */ =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 one =3D packFloatx80(0, one_exp, one_sig); fp0 =3D a; @@ -2207,7 +2208,7 @@ floatx80 floatx80_acos(floatx80 a, float_status *stat= us) fp0 =3D floatx80_atan(fp0, status); /* ATAN(SQRT((1-X)/(1+X))) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, fp0, status); /* 2 * ATAN(SQRT((1-X)/(1+X)= )) */ =20 @@ -2257,9 +2258,9 @@ floatx80 floatx80_atanh(floatx80 a, float_status *sta= tus) } /* |X| < 1 */ =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 one =3D packFloatx80(0, one_exp, one_sig); fp2 =3D packFloatx80(aSign, 0x3FFE, one_sig); /* SIGN(X) * (1/2) */ @@ -2271,7 +2272,7 @@ floatx80 floatx80_atanh(floatx80 a, float_status *sta= tus) fp0 =3D floatx80_lognp1(fp0, status); /* LOG1P(Z) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, fp2, status); /* ATANH(X) =3D SIGN(X) * (1/2) * LOG1P(Z) */ @@ -2316,9 +2317,9 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 if (aExp >=3D 0x3FFD) { /* |X| >=3D 1/4 */ compact =3D floatx80_make_compact(aExp, aSig); @@ -2411,7 +2412,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) sc =3D packFloatx80(0, m + 0x3FFF, one_sig); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, sc, status); =20 @@ -2424,7 +2425,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) status); /* -1 */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, float32_to_floatx80( make_float32(0x00800000), status), @@ -2435,7 +2436,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) return a; } else { set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 return floatx80_etox(a, status); } @@ -2496,7 +2497,7 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *st= atus) fp0 =3D floatx80_add(fp0, fp1, status); /* S*B1+Q */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, a, status); =20 @@ -2514,14 +2515,14 @@ floatx80 floatx80_etoxm1(floatx80 a, float_status *= status) fp0 =3D floatx80_add(fp0, sc, status); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, float64_to_floatx80( make_float64(0x3730000000000000), status), status); } else { set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, sc, status); } @@ -2566,9 +2567,9 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 @@ -2577,7 +2578,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) if (compact < 0x3FFF8000) { /* TANHSM */ set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_move(a, status); =20 @@ -2594,7 +2595,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) sign ^=3D 0x80800000; /* -SIGN(X)*EPS */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, float32_to_floatx80(make_float32(s= ign), status), status); @@ -2616,7 +2617,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) status); /* SIGN */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp1, fp0, status); =20 @@ -2639,7 +2640,7 @@ floatx80 floatx80_tanh(floatx80 a, float_status *stat= us) fp1 =3D packFloatx80(vSign ^ aSign, vExp, vSig); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_div(fp0, fp1, status); =20 @@ -2682,9 +2683,9 @@ floatx80 floatx80_sinh(floatx80 a, float_status *stat= us) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 @@ -2692,9 +2693,9 @@ floatx80 floatx80_sinh(floatx80 a, float_status *stat= us) /* SINHBIG */ if (compact > 0x400CB2B3) { set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 - return roundAndPackFloatx80(status->floatx80_rounding_precisio= n, + return roundAndPackFloatx80(get_floatx80_rounding_precision(st= atus), aSign, 0x8000, aSig, 0, status); } else { fp0 =3D floatx80_abs(a); /* Y =3D |X| */ @@ -2708,7 +2709,7 @@ floatx80 floatx80_sinh(floatx80 a, float_status *stat= us) fp2 =3D packFloatx80(aSign, 0x7FFB, one_sig); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, fp2, status); =20 @@ -2728,7 +2729,7 @@ floatx80 floatx80_sinh(floatx80 a, float_status *stat= us) fact =3D packFloat32(aSign, 0x7E, 0); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, float32_to_floatx80(fact, status), status); =20 @@ -2768,17 +2769,18 @@ floatx80 floatx80_cosh(floatx80 a, float_status *st= atus) } =20 user_rnd_mode =3D get_float_rounding_mode(status); - user_rnd_prec =3D status->floatx80_rounding_precision; + user_rnd_prec =3D get_floatx80_rounding_precision(status); set_float_rounding_mode(float_round_nearest_even, status); - status->floatx80_rounding_precision =3D floatx80_precision_x; + set_floatx80_rounding_precision(floatx80_precision_x, status); =20 compact =3D floatx80_make_compact(aExp, aSig); =20 if (compact > 0x400CB167) { if (compact > 0x400CB2B3) { set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; - return roundAndPackFloatx80(status->floatx80_rounding_precisio= n, 0, + set_floatx80_rounding_precision(user_rnd_prec, status); + return roundAndPackFloatx80(get_floatx80_rounding_precision(st= atus), + 0, 0x8000, one_sig, 0, status); } else { fp0 =3D packFloatx80(0, aExp, aSig); @@ -2792,7 +2794,7 @@ floatx80 floatx80_cosh(floatx80 a, float_status *stat= us) fp1 =3D packFloatx80(0, 0x7FFB, one_sig); =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_mul(fp0, fp1, status); =20 @@ -2810,7 +2812,7 @@ floatx80 floatx80_cosh(floatx80 a, float_status *stat= us) fp1 =3D floatx80_div(fp1, fp0, status); /* 1/(2*EXP(|X|)) */ =20 set_float_rounding_mode(user_rnd_mode, status); - status->floatx80_rounding_precision =3D user_rnd_prec; + set_floatx80_rounding_precision(user_rnd_prec, status); =20 a =3D floatx80_add(fp0, fp1, status); =20 diff --git a/tests/fp/fp-test.c b/tests/fp/fp-test.c index fdb0cccf14..326a1201f3 100644 --- a/tests/fp/fp-test.c +++ b/tests/fp/fp-test.c @@ -996,7 +996,7 @@ void run_test(void) =20 verCases_roundingPrecision =3D 0; slow_extF80_roundingPrecision =3D prec80; - qsf.floatx80_rounding_precision =3D qsf_prec80; + set_floatx80_rounding_precision(qsf_prec80, &qsf); =20 if (attrs & FUNC_EFF_ROUNDINGPRECISION) { verCases_roundingPrecision =3D prec80; --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474577; cv=none; d=zohomail.com; s=zohoarc; b=CUuI63BcSHKtopoG23iNVWEfhmANeH97uF61cKSbBWQVBr38gKgLOPMw8Mr0+NQU7/Wki/Za4lldxW7lkyzGjZI3wG38v/yfg3lO+11kP0iw/2XLjSzEjFW3hrns5sdb8IWttr++AoXWPAy8Po6t+LGTZJuaZ42tgw2O/kQKCus= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474577; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=gNRh84rUAghqHenrq+0cUxy5mrPbxSwReJ+c+zbc2c0=; b=hGeKRvz7adsBk5ZDj2Z8V8OLK8aNyG99wXUX5s/COT9SA9cD7hR+iJTM8zPrYj61mOFlWiYlNBfMAZ/y7pBcXT23WTi/AHGMiNhR3y8tgDolOj32Ep/DAY0+fmwmRbwixg1ipOMZt4DRom4Nd0Jk88bjlFV5Eyjz2lvCHv9aR1Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474577865117.71674985957463; Fri, 22 May 2026 11:29:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUb4-0004rZ-SW; Fri, 22 May 2026 14:27:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUb2-0004qg-UQ for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:44 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUb1-0005R4-3D for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:44 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2ba1e9d3687so50614535ad.3 for ; Fri, 22 May 2026 11:27:42 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474462; x=1780079262; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=gNRh84rUAghqHenrq+0cUxy5mrPbxSwReJ+c+zbc2c0=; b=McSgBKhZRYb+ysYFSX+96+4/hqgSiLmvvxs2Q2AXHxxmMyMwhO4n/dYzD4hOz5NUUb xuk2IudYSg6amayce3C9d7Vpywpevd3NNdwF9xI4pNi/plY4P+PEmjhgdr73fs/QdGC9 vSHT+qIGYy+wWGJvSW1dk8Endjtn9sjdpZt23whb0l1weSD6ePJN3Y+j3JfyWwYJxdb7 hA7Cu3bIJUC9zRkjenmtJ7B2MuoVBK2dWwFxFHnTAbnx5geUdtTZj89lFx1V+g8B8kwE sDSmRG2KwK0FM6Y/SY5Yhn+b0JWM3sGw8LtZrSXPH53Za0izA6/7jJVGJuYC9xbTfLUg y95w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474462; x=1780079262; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=gNRh84rUAghqHenrq+0cUxy5mrPbxSwReJ+c+zbc2c0=; b=Ir6btvPlwXshHGSP3ED/yZiUUEr6UVmTcIFSVSCQTEX6+D9abUaNBiBPVPpkMGLvVB 0zP1Hab9IFomsVZmJnpqBTlksotWdUgaApgebb79ChqDR0bV6rn4v6ycFvnIGsld02/a OBqM5LxNke+hwOwc31nhBVqV9kBBJ385lEDzbBlWR62BpzNj8FA6bY+dMY0uufBVMReA 28Er7vk0uW8dWnBHdTqmbco/32ZKC/UULRRfeVftiqKd9TsVlLBYPLf2lWuaY4y8T17n ftOtrX7aYPSa2LvqSIY0RI6og4vAVdUX05JkNxAgn37q6Yvr6JoTdYjNrrdnm5r9fyE3 OavQ== X-Gm-Message-State: AOJu0YxL0chU6G0vDsUZ6xIbZxfNWtUD2Q9iUQx8I7w2xPGdQkXjqD9Y H9SU/hhRcikKuboThkiCdhzNt//22L+B0olnGASOKwtNmxf4Zq8XxRb8xjfKpj+feROui3ecTga NNRY+ X-Gm-Gg: Acq92OEx8o+wO8YTQBbfAQsUsJy7rnGKQAokAH9m2nCklUfDDpjyEmrB46oaUb9sCqx j5AcY3HSa9DseJkguCIQzek6cG2ZQ8NwcT1hOyDS/jalSpxZoVKJupP8sSZe5JyidalJNXQm2KP 4tSmDiOEbZY6CtSUwl6ElLMVTF6kofJq7X4/rbf3UibEBrX59ZhpXl9Myk8/AkoNhzQpfhu6yIx 78EgUSWxqOykSm64Ns5KDLW7ERMjTVaD0YCtT4enUdTe0e37RYIPtzRuzEc/LHdWGaXpP0WBzXB 3w7zho8YDWW5wdRqd0qLDoerhR7tezYuAqLQWLSam5E7IcQzT2hYQ1o+op2LPUvnQLeD2tJRlqr lnC9QaFHAcEul930rSzdpQ1ZtA24nHAzGXHQkVRuYKyg7wBrbrU8HIA/uB9+ypl+T8EpZMBzqCU AwQCOVQe0hJURpk0+M7eFRd3NZOu5fw06334SMslo= X-Received: by 2002:a17:902:ebd2:b0:2bd:de3c:a021 with SMTP id d9443c01a7336-2beb06f9a8emr44065845ad.38.1779474461704; Fri, 22 May 2026 11:27:41 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 16/30] fpu: Use get_floatx80_behaviour everywhere Date: Fri, 22 May 2026 11:26:44 -0700 Message-ID: <20260522182658.184604-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474578105158500 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/fpu/softfloat.h | 10 ++++++---- fpu/softfloat.c | 2 +- fpu/softfloat-parts.c.inc | 4 ++-- fpu/softfloat-specialize.c.inc | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h index 4ae4ddc799..e08d1c374d 100644 --- a/include/fpu/softfloat.h +++ b/include/fpu/softfloat.h @@ -1018,7 +1018,7 @@ static inline bool floatx80_is_infinity(floatx80 a, f= loat_status *status) bool intbit =3D a.low >> 63; =20 if (!intbit && - !(status->floatx80_behaviour & floatx80_pseudo_inf_valid)) { + !(get_floatx80_behaviour(status) & floatx80_pseudo_inf_valid)) { return false; } return (a.high & 0x7fff) =3D=3D 0x7fff && !(a.low << 1); @@ -1112,6 +1112,8 @@ static inline bool floatx80_unordered_quiet(floatx80 = a, floatx80 b, *-------------------------------------------------------------------------= ---*/ static inline bool floatx80_invalid_encoding(floatx80 a, float_status *s) { + FloatX80Behaviour rule =3D get_floatx80_behaviour(s); + if ((a.low >> 63) || (a.high & 0x7fff) =3D=3D 0) { /* Anything with the Integer bit set or the exponent 0 is valid */ return false; @@ -1119,12 +1121,12 @@ static inline bool floatx80_invalid_encoding(floatx= 80 a, float_status *s) =20 if ((a.high & 0x7fff) =3D=3D 0x7fff) { if (a.low) { - return !(s->floatx80_behaviour & floatx80_pseudo_nan_valid); + return !(rule & floatx80_pseudo_nan_valid); } else { - return !(s->floatx80_behaviour & floatx80_pseudo_inf_valid); + return !(rule & floatx80_pseudo_inf_valid); } } else { - return !(s->floatx80_behaviour & floatx80_unnormal_valid); + return !(rule & floatx80_unnormal_valid); } } =20 diff --git a/fpu/softfloat.c b/fpu/softfloat.c index d2a9f97089..f774ff278c 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1578,7 +1578,7 @@ floatx80 floatx80_round_pack_canonical(FloatParts128 = *p, float_status *s) =20 case float_class_inf: /* x86 and m68k differ in the setting of the integer bit. */ - frac =3D s->floatx80_behaviour & floatx80_default_inf_int_bit_is_z= ero ? + frac =3D get_floatx80_behaviour(s) & floatx80_default_inf_int_bit_= is_zero ? 0 : (1ULL << 63); exp =3D fmt->exp_max; break; diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 7311c3696e..fd3e79fd3e 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -213,7 +213,7 @@ static void partsN(canonicalize)(FloatPartsN *p, float_= status *status, * how we uncanonicalize results. */ bool has_pseudo_denormals =3D fmt->has_explicit_bit && - (status->floatx80_behaviour & floatx80_pseudo_denormal_valid); + (get_floatx80_behaviour(status) & floatx80_pseudo_denormal_valid); =20 if (unlikely(p->exp =3D=3D 0)) { if (likely(fracN(eqz)(p))) { @@ -420,7 +420,7 @@ static void partsN(uncanon_normal)(FloatPartsN *p, floa= t_status *s, } else { bool is_tiny =3D s->tininess_before_rounding || exp < 0; bool has_pseudo_denormals =3D fmt->has_explicit_bit && - (s->floatx80_behaviour & floatx80_pseudo_denormal_valid); + (get_floatx80_behaviour(s) & floatx80_pseudo_denormal_valid); =20 if (!is_tiny) { FloatPartsN discard; diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc index 0b527302a5..4b6c17e433 100644 --- a/fpu/softfloat-specialize.c.inc +++ b/fpu/softfloat-specialize.c.inc @@ -221,7 +221,7 @@ floatx80 floatx80_default_inf(bool zSign, float_status = *status) * Whether the Integer bit is set in the default Infinity is * target dependent. */ - bool z =3D status->floatx80_behaviour & floatx80_default_inf_int_bit_i= s_zero; + bool z =3D get_floatx80_behaviour(status) & floatx80_default_inf_int_b= it_is_zero; return packFloatx80(zSign, 0x7fff, z ? 0 : (1ULL << 63)); } =20 --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474674; cv=none; d=zohomail.com; s=zohoarc; b=SfJzPbNoK8A32TT71KAR+M4zyKATGU3xvhtnAHtypvoKKq31/kMTdOUPGdk8Hw8ICxl2XjEB7Csw+3ciCD86d3wgxm6nykrpiIKwiuR54PVs11NfC5bHEWDTzEmjz6/ir12w9/3UXAj1A0pVxxbpSqpIMZ4xsy1lWKUw5oLflAU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474674; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=eTV+CLBxiOJvwZGNE9Pre6H8XgUGreJTp6/Amr+aefE=; b=L8zA+KC7H5UQSwn5UbKNGsNyeRifLsJiBfsKamQvoIE6m9bCGSAhsigSlThB+Fo3DMa9+5/rcZkvuVcgse+ZE488JLhN/7PXLKTdgXzvIDxwf/4P0fPCFgzDBGrUThxLuinAX7kfNjI5aZU1hvs+U6VHH+CSwwz3K4Wr2YqtFio= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474674871715.3958373388725; Fri, 22 May 2026 11:31:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUb6-0004xq-Cv; Fri, 22 May 2026 14:27:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUb4-0004rN-CT for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:46 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUb2-0005RD-3I for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:46 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-3664df32e91so8570727a91.3 for ; Fri, 22 May 2026 11:27:43 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474462; x=1780079262; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eTV+CLBxiOJvwZGNE9Pre6H8XgUGreJTp6/Amr+aefE=; b=ZHihVbn34nyjPlDUOszeis53qhwxV259ysTf7Khf+H4mhYa0ad/w21ZP5oWnOUUFqO bakzBCzhuZrgFngjdL97wAOl3SA49So6+HJol5+jL0fq/XwmpCAWMMulV3T6q7hczsh/ FT3KHLWkdQO64j1OTrDDBjS/IHeBucmqI8jtfR+/iPBq7P+TIb64dFUkBWLs4Fdmt0xs FofNWfDkcbt/AuKywk2JAgs5WdIZ0p8pIepr81lIy99D3smeIkR8ISvwiGXEwrooJVdv 5yyNv3JrT+PlixmJ5oFCNPO4bgUJXuiufya5VlNVJDm7/x5vB4s/FCtShSk3Jjy6vaFd pQ7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474462; x=1780079262; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=eTV+CLBxiOJvwZGNE9Pre6H8XgUGreJTp6/Amr+aefE=; b=q2dQlvlCVisw+XqYxVV4YwppgZa/u+aZQ8ltT9fkzTBG+XOOOa2XjdQB6HBRj+3ioq sh3E6BXogV6HOeRwxUOzYW+k8aGmwo26ukBCVDWSz3ap0vyh51aCaRDGjVmOi/T5Z+30 YlgyLsR2Y5DKeyjo683FvDQLgI3hYqwTchGCgYSG8140bQrx1ivaL4mpIgnrIUDcCcDt ZEDYo2ahbYqHwxK1bkTCOLV48GH/40JVyIvHWpSktnqKb298r1MbKoiCEZDHc5l9NRv9 hJ3UskxW+uyK9dOxSDINGvYYlSjo4i5+k6jjsGCro4YRMJbzud3+bEp4lH8rtTQnFeoT 5wnQ== X-Gm-Message-State: AOJu0Yyc1besLBSF7wVorzIfq95xCVNhl4GNOWRXndIWQwrDE2i3ht+E utbH29QQFTbpwwxmCHjOMX5n0aqi4mtVzOZTTYLUCHMdH4TsUr6z6QP8ALZae+E5WF/iQIOvJwB LPzRy X-Gm-Gg: Acq92OErDNCRRlsh9dLv+4H42yu6iusWfTqU1G/Maz6RVogbczhFBet7SVmFyDsy1Kw Kmiy/14W1wCYhFLhZSE4lDfWX0vS7eYBhzS+n0x3sgElKPShAmlv+kCx9gnzXucMRr61cRxPaVz D+AP5SLCaSzqDqMWVQzDrfL+AHPiEo/P4bDeY9VqARMJCSx0t/iiRiXf1ufd62faC9s3zC8E+M6 PxMIZaszrl/liDJEdqrhMj3uJEgR/ptM//7j52KqHjac9fgDcWnjBDSMJogKOpQrzMc7uHOCGuT toRnd8rmm0HD8d7JwVbSKX2H//JuOMqB+J/jQgredPj94G5iqdWZDdBbMuOWGCGiUBEf4jN4Adv HGHAXfNs1YsHVJHQj2fzev+TeyYgA7uGB1AtMNNcy/JJ+SSM1wSX8EVR2/9UlMRLAf3kt3dThwm sIuLQ2myi93pc47cWCxSWRJL9z6g6ulTP1uaFo4Jg= X-Received: by 2002:a17:903:41d2:b0:2bc:eea4:83c3 with SMTP id d9443c01a7336-2beb06fc96cmr52693805ad.25.1779474462431; Fri, 22 May 2026 11:27:42 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 17/30] fpu: Use get_float_2nan_prop_rule in partsN_pick_nan Date: Fri, 22 May 2026 11:26:45 -0700 Message-ID: <20260522182658.184604-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102c; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474676711158500 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat-parts.c.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index fd3e79fd3e..f40a950b41 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -53,7 +53,7 @@ FloatPartsN partsN(pick_nan)(const FloatPartsN *a, const = FloatPartsN *b, return partsN(default_nan)(s); } =20 - switch (s->float_2nan_prop_rule) { + switch (get_float_2nan_prop_rule(s)) { case float_2nan_prop_s_ab: if (have_snan) { ret =3D is_snan(a->cls) ? a : b; --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474719; cv=none; d=zohomail.com; s=zohoarc; b=V/8Z70+/TJHT3xRp7hxUWQ9/Ks7HxKhpNMz93J+dOWonR9JkfAvhTDg+jdPh3qva9bS36eQyRl9vr0RpasEfqUYzh0uWn+3TOCtW9JZWIqztCbTgniut75lydYeUrtPfnbDUDYSfjLkS4P4v55INWlLey7uW4LlhXVIsyI6GCiw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474719; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=QD0lZ4gXN1fWzU8DAYp+qX7d5AOu5jrmEh8yc45jBSU=; b=KNRliLkvIOYlqRK6sGMIYm90bqtVCkPvacsLAOdzNeZJrOo6SOAzvw+q+D2EB0fWImEhEsWtxjIdYLR12+psQLu9CgnX7UicckZXDKL25Q43hMB/OriVU1jfwCVALaUCPMadwjFxI4vzz5OJR0hu6PWSSa2D5q+YIk11sDA+Xmc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474719711309.82018608328576; Fri, 22 May 2026 11:31:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUb8-000553-7V; Fri, 22 May 2026 14:27:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUb5-0004vM-Ew for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:47 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUb3-0005RQ-20 for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:47 -0400 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-2bea7176c72so17028715ad.0 for ; Fri, 22 May 2026 11:27:44 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474463; x=1780079263; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QD0lZ4gXN1fWzU8DAYp+qX7d5AOu5jrmEh8yc45jBSU=; b=VVZFOybEdLb0LvI4+5x3aHyL7uwIibDb37t9//PIvcstRs4ByiSt4na8ca4thWb9FP 3KkAALGrBE92mN+q96ssYwLQpOFXByUco6ytJZlHRM0zchFYVCeW7vSm+T9VMns9yUYT nacMz28urhEVS/ISW6eOfXJSd2Jdi6we7sY9hSmNJ/GSs6e/9DKcuVymGBwmabS4bpKw Dc6L3AnVIU80GUkqEHxS6RU7LfP++WI19Wid/xUQuOOcZXlMMlhTA1ufLWzfqJCQugam AP8lpw1tuM2ODYmvvHt1sqGJBuxQYAy+GX/Ks8LVJ4dxvWUvLuPfYqQpAm0Q23+Ss0oE Cccg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474463; x=1780079263; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=QD0lZ4gXN1fWzU8DAYp+qX7d5AOu5jrmEh8yc45jBSU=; b=Vg3sCEA7DS4jupO3Oa2T0+SCymDwAzKtqHf1Tl9oQEfRo58zAUyOp8xeI7JedwB5uZ kRpu8FjhRCZ7fLnsOlLGLzg/eeh75cWW0Oji8HswXxr97+TKu+KzceIa7YVCHATQp7M1 NhuIMthF1S+xYY/SwOHHTgNasu91qhnYbK1zA+WBeHPtBPOWH0hxyTg+jyf8sdSaNFBc hrF3d8xZ4FoBuxc67LIQ3rTAHacTY36gsfMOtS3RtI6Oln0L+1fYb4Buo7VR9kzXs62W aY18tOr1pINGNGb4LbsKr1OTqpMUjLvNu/j3Euvbfi9FK6fn1NfAx43bhNyfs1mGxgAu nQvw== X-Gm-Message-State: AOJu0YwSvVkVkZBQbmCzrB0VYXjp20JDzcb9Cv/RILha2Dau/l3vFs0Q bMgzr2c/m9dLOMeUF9RR3pk9vpAn5d4s5EhWOf6K9sgPtxsCjiZx9Rbszzldc34wZSE0hCm9+Rn T7qlu X-Gm-Gg: Acq92OEj9NlkVu5Sq/afU7q0E2gRcHeL/SmFhe3xoVF1M6KgEgRMrGhKBaudPBQpIWl NMXlIgR3cX8nPSCWGjkW4b6Xk/Ua0Ey2QdzJshMt0LouQ0hQdLKAS0oG9nJqf0aFizAyjwe3wq7 EpVAj9JxpU5kkJ/JxU72poYZMBWzC0FF/2wXsIdvQ/lnnxMh3vq1x42qsgVmSyCEDGIZ0lu3vv9 ew8E2q+7QVr+nZO7qvGb7g8k7VJ7x23JsB4CGW5p3Av6/jTgcsZWgO3Sz4D2+0K4IkHotL/CEV/ LFNNjkMKaDr3i3lM3X6tLJvpBH16KglyweM6u+cazbfP3R3i1wpjy6l9B1XIaJ+rXB/shQ7MlwH AoIZ/yH+mBXEy4oSUSORsfqEXPfm6MOaIN1YSXhX+aY+k80MyD3XmzsMht4sgWJTRFSqmY4wmyR DpdfIaOnmjW53wr+N5LkfJJb3BgXPD X-Received: by 2002:a17:902:e845:b0:2ba:4f37:d3a7 with SMTP id d9443c01a7336-2beb06a63c6mr53161435ad.27.1779474463308; Fri, 22 May 2026 11:27:43 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 18/30] fpu: Use get_float_3nan_prop_rule in partsN_pick_nan_muladd Date: Fri, 22 May 2026 11:26:46 -0700 Message-ID: <20260522182658.184604-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x634.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474721269154100 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat-parts.c.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index f40a950b41..7781e16122 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -163,7 +163,7 @@ static FloatPartsN partsN(pick_nan_muladd)(const FloatP= artsN *a, ret =3D c; } else { const FloatPartsN *val[R_3NAN_1ST_MASK + 1] =3D { a, b, c }; - Float3NaNPropRule rule =3D s->float_3nan_prop_rule; + Float3NaNPropRule rule =3D get_float_3nan_prop_rule(s); =20 assert(rule !=3D float_3nan_prop_none); if (have_snan && (rule & R_3NAN_SNAN_MASK)) { --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474481; cv=none; d=zohomail.com; s=zohoarc; b=R0LO7mRSK7phuin7P4mDkXCZxEMsoo188A40GWL5KoTFkilbxAAZg6vKd1T6/ZHcSL6a33aEkEkt+pO2mCME0IGXn87+57qIvSHlr82ibcOpkCBzlSyvKEg6d4DjNri9nQ6H1PFgBhM4LDoa2YUYlmOdJ3/miAMRren9iSs6cAA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474481; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=W2TQZHGKVgc2bDrawkrfHaeofSO+VDdLDbwQhXEPuBw=; b=Op23X/+t3WFySzpAGcAq3huv6WI8qaIOwB07mJCBK1CmoHoOFSh/8EG3qa1ZaGi2hrUFkufwaXjBIMl0ifvtl7jSrGvj3lx4I3OioNnGQl2myNwh4pnN1oKPkQ9E87ZJ5w6gu8BSBSoYDO4LiTx4YLrHqH3wVIlSlXQCm0BaAco= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177947448159482.37412907989051; Fri, 22 May 2026 11:28:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUb9-00058P-1Z; Fri, 22 May 2026 14:27:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUb5-0004wK-S9 for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:47 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUb3-0005Rb-Ri for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:47 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2ba0fc8b1f0so54828945ad.3 for ; Fri, 22 May 2026 11:27:45 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474464; x=1780079264; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=W2TQZHGKVgc2bDrawkrfHaeofSO+VDdLDbwQhXEPuBw=; b=l6cx50e69pn8CVUOKszS7SFJwARrHJ5oe+2X+czOeKeuCRA6PJXKA6h35HHIHclSdY rrE/ePpwyidKxu06E5D8aImbWvrFYGFkY/9aj3VisoJ2d26JuA5iTZWJOIXHuv4xwN13 +DLnczrWKcFdzAUcpRp+InrfkZy+ti15r64G/BgjWsEpKE/dChvHfhCpK0hJNx5a9W5M a6a7emB/GFBa0pQovLnOIHhWTsszCtmGChkQBGPZfcZ6ZkM4P8bZsvbZR93uwwuAHfFs JueIlXvHOrFNSeGnIsOjlVKMT9ok2ySA7cyideSB5zzFqEu2WZ+w8ijTVfjVhAuLAh3+ sLQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474464; x=1780079264; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=W2TQZHGKVgc2bDrawkrfHaeofSO+VDdLDbwQhXEPuBw=; b=PNNT86dYnNkg/BXe8by521x8KbIGK+Wc1SOBxhJTAcqzfEvN3myjJwdw0iY+P/9I4z mUeHH4HMxgFxyAXaEne6WldUwniMXwojwsTm79Gkhbv52OGd9lMc34HS7N/GWzgz6Sb7 c7rC6Jox7EGyQaJpy0OpIaJ5mxj9N0IQsPp6iieoJzbqllVqzxl0v3NmKddkLp/Z8uq3 eRgT7wsac9DJa3nzcMvUkWBuTPG3vZBkI1XXsQZw6J49q6TcU2TSbqgKur4q8COVdvfZ Yovjmyy7H2KDheGbRWsWbmJ+Tv7jzSUJSSIOwc7SSO+vk/a2RA2YN5Q8FP0BsbOZwO2v CODA== X-Gm-Message-State: AOJu0YyTG1512skAP/XXPJRE++rTc99NMjI2rkEp7jy1415E/HgDOpAI oQsPyWqSuNZgDVijHDBsvSwSPGt8zCHfFJ8bgIw/A5Og+BGBifS5oHclDjzzZzTuJTkVOY4PAWn LxWyr X-Gm-Gg: Acq92OHSUzP4d1PmMks3+UKpZ/6PekM/1RyqWxbl62WlSMVO6o6IKeX5UuFh/fjUa/A Pf2LN+/9Koj1HfDQHc90TzlOaaXrtUgqzYVpohdJfvlGhc8rnx8KtE2Sv/0fNT5HrauF/bFAF4C l53yJffS+IrtaWob1ymU0m6J0bO5j85YVtK1utpULoOWrS9m++CmbURXZ9vDqE9azmc+IpESLYB OHK2CP3NFF70EU5d1eHKNikZt5TJG3uIlTNw2rYY0DNmcC2T6pEvNSADDQrrE5TSIgS2AHuE0bm ZdfaqLUfc5A2znROwFCrOq3e7UVXXSOIxhILkylTkm11CJ31Si13C0efSoN67oqoK8+YJYGRi5K ArGtNGQbffVOm19UyMgBU9oft6Vh7lQhxwXwOksNJ8dHkrO/ho0iD4gqmME3va4bUKAexkTeuYh KgyJgA0MmSDQoApP96Y4hwlxVL8aXQ X-Received: by 2002:a17:903:4b48:b0:2bd:ba75:81c4 with SMTP id d9443c01a7336-2beb05d9d4cmr54456415ad.13.1779474464072; Fri, 22 May 2026 11:27:44 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 19/30] fpu: Use get_float_infzeronan_rule in partsN_pick_nan_muladd Date: Fri, 22 May 2026 11:26:47 -0700 Message-ID: <20260522182658.184604-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474483533154100 Deduplicate the uses to a local variable. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat-parts.c.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 7781e16122..1e92251761 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -122,14 +122,14 @@ static FloatPartsN partsN(pick_nan_muladd)(const Floa= tPartsN *a, { bool infzero =3D (ab_mask =3D=3D float_cmask_infzero); bool have_snan =3D (abc_mask & float_cmask_snan); + FloatInfZeroNaNRule izn_rule =3D get_float_infzeronan_rule(s); const FloatPartsN *ret; =20 if (unlikely(have_snan)) { float_raise(float_flag_invalid | float_flag_invalid_snan, s); } =20 - if (infzero && - !(s->float_infzeronan_rule & float_infzeronan_suppress_invalid)) { + if (infzero && !(izn_rule & float_infzeronan_suppress_invalid)) { /* This is (0 * inf) + NaN or (inf * 0) + NaN */ float_raise(float_flag_invalid | float_flag_invalid_imz, s); } @@ -147,7 +147,7 @@ static FloatPartsN partsN(pick_nan_muladd)(const FloatP= artsN *a, * Inf * 0 + NaN -- some implementations return the * default NaN here, and some return the input NaN. */ - switch (s->float_infzeronan_rule & ~float_infzeronan_suppress_inva= lid) { + switch (izn_rule & ~float_infzeronan_suppress_invalid) { case float_infzeronan_dnan_never: break; case float_infzeronan_dnan_always: --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474717; cv=none; d=zohomail.com; s=zohoarc; b=XrSPr30OuhF1kaC5t9yAJzusObabehzuiqmxUgQFhwkv3dqr5Rb7egSCYVf1BRWfcNqEHvVNDJ/OUBRJe+bgE/WaM3rp/hhzzXLU6mAPk0CUT5oGGFyn/pqTGVWYxDYgrMcJ8fJjJGtgv4abPTP2FKM6tA73htbsQDjdq2wS/+0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474717; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7CkGcitbVj7Tw/zFQo/cJKaPLwAnxuxCUWUlpY6Me2M=; b=UcN0k31uABA4h9djLUhyZWZWJ1/vmbsZ1LtVO8T/nizOoGYLXw+hTxCDRB7ixwUebffY8LOiEesT+WxN7tkXFvUPof9WZHa6sR7UJr+3+bof4CabLqjtRQcHbqx154QNM0jco2lYKXyei/IMcIJjHVjNeomQIAbJPDDOS/TZ93k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474717856364.1574699820982; Fri, 22 May 2026 11:31:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUb8-00057S-Kr; Fri, 22 May 2026 14:27:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUb6-0004yj-HX for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:48 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUb4-0005Rj-GA for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:48 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2be1dd4af34so62412295ad.1 for ; Fri, 22 May 2026 11:27:46 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474465; x=1780079265; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7CkGcitbVj7Tw/zFQo/cJKaPLwAnxuxCUWUlpY6Me2M=; b=o5HuY0rVUvqyZWUHHAK8tubZ8TFhTs8J8FsrMzsGXXrebajHKlfkqI3GzrWfhd2XhY PDiXzNwCXFZHI2U5xf7GUbUKUCcYJgmBlNlp8w3tQpt4e0KEIQWCv1qaaU3FK2kgwfIN ngOYpWCUWuOsvbz8tXWAitOK2wwYzuUoeuQlKmZjVjZhER93CJ0v3J3ked5FkLTuT4Ph P3d0H+oByRqt3vNST0UnNciezTNdfvp47a/Y8w56D+dEShL689VPH59FKe7dw/hZDhlj ANhTsn0kQVGis82EtQXQJyg8MiVqeXsZOsYI3hBSDjTHUFHi4duh45iofNY/anLB6tKg YgzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474465; x=1780079265; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=7CkGcitbVj7Tw/zFQo/cJKaPLwAnxuxCUWUlpY6Me2M=; b=j53cZctmuobz6+3VQoYA1MKViTiw2n0NpX+TYJN/ylpBa3fjIanSVj0aFfgIEDRRHN lsoCcFQ2Uj2/LmUFC07mN0aHmlG/4smRlWxrWV499t9W5/qNwVbtjEnNfNckI94fneGW UGhUvMLZFagNYBUQ5rKw6jyb/Y5QDpFhurijmI680WN2xEDTo9/6eo14VOakl8JTYMfk WDbg5r+U9dvJuVU0valSVQ/etDUryB7rfbWPBkswrJ2OhWFvK9yH/SzAXIGDUDQO1GdZ KMWo5tb/mCquU1yYYvJa1mrG7n0P3/3+qfkZfuYZl6g/aSu2aISNpxq8qSZbWJGgHQXe ui2g== X-Gm-Message-State: AOJu0YwVvRGZ/J5RoxOjgeMmGlMW2iMIhRkFqI5gW11WrsHziKuZQQ8F 3REUeJ74wXvDTGdFZG2VS6vpTmGHh4/7sHbIErqaQ+zmz/YbLdZSKPr3tuthMsXHXZLp1E6QjvL sjqTm X-Gm-Gg: Acq92OHePxNaANu3HEajyfgF14GxpIfK9L3sq/nWRewT5r2SYUx4tVp2lkfYUwXv8Xo NzbF0btbRVHA3SFYkj/ONO/rw+hqfX324xZkMPT6tM2Naz/A/TIVnbVqdqT2BDJZok7ez1QPRAj mRMbTeUBnIWYIoaIzHvWmQxF3lrZORPEltZ6btivJt3gBZyf2T2XBacvJTLZXLo239SmPo7T0w8 hJP5cv75HlDDOZ6guQI6hRt/+D5fit6F6S5Uzd4ji9VUG3Ee0TSBAcgg51xExcF50iMwezgmfGp IHOPicio+WwdteriTtHz8EtL1FzdFc03MtzMbn53hqhKyn7/+G/bFEZuRZJyWooZ1m40Id9Wvm+ oFyMkUkGel3GHMIUwxD/cPd+Yz2hZBfxmfr6BfYNErt8A47aEOw5cEFdt0E1UMA8qHSGV5HeVSo +zuJL8gMcWBhpYp3xAcOz/3oG+zLoTGL/2w7/lddU= X-Received: by 2002:a17:902:da92:b0:2bc:db02:d1ed with SMTP id d9443c01a7336-2beb06738acmr46619125ad.38.1779474464882; Fri, 22 May 2026 11:27:44 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 20/30] fpu: Use accessors for tininess_before_rounding Date: Fri, 22 May 2026 11:26:48 -0700 Message-ID: <20260522182658.184604-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474719038158500 Rename get_float_detect_tininess to get_tininess_before_rounding and move to softfloat.c, as there are no external users. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/fpu/softfloat-helpers.h | 5 ----- fpu/softfloat.c | 4 ++-- tests/fp/fp-test.c | 2 +- fpu/softfloat-parts.c.inc | 2 +- fpu/softfloat-specialize.c.inc | 5 +++++ 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/fpu/softfloat-helpers.h b/include/fpu/softfloat-helper= s.h index 95edd22842..395ce67abf 100644 --- a/include/fpu/softfloat-helpers.h +++ b/include/fpu/softfloat-helpers.h @@ -132,11 +132,6 @@ static inline void set_snan_rule(FloatSNaNRule val, fl= oat_status *status) status->float_snan_rule =3D val; } =20 -static inline bool get_float_detect_tininess(const float_status *status) -{ - return status->tininess_before_rounding; -} - static inline FloatRoundMode get_float_rounding_mode(const float_status *s= tatus) { return status->float_rounding_mode; diff --git a/fpu/softfloat.c b/fpu/softfloat.c index f774ff278c..c7c750f284 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -4923,7 +4923,7 @@ floatx80 roundAndPackFloatx80(FloatX80RoundPrec round= ingPrecision, bool zSign, float_raise(float_flag_output_denormal_flushed, status); return packFloatx80(zSign, 0, 0); } - isTiny =3D status->tininess_before_rounding + isTiny =3D get_tininess_before_rounding(status) || (zExp < 0 ) || (zSig0 <=3D zSig0 + roundIncrement); shift64RightJamming( zSig0, 1 - zExp, &zSig0 ); @@ -4997,7 +4997,7 @@ floatx80 roundAndPackFloatx80(FloatX80RoundPrec round= ingPrecision, bool zSign, return floatx80_default_inf(zSign, status); } if ( zExp <=3D 0 ) { - isTiny =3D status->tininess_before_rounding + isTiny =3D get_tininess_before_rounding(status) || (zExp < 0) || !increment || (zSig0 < UINT64_C(0xFFFFFFFFFFFFFFFF)); diff --git a/tests/fp/fp-test.c b/tests/fp/fp-test.c index 326a1201f3..16ffd36e6f 100644 --- a/tests/fp/fp-test.c +++ b/tests/fp/fp-test.c @@ -1011,7 +1011,7 @@ void run_test(void) =20 verCases_tininessCode =3D 0; slowfloat_detectTininess =3D tmode; - qsf.tininess_before_rounding =3D sf_tininess_to_qemu(t= mode); + set_float_detect_tininess(sf_tininess_to_qemu(tmode), = &qsf); =20 if (attrs & FUNC_EFF_TININESSMODE || ((attrs & FUNC_EFF_TININESSMODE_REDUCEDPREC) && diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 1e92251761..1c726cb86e 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -418,7 +418,7 @@ static void partsN(uncanon_normal)(FloatPartsN *p, floa= t_status *s, exp =3D 0; fracN(clear)(p); } else { - bool is_tiny =3D s->tininess_before_rounding || exp < 0; + bool is_tiny =3D get_tininess_before_rounding(s) || exp < 0; bool has_pseudo_denormals =3D fmt->has_explicit_bit && (get_floatx80_behaviour(s) & floatx80_pseudo_denormal_valid); =20 diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc index 4b6c17e433..0b62b0e907 100644 --- a/fpu/softfloat-specialize.c.inc +++ b/fpu/softfloat-specialize.c.inc @@ -79,6 +79,11 @@ this code that are retained. * version 2 or later. See the COPYING file in the top-level directory. */ =20 +static inline bool get_tininess_before_rounding(const float_status *status) +{ + return status->tininess_before_rounding; +} + /*------------------------------------------------------------------------= ---- | For the deconstructed floating-point with fraction FRAC, return true | if the fraction represents a signalling NaN; otherwise false. --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474701; cv=none; d=zohomail.com; s=zohoarc; b=CJYYQs3fuW7CPlUyL7FwVFekOoO1grYSl/UEyJi3M+YRM7daVDt0t+sG3OYPSL+Ns3mOBlMWYSgaMmUGN4S9DdK32/1rjCodlFWaDz0SxjNASNeABa7654OZD2VmXTyy7JEoWhDvBP8ipD4tbbuW5/GUfZfig5lIvrU/ZzjnKdk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474701; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=5yAk6F8ptTywGnvpoeV8kgP1093OZ9QNwCaIuesrM2U=; b=Epqh++cYvtu+J+5UktYZegSP1e7VOWO+QTaT8eNJCfWkLBtci2Yv2Xzyb0idvh2sJXY9rw6nSG5U8CBV4b0xTKiPWyVYsosebCFtqQCWakhHFjkK2jY2MNkZDPBoVkY3YKO41Vo2SH5Zb8mEKMdLTsKaRmNERF+25bAaqmRAewk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474701205728.6659124918203; Fri, 22 May 2026 11:31:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUbA-0005Dp-U9; Fri, 22 May 2026 14:27:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUb7-000533-TV for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:49 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUb5-0005Se-Vn for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:49 -0400 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-2ba21d32776so56581775ad.2 for ; Fri, 22 May 2026 11:27:47 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474466; x=1780079266; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5yAk6F8ptTywGnvpoeV8kgP1093OZ9QNwCaIuesrM2U=; b=TrPLzlLomT5NW8is6JAel3pNUjyZIYXwOPjkqeNWKKR2JocsyYDFOERVoSy4emBKjB rqM7sVai2i9Bgwn4b9Q7GY0amojhsbUbffX7AUA3znSgnTvqGcuR49LW66hq2nFlUH61 TOVw+DxLRvie7cOncMnxxQ/eAevfnIO2e9w5FDUIdi0De7/SaY9azzje2mFJOhPOGISZ Sr5H2R1Rhf4g5ws3WRjnxhT7e2ewQ2FgzU8ymf8FBwMaVbgap4S49mvaK7/jgX7VdrFI qUa8qJbRjnbH0LVTiRHhHhZWNCF6cb6RdrTi5EWUxRfDghzp0etyGygZR4pH4W14ms3Y CyNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474466; x=1780079266; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=5yAk6F8ptTywGnvpoeV8kgP1093OZ9QNwCaIuesrM2U=; b=D9PlqPH1k/I09cNmCKHMg3o9dyqMuv3wJXBJz/cV9wpXZ6/NZXPCKnvlXbJiOSt5mF +yeNFUTyDAnKOzjiSZPjuz2x3dEHzY1bVP/chxYAg2CtRUewtrRywpnPDIkFSyUckctK 7ietqd8edJdiGF9l8FLzn6svxo/BolRCBCKDsxX5e+nTfp8hKE1/vfZUg+2hKHUHUwt2 aU4G4eLvD0A2Lg40PuCZlVnsUL1GEbtSTA1dVeKOGmhgWv68M6CHkAGFGzgtP4L2d4CB arxohvN8PtdzUs0ztdDstvAyzwXyRpUp85P0D8ARdNXh/RrtZ5ddVjSmyd7b9351OTMp RDiQ== X-Gm-Message-State: AOJu0Yw4VzxPvQOdVgXze2woqV20Zdtd8uZqccN1cwCXxHNkhf1bxEHa xYLCCx+ysYxUyjjT8vhu9xaTBYUcSNUtDemU7Zpn2Vn2d5Ex2CgMVNxENRzyqgS/ZC/6ou4GlYN Pb79J X-Gm-Gg: Acq92OGkQpLrLSZnAv9aTBb3cP8XpSJVNNfjMpiT1vnxOqWUw+NyGmO2p+NCcBUi1vr aPSWbWWmkcK/kWXlMN2xazfaXbRgpkh+TbCj7S0Ry/58RPPy4iza3cE7zF3v36nkzA3FZMsLOfA STlYvMGfHKUByI5T8Sdci7ubH5YoLl5h+0tk0rVweiQLSm2XYy6Dd9tV69dxTDPtcsI/Cq4auVw LBgYgmMQ49lWTLlMied9ad/1INZDk23JjNw9pM6KrVX8H7WCU9VpGazoxAaFWRJuccFzvFSOmk1 ozSs98DAX37Bk6bYgKuzI24gWCbLNQWZATZPS1NXMf+xmKXR16genB6al7KXeD7lG5wCckKxysD 7pw6FnRpY+Y+oYyMW1sgnFCHLp4CtlRNHIhcShD9UHd2W5wpkoNho3dXns9Qc/2Y71m0XNYVxQm 6EiaonJr1UokI4vhcISEeMVk6xjE+q X-Received: by 2002:a17:903:2350:b0:2bd:eeb6:ff29 with SMTP id d9443c01a7336-2beb0356a13mr52570595ad.12.1779474466359; Fri, 22 May 2026 11:27:46 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 21/30] fpu: Use {get,set}_flush_to_zero everywhere Date: Fri, 22 May 2026 11:26:49 -0700 Message-ID: <20260522182658.184604-22-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::635; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474702945158500 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat.c | 2 +- target/arm/tcg/vfp_helper.c | 6 +++--- tests/fp/fp-bench.c | 2 +- fpu/softfloat-parts.c.inc | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index c7c750f284..dcae5b3be2 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -4919,7 +4919,7 @@ floatx80 roundAndPackFloatx80(FloatX80RoundPrec round= ingPrecision, bool zSign, goto overflow; } if ( zExp <=3D 0 ) { - if (status->flush_to_zero) { + if (get_flush_to_zero(status)) { float_raise(float_flag_output_denormal_flushed, status); return packFloatx80(zSign, 0, 0); } diff --git a/target/arm/tcg/vfp_helper.c b/target/arm/tcg/vfp_helper.c index 5839e82449..495ce8a329 100644 --- a/target/arm/tcg/vfp_helper.c +++ b/target/arm/tcg/vfp_helper.c @@ -711,7 +711,7 @@ uint32_t HELPER(recpe_f16)(uint32_t input, float_status= *fpst) } else { return float16_set_sign(float16_maxnorm, f16_sign); } - } else if (f16_exp >=3D 29 && fpst->flush_to_zero) { + } else if (f16_exp >=3D 29 && get_flush_to_zero(fpst)) { float_raise(float_flag_underflow, fpst); return float16_set_sign(float16_zero, float16_is_neg(f16)); } @@ -764,7 +764,7 @@ static float32 do_recpe_f32(float32 input, float_status= *fpst, bool rpres) } else { return float32_set_sign(float32_maxnorm, f32_sign); } - } else if (f32_exp >=3D 253 && fpst->flush_to_zero) { + } else if (f32_exp >=3D 253 && get_flush_to_zero(fpst)) { float_raise(float_flag_underflow, fpst); return float32_set_sign(float32_zero, float32_is_neg(f32)); } @@ -823,7 +823,7 @@ float64 HELPER(recpe_f64)(float64 input, float_status *= fpst) } else { return float64_set_sign(float64_maxnorm, f64_sign); } - } else if (f64_exp >=3D 2045 && fpst->flush_to_zero) { + } else if (f64_exp >=3D 2045 && get_flush_to_zero(fpst)) { float_raise(float_flag_underflow, fpst); return float64_set_sign(float64_zero, float64_is_neg(f64)); } diff --git a/tests/fp/fp-bench.c b/tests/fp/fp-bench.c index 2b6f66817e..ccc561b578 100644 --- a/tests/fp/fp-bench.c +++ b/tests/fp/fp-bench.c @@ -675,7 +675,7 @@ static void parse_args(int argc, char *argv[]) soft_status.flush_inputs_to_zero =3D 1; break; case 'Z': - soft_status.flush_to_zero =3D 1; + set_flush_to_zero(true, &soft_status); break; } } diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 1c726cb86e..9e823a3ee9 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -411,7 +411,7 @@ static void partsN(uncanon_normal)(FloatPartsN *p, floa= t_status *s, p->frac_lo &=3D ~round_mask; } fracN(shr)(p, frac_shift); - } else if (s->flush_to_zero && + } else if (get_flush_to_zero(s) && s->ftz_detection =3D=3D float_ftz_before_rounding) { flags |=3D float_flag_output_denormal_flushed; p->cls =3D float_class_zero; @@ -462,7 +462,7 @@ static void partsN(uncanon_normal)(FloatPartsN *p, floa= t_status *s, fracN(shr)(p, frac_shift); =20 if (is_tiny) { - if (s->flush_to_zero) { + if (get_flush_to_zero(s)) { assert(s->ftz_detection =3D=3D float_ftz_after_rounding); flags |=3D float_flag_output_denormal_flushed; p->cls =3D float_class_zero; --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474532; cv=none; d=zohomail.com; s=zohoarc; b=XvgCIW4BE3Tj+2LUTVb0CKfyLbYmHFqKcQgwHvOYTsl5JINsCQEh3G6JjS1oACvhBshJMSMP080GkRkkw6kNMzkVyNY8XlRccmWWmI9NPCUqIFC3xlIgdrPdTtJubiZUxvTfQQ2Q9XLuxW/I/zZPyOib/2bOXdnR1hd1J12iSEE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474532; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=5ZFTPhW7lBRWobOEojdZOQ5DeeuW/EtkwycnvXNWaFs=; b=Mk4anu4wIn8C0eIQOZx/mfbWJR6LWujSLs73vPCJmiYJTkS3UL1jaqDZv8YhaYhcusjh2jEX5+79Ds4WZKmBwDWxUUJ/yhKTGpKRLbL/BS4V00pKQYduaiLI+bxc3QX+YtB7X3EmnVH/wxBISn/ZY+Om2QfyF3feSSqJnVQ/aTo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17794745323281017.2382626492792; Fri, 22 May 2026 11:28:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUbB-0005H7-RN; Fri, 22 May 2026 14:27:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUb8-00058A-RF for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:50 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUb6-0005TK-QB for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:50 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-3695bf7d082so6930505a91.0 for ; Fri, 22 May 2026 11:27:48 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474467; x=1780079267; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5ZFTPhW7lBRWobOEojdZOQ5DeeuW/EtkwycnvXNWaFs=; b=YhuNDrjDIqtnefecb3nPQQBKdEjiqxnhoOrrfa1eyhv2/0h9NvLMvHYSCxBubI244Q O4KfDwaevHEUd34ZRkokg2pQEvBpcDCm2/aEDLHlvHlidVuLKdkH6NOlfJ3ImY2IbHUn E4V9BZYx1ROVK6KtP/WzcgizWN3q8KsA8LI517zEIRhVfr2Ohz1d5Bst3gQM21wWhu3B CYYnLfWGfQhSa4Xjv0myHqSbd4OE6CuV6Gfp8XQUsJhkIN1Vo38xDKA06SegNcEjhFtg 39rvaQl2NxogF6GR1FovGz1eSEIvssViLjW6SWsghbaripeGxpzKyX32NKWiv81C7ZbZ hbxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474467; x=1780079267; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=5ZFTPhW7lBRWobOEojdZOQ5DeeuW/EtkwycnvXNWaFs=; b=GzNeLL2FQvDZoBXQPmGH94PA+k6yWftJdJ6L19WZtXK81ryhXpFxlWNP0NNGH/jd98 s+NlId12YvqcPj3gWpXDV3XZmcAB0du82s78DlZ9ui0F1lxv1Oui6tDNoG+pnO7RJ8G8 tOWyNWiHFIU5mI4Qms0fmVkO4A4uCxo6lvHoYIVQUdu5xTxewDBn7Mt0YitQWMME/Sz8 Ibs5RWiKUasIjyuID8z9qFJCa80Z4OdDIkF+YU4b6vsp1KYBb2ZkRK5xlfZfZIH7mUES TNMyG2M/1gl8u1NyMrUz8btMF+exG+kdAQSedq1+8afneWL4RmpbpEhfs5or3x4MuZ5Q uKUg== X-Gm-Message-State: AOJu0YxZbyhWVaF5n72r2hixPNiHrr+2PtpuA754mZPN0NPFGKdCT6rO RFUGSxlA6nkrka+LIcZcs3tyLEfZd68CFQGa94jE4bq1BJBsKakg2Vdupup+RIh/Xkyqk6H2HrZ 9gyu0 X-Gm-Gg: Acq92OGciAeMdos+GPU5HRp/kyhy5E5TCOWq0FyMLz75wsNjKR6Puhrx+3Yr6Q5mNVl C5ate+Zr1u0VglSaXalPBG9S6uSpWJwZyR6rQpDZO42ew80++j93/hNQDBm14oTD5qItVQFPxUW mG5KMerZrQQ/AlaI+wB+jQN4DN8FmqQ5UGy2Wwq3riomjzRghMJqBrzV5UdyUoMV9V2bLj3w1z3 J9Rq11YMD+H4k/zjrUOxV4UBwpJKka1+rC3eVBwCZWnhIqy1vAUaC+FlUd1fUaM83IiN7WaNkVD ZVhZjLf4lIbCNpwRt8s1rqahkNSPxWe1d2SxHrLz8Hcxj5sp8stYb1ynx4GnvSLvXCM1ASfpmps BW4d+ahGtBLZrS1CGWuayQbqzuZ9IY9mgMBLUOtQnidmN//z9awLN3cbG8EZn1N7CQF+jWNezn7 xnVpZzLNNHsEtG0RRCYXUMhdJUE8bbuq9mJKPW+I8= X-Received: by 2002:a17:903:41cf:b0:2be:39bd:8dd8 with SMTP id d9443c01a7336-2beb063f20emr54145665ad.33.1779474467202; Fri, 22 May 2026 11:27:47 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 22/30] fpu: Use accessors for ftz_before_rounding Date: Fri, 22 May 2026 11:26:50 -0700 Message-ID: <20260522182658.184604-23-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474533983158500 Drop FloatFTZDetection and use #defines, like we do for tininess_before_rounding. Rename get_float_ftz_detection to get_ftz_before_rounding and move to softfloat.c, as there are no external users. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/fpu/softfloat-helpers.h | 10 ++-------- include/fpu/softfloat-types.h | 8 +++----- fpu/softfloat-parts.c.inc | 5 ++--- fpu/softfloat-specialize.c.inc | 5 +++++ 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/include/fpu/softfloat-helpers.h b/include/fpu/softfloat-helper= s.h index 395ce67abf..d36e3a24b1 100644 --- a/include/fpu/softfloat-helpers.h +++ b/include/fpu/softfloat-helpers.h @@ -116,10 +116,9 @@ static inline void set_flush_inputs_to_zero(bool val, = float_status *status) status->flush_inputs_to_zero =3D val; } =20 -static inline void set_float_ftz_detection(FloatFTZDetection d, - float_status *status) +static inline void set_float_ftz_detection(bool val, float_status *status) { - status->ftz_detection =3D d; + status->ftz_before_rounding =3D val; } =20 static inline void set_default_nan_mode(bool val, float_status *status) @@ -198,9 +197,4 @@ static inline FloatSNaNRule get_snan_rule(float_status = *status) return status->float_snan_rule; } =20 -static inline FloatFTZDetection get_float_ftz_detection(const float_status= *status) -{ - return status->ftz_detection; -} - #endif /* SOFTFLOAT_HELPERS_H */ diff --git a/include/fpu/softfloat-types.h b/include/fpu/softfloat-types.h index cf7093fa86..67b7f38aef 100644 --- a/include/fpu/softfloat-types.h +++ b/include/fpu/softfloat-types.h @@ -341,10 +341,8 @@ typedef enum __attribute__((__packed__)) { * configure it matches the default for tininess_before_rounding * (i.e. "after rounding"). */ -typedef enum __attribute__((__packed__)) { - float_ftz_after_rounding =3D 0, - float_ftz_before_rounding =3D 1, -} FloatFTZDetection; +#define float_ftz_after_rounding false +#define float_ftz_before_rounding true =20 /* * floatx80 is primarily used by x86 and m68k, and there are @@ -416,7 +414,7 @@ typedef struct float_status { /* should denormalised results go to zero and set output_denormal_flus= hed? */ bool flush_to_zero; /* do we detect and flush denormal results before or after rounding? */ - FloatFTZDetection ftz_detection; + bool ftz_before_rounding; /* should denormalised inputs go to zero and set input_denormal_flushe= d? */ bool flush_inputs_to_zero; bool default_nan_mode; diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 9e823a3ee9..0e5311b50f 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -411,8 +411,7 @@ static void partsN(uncanon_normal)(FloatPartsN *p, floa= t_status *s, p->frac_lo &=3D ~round_mask; } fracN(shr)(p, frac_shift); - } else if (get_flush_to_zero(s) && - s->ftz_detection =3D=3D float_ftz_before_rounding) { + } else if (get_flush_to_zero(s) && get_ftz_before_rounding(s)) { flags |=3D float_flag_output_denormal_flushed; p->cls =3D float_class_zero; exp =3D 0; @@ -463,7 +462,7 @@ static void partsN(uncanon_normal)(FloatPartsN *p, floa= t_status *s, =20 if (is_tiny) { if (get_flush_to_zero(s)) { - assert(s->ftz_detection =3D=3D float_ftz_after_rounding); + assert(!get_ftz_before_rounding(s)); flags |=3D float_flag_output_denormal_flushed; p->cls =3D float_class_zero; exp =3D 0; diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc index 0b62b0e907..bd6984282f 100644 --- a/fpu/softfloat-specialize.c.inc +++ b/fpu/softfloat-specialize.c.inc @@ -84,6 +84,11 @@ static inline bool get_tininess_before_rounding(const fl= oat_status *status) return status->tininess_before_rounding; } =20 +static inline bool get_ftz_before_rounding(const float_status *status) +{ + return status->ftz_before_rounding; +} + /*------------------------------------------------------------------------= ---- | For the deconstructed floating-point with fraction FRAC, return true | if the fraction represents a signalling NaN; otherwise false. --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474684; cv=none; d=zohomail.com; s=zohoarc; b=Pm2XJYmmFITZWGQKQh/EXiR8BNrqZbQVY5R0f5FWryQx0KCd5HO4P4i5Ve6dG5ySizDtb7n8CcMXIplvHmXTXaCxz/RaDb9IMvx7wveXj11t4dvTG1hGJ3fCcSBYR/RX3E46z+I9/5OdGHiBoKsmuudzOSc2S0uIW07vPJVx440= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474684; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=yciU7wfFxUZkhCl24mXhpsueynP3S6dxYuvKP7a/kAg=; b=lop/7Ht18GmD/9iXSR5uQWX2schztqc+z8g686dxCdXa/zHCTfY+ec/QOizcpYeoXX9JU2aXYoJtgm7jURDfZYlI9jsG9a2RR3gkWLqKsqkA3gMndG8ufqQaiSmmFYTTdrOtEf9mZ8Ts2807JMEmIHjThSuc73wZgnEn1lL6VcU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474684734976.6889743619153; Fri, 22 May 2026 11:31:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUbD-0005MJ-LY; Fri, 22 May 2026 14:27:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUb9-0005AB-PY for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:52 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUb7-0005Ta-MQ for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:51 -0400 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-2b788a98557so49127735ad.2 for ; Fri, 22 May 2026 11:27:49 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474468; x=1780079268; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yciU7wfFxUZkhCl24mXhpsueynP3S6dxYuvKP7a/kAg=; b=EQ9lOU1R5MrfhZ4qmV1l0kNc++iTwWSOk2h+bBr5tNmLtSZjInG6dEIHhm1arKWJvk HFMUCg8hIZ6a0UmfeLxrJVnHC5ADA+n0iqPIdtyPymu7oL05moeIay6a9c+AgSjnDz8m X3GamX/xSu5pO4cPUz3iQaN6yfucWjCtY2M7QW8DHcKvHAOPEf8rxJ5/G+Bni+3nkUuF tOq9tAkP647EqM3ydTC7LoaBh7Nx6kCNRKU1eoSJJcjFQlBC9v7YEraq/3MlrSxB9eDa cPNodDw+S4JNn1jxuLyl48y2GjrNFmdkiVEb2rmUXh01wO9ROvzlo4VrseQHJkaJTTbe 2Bgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474468; x=1780079268; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=yciU7wfFxUZkhCl24mXhpsueynP3S6dxYuvKP7a/kAg=; b=QpG/V7CpvlNJ5ky/gyUOgAYyf7wI+nX7Yh5meOXasgxvIv8iAO+bspGl8fEABOdj0k 9Ee4fAr7UolZGuqXcY3L0NVd26QqWx+MOhcc/kMpozG2Fv+nijMrSdZwYtBJCwFSFJTK m9hipDb230qOuMy2jxpWAAmnsv+cfAqpSd4b1inKy/T/KFpHB/ekA4Pc4P1M2nX4CSD+ DWppTsMEN3bOKygUisbDvgGc47kAdEUS0ijugu695NSHSBQ7uJtCaYHwHggtcSnJ8Gvu rhXnFa7z4nbsO4FJAhogHJ3gFIudrhiTVyz7pApmnF+41c+pTc/S/bgHPvcS+AB1OZrj um/A== X-Gm-Message-State: AOJu0YxzeMdYRt2hvEDcPE9yxBephmG+WIckje9h6kaVuvuaAe9klaWv YferK+NblGQ4Jm0yX8tq8x/DJnP4kl/xoFqfxz9fCnNlRD1TxgJL8JgMIdylP17X0o+d9RnpflV SclkE X-Gm-Gg: Acq92OFhmAEt8qy++ms4raiwrkzb7lH0X/fIP25On1FdGL+JFy0bNBEzczvHtSM5fZN /14hrcKOStZjBjg9Zbyu2b448eqh2R0GL6jrFaxbNS5KgcPP9tg8IucLX17ERfBvGFvn9bXGiyn KGX6RFV1Q+tjLbgI7wSyeMJWtfL6dqD9QwWNsYzZCuC961ihEZLayklr32yRZNgg7YeJEhwCMWB VPdZUhnsINVu+jjpICN/b+HaaGz9T80w3Y2UmhRmKRH8iCOuB0g4G3YzD6NKqfJ5cJcPa/8zmWw iku/SrgUWIy3HGwo0fiGi1xT1SzzOMspgK7mPQiEg0+VF+xLamcCMr2R//80MGiX1QmEG0ms2Y8 aLEfOpgJlDS7rW1q/rK30Ix6F7ZKOZXaRwzhpwkgaVWCV4j2bK6hZNgWcJ/buGdRFlV5B1OB0Lw S83oLs/ay4ELmW8ZnbsKz837WF90Ht X-Received: by 2002:a17:903:2b0e:b0:2bd:a403:4ab8 with SMTP id d9443c01a7336-2beb06319ffmr51605215ad.25.1779474468008; Fri, 22 May 2026 11:27:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 23/30] fpu: Use {get,set}_flush_inputs_to_zero everywhere Date: Fri, 22 May 2026 11:26:51 -0700 Message-ID: <20260522182658.184604-24-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62a; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474686802154100 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat.c | 14 +++++++------- target/alpha/fpu_helper.c | 2 +- target/alpha/helper.c | 3 ++- tests/fp/fp-bench.c | 2 +- fpu/softfloat-parts.c.inc | 2 +- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index dcae5b3be2..be6b02d866 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -141,7 +141,7 @@ GEN_INPUT_FLUSH__NOCHECK(float64_input_flush__nocheck, = float64) #define GEN_INPUT_FLUSH1(name, soft_t) \ static inline void name(soft_t *a, float_status *s) \ { \ - if (likely(!s->flush_inputs_to_zero)) { \ + if (likely(!get_flush_inputs_to_zero(s))) { \ return; \ } \ soft_t ## _input_flush__nocheck(a, s); \ @@ -154,7 +154,7 @@ GEN_INPUT_FLUSH1(float64_input_flush1, float64) #define GEN_INPUT_FLUSH2(name, soft_t) \ static inline void name(soft_t *a, soft_t *b, float_status *s) \ { \ - if (likely(!s->flush_inputs_to_zero)) { \ + if (likely(!get_flush_inputs_to_zero(s))) { \ return; \ } \ soft_t ## _input_flush__nocheck(a, s); \ @@ -168,7 +168,7 @@ GEN_INPUT_FLUSH2(float64_input_flush2, float64) #define GEN_INPUT_FLUSH3(name, soft_t) \ static inline void name(soft_t *a, soft_t *b, soft_t *c, float_status = *s) \ { \ - if (likely(!s->flush_inputs_to_zero)) { \ + if (likely(!get_flush_inputs_to_zero(s))) { \ return; \ } \ soft_t ## _input_flush__nocheck(a, s); \ @@ -4764,7 +4764,7 @@ static bool parts_squash_denormal(FloatParts64 p, flo= at_status *status) =20 float16 float16_squash_input_denormal(float16 a, float_status *status) { - if (status->flush_inputs_to_zero) { + if (get_flush_inputs_to_zero(status)) { FloatParts64 p =3D unpack_raw64(&float16_params, a); =20 if (parts_squash_denormal(p, status)) { @@ -4776,7 +4776,7 @@ float16 float16_squash_input_denormal(float16 a, floa= t_status *status) =20 float32 float32_squash_input_denormal(float32 a, float_status *status) { - if (status->flush_inputs_to_zero) { + if (get_flush_inputs_to_zero(status)) { FloatParts64 p =3D unpack_raw64(&float32_params, a); =20 if (parts_squash_denormal(p, status)) { @@ -4788,7 +4788,7 @@ float32 float32_squash_input_denormal(float32 a, floa= t_status *status) =20 float64 float64_squash_input_denormal(float64 a, float_status *status) { - if (status->flush_inputs_to_zero) { + if (get_flush_inputs_to_zero(status)) { FloatParts64 p =3D unpack_raw64(&float64_params, a); =20 if (parts_squash_denormal(p, status)) { @@ -4800,7 +4800,7 @@ float64 float64_squash_input_denormal(float64 a, floa= t_status *status) =20 bfloat16 bfloat16_squash_input_denormal(bfloat16 a, float_status *status) { - if (status->flush_inputs_to_zero) { + if (get_flush_inputs_to_zero(status)) { FloatParts64 p =3D unpack_raw64(&bfloat16_params, a); =20 if (parts_squash_denormal(p, status)) { diff --git a/target/alpha/fpu_helper.c b/target/alpha/fpu_helper.c index 0ced53c54e..5b7e4bd5eb 100644 --- a/target/alpha/fpu_helper.c +++ b/target/alpha/fpu_helper.c @@ -151,7 +151,7 @@ void helper_ieee_input_cmp(CPUAlphaState *env, uint64_t= val) void helper_ieee_input_s(CPUAlphaState *env, uint64_t val) { if (unlikely(2 * val - 1 < 0x1fffffffffffffull) - && !env->fp_status.flush_inputs_to_zero) { + && !get_flush_inputs_to_zero(&env->fp_status)) { arith_excp(env, GETPC(), EXC_M_INV | EXC_M_SWC, 0); } } diff --git a/target/alpha/helper.c b/target/alpha/helper.c index 33fed0c746..2abf07c191 100644 --- a/target/alpha/helper.c +++ b/target/alpha/helper.c @@ -24,6 +24,7 @@ #include "exec/page-protection.h" #include "exec/target_page.h" #include "fpu/softfloat-types.h" +#include "fpu/softfloat-helpers.h" #include "exec/helper-proto.h" #include "qemu/qemu-print.h" #include "system/memory.h" @@ -80,7 +81,7 @@ void cpu_alpha_store_fpcr(CPUAlphaState *env, uint64_t va= l) env->fpcr_exc_enable =3D ~t & FPCR_STATUS_MASK; =20 env->fpcr_dyn_round =3D rm_map[(fpcr & FPCR_DYN_MASK) >> FPCR_DYN_SHIF= T]; - env->fp_status.flush_inputs_to_zero =3D (fpcr & FPCR_DNZ) !=3D 0; + set_flush_inputs_to_zero(fpcr & FPCR_DNZ, &env->fp_status); =20 t =3D (fpcr & FPCR_UNFD) && (fpcr & FPCR_UNDZ); #ifdef CONFIG_USER_ONLY diff --git a/tests/fp/fp-bench.c b/tests/fp/fp-bench.c index ccc561b578..c53d6e4b34 100644 --- a/tests/fp/fp-bench.c +++ b/tests/fp/fp-bench.c @@ -672,7 +672,7 @@ static void parse_args(int argc, char *argv[]) tester =3D val; break; case 'z': - soft_status.flush_inputs_to_zero =3D 1; + set_flush_inputs_to_zero(true, &soft_status); break; case 'Z': set_flush_to_zero(true, &soft_status); diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 0e5311b50f..6a67e6af2c 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -218,7 +218,7 @@ static void partsN(canonicalize)(FloatPartsN *p, float_= status *status, if (unlikely(p->exp =3D=3D 0)) { if (likely(fracN(eqz)(p))) { p->cls =3D float_class_zero; - } else if (status->flush_inputs_to_zero) { + } else if (get_flush_inputs_to_zero(status)) { float_raise(float_flag_input_denormal_flushed, status); p->cls =3D float_class_zero; fracN(clear)(p); --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474494; cv=none; d=zohomail.com; s=zohoarc; b=W17aTmr7HHY7p9oknj/0VA+ifBR+VjIBnWPDz+EuXEW4EYm32uig6tROuG5c4pH6jhPYa8bOnIEYbTQQpbjYH05XPMaG67dPGz9tZE7kEEUuS3050gcXGo9eoIPkdlLiVqr9HmIJHksAGTrxjkOqw9hGvdtysdBxBMuy70BT470= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474494; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=vUC9cAbO+O9/DBX4sEI5SDbdyF9kYUZGrauZeyxTeRs=; b=eA45nRfdpjZYKU7xmTVHldcy6GEH8d2Pb5IcTVG0M8006HjODfcELz4axZPo/+1Ds0951F/pSbpGbUf97TYSf/2q9/Eh/UoKSqhsU6uN0HMs5ZWSjkbUyWO6qFDcPMvJ3RbePvMiVcTzbXlxjcv5Gq21o1FUYaKBCwAwUfcwSaY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177947449446168.82611629169378; Fri, 22 May 2026 11:28:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUbE-0005OX-Cn; Fri, 22 May 2026 14:27:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUbA-0005Cy-I7 for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:52 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUb8-0005UX-Io for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:52 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2b4650d5f5cso31744935ad.0 for ; Fri, 22 May 2026 11:27:50 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474469; x=1780079269; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vUC9cAbO+O9/DBX4sEI5SDbdyF9kYUZGrauZeyxTeRs=; b=S77U0SCEJ2Icc8VRJY85T76lzBBmNpKJzmRm4m0dQw7kd8gtnklbB57b1IRJTe0kgK /p2a7zh1ACKHIEJJlrLBsLJHw3VG4yHBftgOhcjONcRqL2c7pN04UZ1iZZdqu0GvVBJM y8iNOhxdn0xXK9wWs0QXTBXK7/cTGoYPIZGoKr1+UKNxthZFZXDFt1EcFjfj1Tn8iVKL wgTGlm7ejBkzrBUkjGa9dMiX0psA+Y6qic9/W0KayXNjPheG7UPrjnse2IZK4zZ0tamp tytLziOr79hWXziQdbOTmFs3TCOeCttn/qoVoXo8syvTxEUbKtjuiffrFS8tpnZ2jtnW MpQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474469; x=1780079269; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=vUC9cAbO+O9/DBX4sEI5SDbdyF9kYUZGrauZeyxTeRs=; b=EJrsvq8VMvAoSvSdGSWiunpGJWDnQB0VaimJz/S0EgSaJqZ8VoTZj1rphBVULw/XcG eS/0BjEMTIdBY4HYlPL2rWmmtQkuhr1wKlW8FcSJBrKJ09g9lB7Lq7ZqmsDvwZbdV/Px fsWmPriy/5rrg2+wtflD8X6i3cpckHY9/pNtR1td0LAv0f3n1vxIJqSPuiTrAaQUDnZA qObLwG9ShTd/QaM77IVDbw2v5wqKWCIgQNM08eeCQ5lfVK6BBuNa+mPmFsrUbZLq5AsD eh2SbNHM1F0UpV/xtPs9XYTWkBhEGySqUMVFbXIl3x3IzQY0cxjc9R8n7us/slpKhURL 6+LA== X-Gm-Message-State: AOJu0Yx1BQBTPgW1ZocoOA4MpDGVKrthrz+vzQCyNgrRQ3ulcyBrRSgz 9FEszI34gdVB40q6VjGKf3sqoCBjK91D6T5sYEnhjoWes0UWFpIjMaQ8dKqWwOSON6Ic28VnsKJ i26G/ X-Gm-Gg: Acq92OEp/gR3UZ0tW7POqVSTmiEwK5T2i0QBbw+0KdIC/WVpaymBO6gzMw6J4XBVNsM rsxHIAo5ROkWrYuu2lCefxf6s1yRYy65O/Nq+7RPKn+uiahSL7FzLIcotOGRTRvcCwZSVKPFBTs DkFhgUVuR+8KT2eR2twQS53Gj1P7dhld/xJ4mE3OyzLDQp+R4LePHnG/sF3ntLuo52/NRkJH82v JCk4dWQvZI5oLCAlFqp9KabnbYReRPG2VIbCy1bm3lCsKgyKzN8em5kvwK2YkIm2ikXRyxTozjg j3IudjTshaFCnLlRxRsj/2Wnmi4+n8eeXnrSsUJ7VuLiqLeRfESLT/YMrZ/4ilIrgH41y9tUdSh Kck5RuuFt5KNeQRuhTVrJvkv2T7+ce/siqKi8C8vfYPf4QfDXs6WCA7b35KVtzbYnxeMjCFJiCG 1KxZh8RQCsyTa9Xslx8K/uY390+MUu X-Received: by 2002:a17:903:28d:b0:2b9:f55e:1c1b with SMTP id d9443c01a7336-2beb036aa31mr48518835ad.5.1779474468739; Fri, 22 May 2026 11:27:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 24/30] fpu: Use get_default_nan_mode everywhere Date: Fri, 22 May 2026 11:26:52 -0700 Message-ID: <20260522182658.184604-25-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474495665158500 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- target/arm/tcg/helper-a64.c | 12 ++++++------ target/arm/tcg/vfp_helper.c | 24 ++++++++++++------------ target/m68k/softfloat.c | 2 +- fpu/softfloat-parts.c.inc | 8 ++++---- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/target/arm/tcg/helper-a64.c b/target/arm/tcg/helper-a64.c index dd1f9c6dc6..6505ee3c94 100644 --- a/target/arm/tcg/helper-a64.c +++ b/target/arm/tcg/helper-a64.c @@ -273,11 +273,11 @@ uint32_t HELPER(frecpx_f16)(uint32_t a, float_status = *fpst) float16 nan =3D a; if (float16_is_signaling_nan(a, fpst)) { float_raise(float_flag_invalid, fpst); - if (!fpst->default_nan_mode) { + if (!get_default_nan_mode(fpst)) { nan =3D float16_silence_nan(a, fpst); } } - if (fpst->default_nan_mode) { + if (get_default_nan_mode(fpst)) { nan =3D float16_default_nan(fpst); } return nan; @@ -305,11 +305,11 @@ float32 HELPER(frecpx_f32)(float32 a, float_status *f= pst) float32 nan =3D a; if (float32_is_signaling_nan(a, fpst)) { float_raise(float_flag_invalid, fpst); - if (!fpst->default_nan_mode) { + if (!get_default_nan_mode(fpst)) { nan =3D float32_silence_nan(a, fpst); } } - if (fpst->default_nan_mode) { + if (get_default_nan_mode(fpst)) { nan =3D float32_default_nan(fpst); } return nan; @@ -337,11 +337,11 @@ float64 HELPER(frecpx_f64)(float64 a, float_status *f= pst) float64 nan =3D a; if (float64_is_signaling_nan(a, fpst)) { float_raise(float_flag_invalid, fpst); - if (!fpst->default_nan_mode) { + if (!get_default_nan_mode(fpst)) { nan =3D float64_silence_nan(a, fpst); } } - if (fpst->default_nan_mode) { + if (get_default_nan_mode(fpst)) { nan =3D float64_default_nan(fpst); } return nan; diff --git a/target/arm/tcg/vfp_helper.c b/target/arm/tcg/vfp_helper.c index 495ce8a329..8d3f6e3a2e 100644 --- a/target/arm/tcg/vfp_helper.c +++ b/target/arm/tcg/vfp_helper.c @@ -690,11 +690,11 @@ uint32_t HELPER(recpe_f16)(uint32_t input, float_stat= us *fpst) float16 nan =3D f16; if (float16_is_signaling_nan(f16, fpst)) { float_raise(float_flag_invalid, fpst); - if (!fpst->default_nan_mode) { + if (!get_default_nan_mode(fpst)) { nan =3D float16_silence_nan(f16, fpst); } } - if (fpst->default_nan_mode) { + if (get_default_nan_mode(fpst)) { nan =3D float16_default_nan(fpst); } return nan; @@ -743,11 +743,11 @@ static float32 do_recpe_f32(float32 input, float_stat= us *fpst, bool rpres) float32 nan =3D f32; if (float32_is_signaling_nan(f32, fpst)) { float_raise(float_flag_invalid, fpst); - if (!fpst->default_nan_mode) { + if (!get_default_nan_mode(fpst)) { nan =3D float32_silence_nan(f32, fpst); } } - if (fpst->default_nan_mode) { + if (get_default_nan_mode(fpst)) { nan =3D float32_default_nan(fpst); } return nan; @@ -802,11 +802,11 @@ float64 HELPER(recpe_f64)(float64 input, float_status= *fpst) float64 nan =3D f64; if (float64_is_signaling_nan(f64, fpst)) { float_raise(float_flag_invalid, fpst); - if (!fpst->default_nan_mode) { + if (!get_default_nan_mode(fpst)) { nan =3D float64_silence_nan(f64, fpst); } } - if (fpst->default_nan_mode) { + if (get_default_nan_mode(fpst)) { nan =3D float64_default_nan(fpst); } return nan; @@ -945,11 +945,11 @@ uint32_t HELPER(rsqrte_f16)(uint32_t input, float_sta= tus *s) float16 nan =3D f16; if (float16_is_signaling_nan(f16, s)) { float_raise(float_flag_invalid, s); - if (!s->default_nan_mode) { + if (!get_default_nan_mode(s)) { nan =3D float16_silence_nan(f16, s); } } - if (s->default_nan_mode) { + if (get_default_nan_mode(s)) { nan =3D float16_default_nan(s); } return nan; @@ -994,11 +994,11 @@ static float32 do_rsqrte_f32(float32 input, float_sta= tus *s, bool rpres) float32 nan =3D f32; if (float32_is_signaling_nan(f32, s)) { float_raise(float_flag_invalid, s); - if (!s->default_nan_mode) { + if (!get_default_nan_mode(s)) { nan =3D float32_silence_nan(f32, s); } } - if (s->default_nan_mode) { + if (get_default_nan_mode(s)) { nan =3D float32_default_nan(s); } return nan; @@ -1056,11 +1056,11 @@ float64 HELPER(rsqrte_f64)(float64 input, float_sta= tus *s) float64 nan =3D f64; if (float64_is_signaling_nan(f64, s)) { float_raise(float_flag_invalid, s); - if (!s->default_nan_mode) { + if (!get_default_nan_mode(s)) { nan =3D float64_silence_nan(f64, s); } } - if (s->default_nan_mode) { + if (get_default_nan_mode(s)) { nan =3D float64_default_nan(s); } return nan; diff --git a/target/m68k/softfloat.c b/target/m68k/softfloat.c index f5d683bcc5..99c2dcbe8c 100644 --- a/target/m68k/softfloat.c +++ b/target/m68k/softfloat.c @@ -35,7 +35,7 @@ static floatx80 propagateFloatx80NaNOneArg(floatx80 a, fl= oat_status *status) a =3D floatx80_silence_nan(a, status); } =20 - if (status->default_nan_mode) { + if (get_default_nan_mode(status)) { return floatx80_default_nan(status); } =20 diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 6a67e6af2c..bef47a932d 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -20,14 +20,14 @@ FloatPartsN partsN(return_nan)(const FloatPartsN *a, fl= oat_status *s) switch (a->cls) { case float_class_snan: float_raise(float_flag_invalid | float_flag_invalid_snan, s); - if (s->default_nan_mode) { + if (get_default_nan_mode(s)) { return partsN(default_nan)(s); } else { return partsN(silence_nan)(a, s); } break; case float_class_qnan: - if (s->default_nan_mode) { + if (get_default_nan_mode(s)) { return partsN(default_nan)(s); } break; @@ -49,7 +49,7 @@ FloatPartsN partsN(pick_nan)(const FloatPartsN *a, const = FloatPartsN *b, have_snan =3D true; } =20 - if (s->default_nan_mode) { + if (get_default_nan_mode(s)) { return partsN(default_nan)(s); } =20 @@ -134,7 +134,7 @@ static FloatPartsN partsN(pick_nan_muladd)(const FloatP= artsN *a, float_raise(float_flag_invalid | float_flag_invalid_imz, s); } =20 - if (s->default_nan_mode) { + if (get_default_nan_mode(s)) { /* * We guarantee not to require the target to tell us how to * pick a NaN if we're always returning the default NaN. --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474719; cv=none; d=zohomail.com; s=zohoarc; b=KhX9ySye0XM1ffg2VyjGsJGg/qAe8YuDugoctsfDZNuYU5l9l4NQIRtxgbeNHQnfxMkJkx6bm5KD8hnWebaFAcyvVYv1LXOpnU/GS9p6veKDP1AND6XJvq7VH4rWoT3Z/vkuz+1X1tORUMvegRjlVOj+ybG9LkGY302VcD/x7Cg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474719; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2Y9B6zT/mx2Mvzh7dN19S7ANCk8vGCeBaMnJS1JCxZ8=; b=FOjJdCTin4AIwQnbit7/IWIYNxdamccc8lkcVzARjqhQuAZRb9Ywwoj9wRlsBIKty8V0ftDWQhIn8ZYzp2EtNY9HFSrLy1NwLersTjeCSalVE9V7ko/PEzowjac+GBNojVIpTRJjLofSXPM4FiFpZNGyLJFGYPOnMPYeWM2FSr8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474719200602.6747548853896; Fri, 22 May 2026 11:31:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUbD-0005Lw-C7; Fri, 22 May 2026 14:27:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUbB-0005GY-Ks for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:53 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUb9-0005Z1-Na for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:53 -0400 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-3664df32e91so8570877a91.3 for ; Fri, 22 May 2026 11:27:51 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474470; x=1780079270; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2Y9B6zT/mx2Mvzh7dN19S7ANCk8vGCeBaMnJS1JCxZ8=; b=m+vMJOJT2Asc6SoSMKkHPpuJC03Xy0REv0oxYpuxppvP7sNbJclwaAmSGz/Cw2tHpf 3RIxKGNTHQoqP3Edi8d+ZAgtf6negmOwN5k8S97/EeHvcU4UEE3v26for08RbukKrOwp t/yQqpyIkxxo5Bxim7N2HpBj1KTjNL/8/aokXWdfUex672XZj0skVOz8zRjBJSlf5mt7 pAPe0Xa/M2dAv/DUkV+NwtL1HkzTL2g/Z0+BocfDbf0vl2YaMuNDTvUDb/pUmmlM7Ksl xCYiapOr2miS7Oy091+n3yi6SO3Z08r6PHNXLCprRdnbjyqUJzTVSqBnmu1HLVDLa/HK Huqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474470; x=1780079270; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=2Y9B6zT/mx2Mvzh7dN19S7ANCk8vGCeBaMnJS1JCxZ8=; b=SS1P+oozTF2UQgD4gdfSgJHz2PWaU/aM/S/2KL+ccmp/rdqDHMB3gPMMSz/qhxZP1p qTpmiuc+xU6PpTLky9nU0kUhxfzz54RzMHBjh6+vyV7jt7AHgOxFpwsGoM0GpOvg2KOc 0ObGpgjZ+wYMaiS1NFoCcPeE7uOjebmbccbm8rtJPGSKa7qfI7PZP9wGIIt5Ni2ogxqh hZdsBynPUOm1lzlLJ0LsNm8R6SHCsm0tB4qOetu7fSeNJPZHU1dc1ZYM5/JMcqxy8pI7 SySo1et2AAgz4Z+0vvPsIj5wcJUkH0as21fTiHzknmmnrktugw9psftanb5mFapcLYj1 EOOg== X-Gm-Message-State: AOJu0YzRAtBh0JVFALgudzRmemD9AXHKqeAFMrGcDpKGF9vl5+c7hoKP GpGfJ7QQchTW6XywUi8gUjNMbCbE//UHgVYrBtsBpRDEBfWjNJ+Q9kdm0Ky3r2Z9zn1yi11eD6h cqjc5 X-Gm-Gg: Acq92OETNh9cfEcuyVdI2OAJlG5swB5ryVC6QBb8nvrFmQnSkI8YzPJUdVsPSsJRGOa +xeRFkwwPddzw7Bt4ZUtWivcXGCPGGXnEffFgCu8S0bD2RYibRweTs+pQWrfQeN+Wjr9MzYEEBA goWiwwJAVHQY1AVLyJZCTewvkFnBMHf4sph+dEiqVL+X04uUiIKhA4U54kUydw5JVYq0mzXCROd q+fPDdLJQiMLmkL+VjeOEIdP8D9UvsOWfADWV0Y/h4c7kx2u55Iz5pM+0xRGfphXi4FKxIWAzQw YzCZfDPL01lYTe5kel3KsLpPmL/RbPJ2OySwOCu9mv02bZ5yOeqV8M/06sDgXFReYkXz5a7Vb/D EVOGKZL+sy1uMJEuoETP5yoTohsYiPbpPFg6q89CSxRkIBNiPKezcbPnVkMhp6+cDDaCEHG1bd8 2hpuyJQZGLWdfW9LksoChZBqzdB1Ki X-Received: by 2002:a17:903:2f06:b0:2bd:8dbb:293e with SMTP id d9443c01a7336-2beb0687bf1mr56368345ad.14.1779474470113; Fri, 22 May 2026 11:27:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 25/30] fpu: Use get_float_default_nan_pattern in partsN_default_nan Date: Fri, 22 May 2026 11:26:53 -0700 Message-ID: <20260522182658.184604-26-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1029; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1029.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474721304154100 Move get_float_default_nan_pattern to softfloat-specialize.c.inc, since there are no external users. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/fpu/softfloat-helpers.h | 5 ----- fpu/softfloat-specialize.c.inc | 7 ++++++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/fpu/softfloat-helpers.h b/include/fpu/softfloat-helper= s.h index d36e3a24b1..49e04ffee9 100644 --- a/include/fpu/softfloat-helpers.h +++ b/include/fpu/softfloat-helpers.h @@ -172,11 +172,6 @@ get_float_infzeronan_rule(const float_status *status) return status->float_infzeronan_rule; } =20 -static inline uint8_t get_float_default_nan_pattern(const float_status *st= atus) -{ - return status->default_nan_pattern; -} - static inline bool get_flush_to_zero(const float_status *status) { return status->flush_to_zero; diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc index bd6984282f..c1ed661f5e 100644 --- a/fpu/softfloat-specialize.c.inc +++ b/fpu/softfloat-specialize.c.inc @@ -89,6 +89,11 @@ static inline bool get_ftz_before_rounding(const float_s= tatus *status) return status->ftz_before_rounding; } =20 +static inline uint8_t get_float_default_nan_pattern(const float_status *st= atus) +{ + return status->default_nan_pattern; +} + /*------------------------------------------------------------------------= ---- | For the deconstructed floating-point with fraction FRAC, return true | if the fraction represents a signalling NaN; otherwise false. @@ -121,7 +126,7 @@ FloatParts64 parts64_default_nan(float_status *status) { bool sign =3D 0; uint64_t frac; - uint8_t dnan_pattern =3D status->default_nan_pattern; + uint8_t dnan_pattern =3D get_float_default_nan_pattern(status); =20 assert(dnan_pattern !=3D 0); =20 --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474580; cv=none; d=zohomail.com; s=zohoarc; b=FD5zBHYYAFIGq+qFJHWZD9ahNrgtKPyzIxl6WecGxhIkHuetH7r5VusC7CVqSL2ly0CKRs6pFImUDz1BKr2lP2WGj6R3Om1Frroddg6IMPNUpeewFjx0E3jVtYACzsgRzPyz9NcUtlOGMcyHT26M9XK063JKKb7fAueJEz40XWs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474580; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rdCiAeyqDTXuK52kfIqalebuIdHOX+3Sh4uzHDXmhFg=; b=GvHEmLYG1LLLWQLUYAMb4jD4cPcDIUTD+JwCRaxw5knjVKoxU10zlOc6s0X9AqDyBCgQ5UjjYAj5jEDRa66tYeBlDVr7LFemJuf7DMlHPYNjv2TR3D3CQMWy92sq0mStylElYJsco1uoag+4YuHQsKt067ZJVpZ506ALVG9rwgE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474580912799.5106845447176; Fri, 22 May 2026 11:29:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUbE-0005Qi-TL; Fri, 22 May 2026 14:27:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUbC-0005Hy-Ab for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:54 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUbA-0005ae-Gw for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:54 -0400 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-2bea7176c72so17029805ad.0 for ; Fri, 22 May 2026 11:27:52 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474471; x=1780079271; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rdCiAeyqDTXuK52kfIqalebuIdHOX+3Sh4uzHDXmhFg=; b=MY3AtajjYlnjgFvLg9y5Th7It0llw2zF0fEcHtdYkulH6GrloYWJSoSh0HONwNdXrq q8iDe92qg7K+vZXzW68s6lBEDJukvS53oyECcA50bnfMOlbpI9FcXB/JBoAjxjBxgWrm dLKZsGP8G8PZHMCZDmf3FGtGllzOr3Ael+dOANg752JVvIbRrE5ijlBEQPdxenu+QR7G FQ0P/awYq9GSBuNSqNs7on2ojjjZO578ESBYfmXDkVJuQb4kAArwq1xkM1QuNFvoujt3 l1Qk0Zr83DP6ehlZgaxJAmWYcpoAlSvXQxvhxGuA1l72JiaEgHalJT+YtJSipDwNKkQI QZ4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474471; x=1780079271; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=rdCiAeyqDTXuK52kfIqalebuIdHOX+3Sh4uzHDXmhFg=; b=WALSvEI1/cO3zOxyyiX3dtgQ2VPK1P8Mx4kfzwLu4O+zIBeOCzryweEiJ+w6usIxfm /zRxGmJyvMmYZ9QH6Nq/dM7z9V4fwNbXwniDP+t2yafv9pOlJO4r1MApv98MXFh1Mgu6 1ZVwc2walJSfAU2h8ep9m9JV2+jBYpzyaFmTaGNLE+Avlv+iK80nyKFgzmqPjP+ZJH3l JUSul2H0kSzu6PfHvuEmYOuHFePVRFibhKq0K7IKiiRYT10dCGn8OxI6qcDoz9RmmNPw 1DDmw3D0u2O1F0vg3AQKZs2L03A+CQPzdtmKMirZkQKkUm/amUMDXdrdowLCp1S5HKLN y61Q== X-Gm-Message-State: AOJu0YzEG/BkvXHlVziSuxGVLWL/NKcAqsoNKEZzmHYz1UEfL/03DTtw cLm+y3WS2cDPg+0jaboL7h4CxhayG7XinKbefpDuskx2mA1N8aDsbVEbL28UeFtmGDukrHScC0G aBIh9 X-Gm-Gg: Acq92OG/KYceN0SkhhQeVxfpJZewdmClB8UxBbAT3fmEEB2LXBRwaaPADQpK1qkh4Ft khu3b5mltKFaS8zKbMnKkWpf5yEfsZ6uoYRqANzyb52Rwo0raCEGRVI4CNDu+Owb4UdAClNq5am QVDU/a1dkM15jhz25lLU1ZejGam+lNhDRPVGHfaVxCjrLNZwiAhK3XD1yIoBS4WKaVDdFYwk4vJ Iq5hSE2DS9f2RJCjePwa7425o/llC9c1sSHineqc1FgU1s8FbKU9Hq6Ls6zdUACXTuTNuRcZm54 8EWP8FXTj2A1TaqdEmxmsKfSetyCUftJ7DvtpBjN31oaLeR2b6JeKn0GFO/AH9qRWKdHnSeLLae 7lrBAHjiUQFLouNLPry81iX0mWAgy3liufaxpFbKtRBPZXi3fx9yDC/Wi/dRwEnEzrVfc7X45ns SkZlbt8mBDy+fkgIIOesE38B4lZEFbXN5b6jw9HsY= X-Received: by 2002:a17:903:2bcc:b0:2bc:b80f:677e with SMTP id d9443c01a7336-2beb069970bmr49630525ad.25.1779474471005; Fri, 22 May 2026 11:27:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 26/30] fpu: Add accessors for rebias_{underflow,overflow} Date: Fri, 22 May 2026 11:26:54 -0700 Message-ID: <20260522182658.184604-27-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x634.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474583194154100 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/fpu/softfloat-helpers.h | 10 ++++++++++ target/ppc/cpu.c | 4 ++-- fpu/softfloat-parts.c.inc | 4 ++-- fpu/softfloat-specialize.c.inc | 10 ++++++++++ 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/include/fpu/softfloat-helpers.h b/include/fpu/softfloat-helper= s.h index 49e04ffee9..4791a7fc87 100644 --- a/include/fpu/softfloat-helpers.h +++ b/include/fpu/softfloat-helpers.h @@ -131,6 +131,16 @@ static inline void set_snan_rule(FloatSNaNRule val, fl= oat_status *status) status->float_snan_rule =3D val; } =20 +static inline void set_float_rebias_overflow(bool val, float_status *statu= s) +{ + status->rebias_overflow =3D val; +} + +static inline void set_float_rebias_underflow(bool val, float_status *stat= us) +{ + status->rebias_underflow =3D val; +} + static inline FloatRoundMode get_float_rounding_mode(const float_status *s= tatus) { return status->float_rounding_mode; diff --git a/target/ppc/cpu.c b/target/ppc/cpu.c index 4d8faaddee..41edb18643 100644 --- a/target/ppc/cpu.c +++ b/target/ppc/cpu.c @@ -248,8 +248,8 @@ void ppc_store_fpscr(CPUPPCState *env, target_ulong val) val |=3D FP_FEX; } env->fpscr =3D val; - env->fp_status.rebias_overflow =3D (FP_OE & env->fpscr) ? true : fals= e; - env->fp_status.rebias_underflow =3D (FP_UE & env->fpscr) ? true : fals= e; + set_float_rebias_overflow(FP_OE & env->fpscr, &env->fp_status); + set_float_rebias_underflow(FP_UE & env->fpscr, &env->fp_status); if (tcg_enabled()) { fpscr_set_rounding_mode(env); } diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index bef47a932d..184614ea47 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -358,7 +358,7 @@ static void partsN(uncanon_normal)(FloatPartsN *p, floa= t_status *s, switch (fmt->exp_max_kind) { case float_expmax_ieee: flags |=3D float_flag_overflow; - if (s->rebias_overflow) { + if (get_float_rebias_overflow(s)) { exp -=3D fmt->exp_re_bias; } else if (overflow_norm) { flags |=3D float_flag_inexact; @@ -398,7 +398,7 @@ static void partsN(uncanon_normal)(FloatPartsN *p, floa= t_status *s, } } fracN(shr)(p, frac_shift); - } else if (unlikely(s->rebias_underflow)) { + } else if (unlikely(get_float_rebias_underflow(s))) { flags |=3D float_flag_underflow; exp +=3D fmt->exp_re_bias; if (p->frac_lo & round_mask) { diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc index c1ed661f5e..b97c971ae6 100644 --- a/fpu/softfloat-specialize.c.inc +++ b/fpu/softfloat-specialize.c.inc @@ -94,6 +94,16 @@ static inline uint8_t get_float_default_nan_pattern(cons= t float_status *status) return status->default_nan_pattern; } =20 +static inline bool get_float_rebias_overflow(const float_status *status) +{ + return status->rebias_overflow; +} + +static inline bool get_float_rebias_underflow(const float_status *status) +{ + return status->rebias_underflow; +} + /*------------------------------------------------------------------------= ---- | For the deconstructed floating-point with fraction FRAC, return true | if the fraction represents a signalling NaN; otherwise false. --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474646; cv=none; d=zohomail.com; s=zohoarc; b=oJrU6TddT13q462PfH/TPWHOn5hVkbD5HshJ0ZrY6yuTLeS+CyiTBW3FNU8Np6WsYBPzbZZWh2HgmFKIKj9+BF8bmbfLSWnXhQDz+W1EIqr6ZzDYtPUH9k1/LkKj2lQvZM8MYSe+y0FLszxYtYgdyHBmKlCRDTHl7fIxGhmZ7Jw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474646; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=cZFFZPDMpbzdsj37a9/p1FZxebig9+4EbrHozdK8lKs=; b=guAuDFbU/4Sk1rX8jEiLrAhBgFSTGIC/BQ5h/lbUCBRf4p49MjV6CJ4FCRg+xOH6kC2Oar1ac3cKgYbG3OFXj+yIKsS2efesQN3+Nlf9A79y9y5mHCgzliaCNzDTqzgc7IuEwXpWQfAU//u6uLAMvfZPyzgMyN+VcsKurzIriaE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474646319547.4935802463982; Fri, 22 May 2026 11:30:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUbG-0005We-EU; Fri, 22 May 2026 14:27:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUbD-0005M0-DY for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:55 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUbB-0005bg-Gd for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:54 -0400 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-2b788a98557so49128275ad.2 for ; Fri, 22 May 2026 11:27:53 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474472; x=1780079272; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cZFFZPDMpbzdsj37a9/p1FZxebig9+4EbrHozdK8lKs=; b=hMxgQxAIZOcyLcR5sH1NVa0U1g64Xyxu6D4YSdrgvz6HIKku+cAPcWYmOiJ+/aKY/o ihYkU3wxjcPrWS701KdmV/aCqfGY+rmnLlw1H56EEHVnyaJld+D/VUf3dDtty72UdlC0 tMfbGwuTIffeere+VWs0+nKzk/ZMK2GeYGs9Xdy2juxZeehHibdYFaygEpwExzF61IJd eCyRmlluNSATSsn5YB6Au7F+aSKB/f9DfxMvHBG7xALKZI/1NwWyF1v1V3hY14Y49KCn cTbEKnMU0RmLQvi0QgBccaF1Cc9wasTfkMTZYIpt10CJYKuQ5pe9Cbrs5jwBtLzRKCHA YcLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474472; x=1780079272; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=cZFFZPDMpbzdsj37a9/p1FZxebig9+4EbrHozdK8lKs=; b=ZYCMgDZN8KuVKqtD3kmkNfOTigrdVsi8QN3XoapXnICQKH+9Jd6s1OpXuhBib51Syd RZ2ykOyJx/kEKFg9moPOoXz6GmUk/eKARkulnE40UPBGAM5KqoT5MKrrBlcXVE32qkvk vrHBS+WAMg69GaFJS0HlObg0xXs3cp1/rVIt3KDvt22CSxn2a468M9fSh+CyqLoHD+Rb lb6nqsvWteGRKNf39cRhu14QQsN0i5v6SJAPhxXy/93MgS+MGKaAwoD3eux3CW4ZkhMb voRRX3SXvLDRRoZ6m06JvBSawpPjBHqhvnifNTPQW6n1hyI4R9tpXaxiTG5GJyOKV03o cxzQ== X-Gm-Message-State: AOJu0YxEK6Oc2j8HISNJDbGcq0Zb9d5Dn05fGukKt6AadGDImS6jtXze j6Ki46hBgNvcOgn1Z0MbEk+r/dQcNSMQeuuEgRD2wOTY8zv/EereSh6e5bJ4UqfSVer2Wf5qVGi Ft6TP X-Gm-Gg: Acq92OFHsWiNpotQW2r5PXS5Q1abtJdtmIZ4jQ0YommlOcsjvA346vsJIyp41y86m/p lPWzFoIr8qHjQ1Gv3qtN7GMVwxZMexgJh1ZccgB3e7V/1Lq+sMPjOD5HrOXvFxcdMkI+vpZr5xb ReiQ2k+47ftP9aecGWNAf5cS4SMS3ZHjaRQAX631BfWLvuqwAQ74x2WA+4Uhldku9lBYdiwMaOY 1SPRmWN03u5VBFtGTtIPGL2Uy5myi0ScedfnsHJ+ae0Ho3YUEUTqGxa8HtbEAOh+PEJ74/8f+WV hZQJxXgPPoR+t04yZTktnYPQFSixNd4Qc6GNRntk1MX7BEgL/cAwmzIepRgIyU49tbX4EZWhpcJ /xK9B9ad+/E/zeySUOPlPK4Fp+bpyzXMZNArKdh26yCZiZNn9bXnXAoKWB+AWukpXR2TO49DvBK 1IT9MRtFMjTxngaAWGww9huN2bND6X X-Received: by 2002:a17:903:2bce:b0:2b7:a1ff:b239 with SMTP id d9443c01a7336-2beb0599ca0mr50716135ad.14.1779474471964; Fri, 22 May 2026 11:27:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 27/30] fpu: Reorg float_status Date: Fri, 22 May 2026 11:26:55 -0700 Message-ID: <20260522182658.184604-28-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x634.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474648312154100 Use bitfields to compress float_status from 18 bytes down to 8 bytes. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/fpu/softfloat-types.h | 53 ++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/include/fpu/softfloat-types.h b/include/fpu/softfloat-types.h index 67b7f38aef..c5a6684763 100644 --- a/include/fpu/softfloat-types.h +++ b/include/fpu/softfloat-types.h @@ -327,7 +327,7 @@ typedef enum __attribute__((__packed__)) { * This is a flag which can be ORed in with any of the above * DNaN behaviour options. */ - float_infzeronan_suppress_invalid =3D (1 << 7), + float_infzeronan_suppress_invalid =3D (1 << 2), } FloatInfZeroNaNRule; =20 /* @@ -402,22 +402,39 @@ typedef enum __attribute__((__packed__)) { */ =20 typedef struct float_status { - FloatExceptionFlags float_exception_flags; - FloatRoundMode float_rounding_mode; - FloatX80RoundPrec floatx80_rounding_precision; - FloatX80Behaviour floatx80_behaviour; - Float2NaNPropRule float_2nan_prop_rule; - Float3NaNPropRule float_3nan_prop_rule; - FloatInfZeroNaNRule float_infzeronan_rule; - FloatSNaNRule float_snan_rule; - bool tininess_before_rounding; + FloatExceptionFlags float_exception_flags : 16; + + /* + * Floating point status controls. + * Items that, in general, may be updated by writes to an architectural + * floating point control register. + */ + FloatRoundMode float_rounding_mode : 3; + FloatX80RoundPrec floatx80_rounding_precision : 2; /* should denormalised results go to zero and set output_denormal_flus= hed? */ - bool flush_to_zero; - /* do we detect and flush denormal results before or after rounding? */ - bool ftz_before_rounding; + bool flush_to_zero : 1; /* should denormalised inputs go to zero and set input_denormal_flushe= d? */ - bool flush_inputs_to_zero; - bool default_nan_mode; + bool flush_inputs_to_zero : 1; + /* should default nans be produced instead of propagating an input nan= ? */ + bool default_nan_mode : 1; + /* should overflowed results subtract re_bias to its exponent? */ + bool rebias_overflow : 1; + /* should underflowed results add re_bias to its exponent? */ + bool rebias_underflow : 1; + + /* + * Floating point behaviour controls. + * Items that, in general, will be set at cpu realization because + * the behaviour is baked into the specific hardware implementation. + */ + bool tininess_before_rounding : 1; + /* do we detect and flush denormal results before or after rounding? */ + bool ftz_before_rounding : 1; + FloatSNaNRule float_snan_rule : 2; + Float2NaNPropRule float_2nan_prop_rule : 3; + Float3NaNPropRule float_3nan_prop_rule : 7; + FloatInfZeroNaNRule float_infzeronan_rule: 3; + FloatX80Behaviour floatx80_behaviour : 5; /* * The pattern to use for the default NaN. Here the high bit specifies * the default NaN's sign bit, and bits 6..0 specify the high bits of = the @@ -427,11 +444,7 @@ typedef struct float_status { * this to the correct non-zero value, or we will assert when trying to * create a default NaN. */ - uint8_t default_nan_pattern; - /* should overflowed results subtract re_bias to its exponent? */ - bool rebias_overflow; - /* should underflowed results add re_bias to its exponent? */ - bool rebias_underflow; + unsigned default_nan_pattern : 8; } float_status; =20 #endif /* SOFTFLOAT_TYPES_H */ --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474742; cv=none; d=zohomail.com; s=zohoarc; b=gB0wngp9pca0yl4fOMrNHBW9b0okK1Ub1FAl5Baf31NEosfYDpsgu3MrLX6BY5xSrbZNKXQCaN4pCEvawEHW3ynqBVEVEWuZC6bkCyZsmcOy1dVcTjV19iHUeT34GTOulktV1LxK/zJwaSRy1X4yiFaTaS/DPp92RxBafnvtIzE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474742; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=NAL0NWt9fknjtElvJKYUD//qbRuUXv5dAUd78LHy/Wg=; b=YOmWeYD4HQw23pEw8l0iMiI2dqfoT1w9Hg7pWjl0NcyREPoFOVEx1pM5XktSg3k0zndJGjun7y73e5V7QAB12aDEbGRAyxKwEThJM/ZZTyNXPGi2xLmdX6TWAjtgcFJV2MkOszHsgs9F2fzMWHQ+28T3dnX9bR/n9BFi2TL8dQM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474742283772.7958588465086; Fri, 22 May 2026 11:32:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUbH-0005YE-0i; Fri, 22 May 2026 14:27:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUbD-0005NQ-Vc for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:56 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUbC-0005cG-5T for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:55 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2ba6485d219so58752415ad.3 for ; Fri, 22 May 2026 11:27:53 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474473; x=1780079273; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NAL0NWt9fknjtElvJKYUD//qbRuUXv5dAUd78LHy/Wg=; b=rJa6X6PV869hyEgtpC2ZtJKHLVtuGBajUGHRG69tAD9/ziyr2iXgLr6fGSH05KOBKd d0spzZ8AVroNrQI9kyxPckQ11uheOjOJU9JEZrEs+BVGNmHpc0nKsV2kejQTQL1MfK/5 hZMxDXm39rwyPccUJ4zlFJ8uzGCj/+Tklaqb6+ihwfViOlxJ5i9AbYNxY7iy1aN4SaLC LCJum1Xc6j58nwlc8I+kZoDE2Pw8laJJNnJ0/K75zMqXXI9tD8cJZAnrA8htmg2DuMHC CvqEaf9VgMaFrXFeEgxSbl00YJODkfEEAbIGQMqQp44BV2363Eg4wWs9EFI4oQMe1k30 TzLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474473; x=1780079273; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=NAL0NWt9fknjtElvJKYUD//qbRuUXv5dAUd78LHy/Wg=; b=KKUF+nnf/8CYURRYWVl+v/2ORcW7creSibZst8snZ5JmbC9tYTHp7Nc9x3o/vauEVP D++uVytmWPbAbCVHSegR4CO1PC+byNGl4OU6YPr12cjTmdTrAxu7XtBWEiLXjQEzL+2k pu1jsBTS5f19NHtIOhzfjuhsFOfM4q8FM8EyDosCz/CV4+iXenSWMt/ilpP70QoY4Avc 9mDg4sHVcYENKXn+dcVTdkTuSKi3jT1QScZeLkj8SWQ1NMlLP8buuwuW12sso0xy472R bSd0eCy6OsAs7zr7jeZGFaqbhg/4YFBkK8uIznmDi9CEPxHXFWfNu2jus2czLLSVPcug i97A== X-Gm-Message-State: AOJu0YxLYS+dllUs8uyZhznyjvvufNbJWGxlqlxxwrTB1DJ1mVRAp9dw tVLXle0x6Crfm9xuFcKIf80XnClkovt2TQ6nG/ntqzYArWsKB73UZ+wEw7T9cFMsM+RxSm1lrhd M4CTA X-Gm-Gg: Acq92OE8LLm6Kf6zb33w1zo4z8eJ5gz8lRHxA1XMtrU7KzYQOuMBYUCyaxTmEISaC70 UymtIzpN6b/Q/oOngU0xGJU1mHqYXT5GfJ8x5eHEqfGXmgXNXS5kAexIQLmdk3jwXqltfPLygZD VvutsgjhYncOJcNlvNyNoPi07utCKDnvRTKWf9/sn3fPqDn8ORv9aMd0fRjz6Y1AffMrx6S7ia9 vnLuhsU8uzyXyaHVhRPKDLPHQaodmjkAKE89ji0JZxx46PKQ8woLNTE5Lh7BOFGV752nTLgkew/ mMDWOZBIFtASpqMWqBkMjXKMZLdFdMrrE2nAwd9L1TuFOGettzFKEX2Mm88BdkBGOOwIhvcoEQp KpcdIumKuBHkekIFr8juQ+qAceHQYcqCfqH8I3B+SPMli6DQDp7z2TvPZsSAUddU1fnfpRokrN5 FsmcxVxYh2DLjmMmP67FMyrPgGQATOJZPWcAvt6OM= X-Received: by 2002:a17:902:e745:b0:2b2:4cd2:e16c with SMTP id d9443c01a7336-2beb05e413emr49999405ad.20.1779474472704; Fri, 22 May 2026 11:27:52 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PULL 28/30] fpu: Introduce float_status.e4m3_nan_is_snan Date: Fri, 22 May 2026 11:26:56 -0700 Message-ID: <20260522182658.184604-29-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474743676154100 Content-Type: text/plain; charset="utf-8" Introduce a separate control from float_snan_rule that applies only to the OCP E4M3 format. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- include/fpu/softfloat-helpers.h | 5 +++++ include/fpu/softfloat-types.h | 5 +++++ fpu/softfloat-parts.c.inc | 2 +- fpu/softfloat-specialize.c.inc | 5 +++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/fpu/softfloat-helpers.h b/include/fpu/softfloat-helper= s.h index 4791a7fc87..8df0273132 100644 --- a/include/fpu/softfloat-helpers.h +++ b/include/fpu/softfloat-helpers.h @@ -131,6 +131,11 @@ static inline void set_snan_rule(FloatSNaNRule val, fl= oat_status *status) status->float_snan_rule =3D val; } =20 +static inline void set_float_e4m3_nan_is_snan(bool val, float_status *stat= us) +{ + status->e4m3_nan_is_snan =3D val; +} + static inline void set_float_rebias_overflow(bool val, float_status *statu= s) { status->rebias_overflow =3D val; diff --git a/include/fpu/softfloat-types.h b/include/fpu/softfloat-types.h index c5a6684763..d7f5303a6b 100644 --- a/include/fpu/softfloat-types.h +++ b/include/fpu/softfloat-types.h @@ -431,6 +431,11 @@ typedef struct float_status { /* do we detect and flush denormal results before or after rounding? */ bool ftz_before_rounding : 1; FloatSNaNRule float_snan_rule : 2; + /* + * Overriding float_snan_rule, is the single NaN representation for + * the OCP E4M3 format an SNaN or QNaN? + */ + bool e4m3_nan_is_snan : 1; Float2NaNPropRule float_2nan_prop_rule : 3; Float3NaNPropRule float_3nan_prop_rule : 7; FloatInfZeroNaNRule float_infzeronan_rule: 3; diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 184614ea47..559e40d196 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -246,7 +246,7 @@ static void partsN(canonicalize)(FloatPartsN *p, float_= status *status, case float_expmax_e4m3: if (p->frac_hi =3D=3D 0b111) { fracN(shl)(p, fmt->frac_shift); - p->cls =3D (parts_is_snan_frac(p->frac_hi, status) + p->cls =3D (get_float_e4m3_nan_is_snan(status) ? float_class_snan : float_class_qnan); return; } diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc index b97c971ae6..8b765ef623 100644 --- a/fpu/softfloat-specialize.c.inc +++ b/fpu/softfloat-specialize.c.inc @@ -104,6 +104,11 @@ static inline bool get_float_rebias_underflow(const fl= oat_status *status) return status->rebias_underflow; } =20 +static inline bool get_float_e4m3_nan_is_snan(const float_status *status) +{ + return status->e4m3_nan_is_snan; +} + /*------------------------------------------------------------------------= ---- | For the deconstructed floating-point with fraction FRAC, return true | if the fraction represents a signalling NaN; otherwise false. --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474580; cv=none; d=zohomail.com; s=zohoarc; b=SwheCZrlSmITYZya8oOP7eyj+ujQR1xJ/7NrwjoYBS2BFU3OSOaf9hfrNKPSKD98bf7fdImRUda9aRPRdKA23AUHzd0NqrjHBXndBnQbJxhqKo1Syck6EuYLn5vStBSx08mm7UOiVnZGe4Lzp4RhiI6xjCjT5qS3BJxyJUUCSEI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474580; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3vaXGPhPcEspPib85CstdsUrhGWg1HWPTQKD0EVWs1c=; b=CsYqaKQOeseCc2G0HWCFetJH0DMPa9XHBd7yTv7PK1ZGXP83oxJKZ98VEqDZ69I3/MeaB3wJn3qKFVem7z2vpll3pYhW4TDK0mumq/0ze7ezOI4svePW98lkedVLmaXttA9F2ssaSW+T/OV7uFNcMikLhu7+0pHdKqc9742G4DI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474580403457.1120501458996; Fri, 22 May 2026 11:29:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUbK-0005g9-KR; Fri, 22 May 2026 14:28:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUbF-0005RH-1K for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:57 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUbD-0005d3-FH for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:56 -0400 Received: by mail-pg1-x529.google.com with SMTP id 41be03b00d2f7-c7b9f54d3deso6468987a12.1 for ; Fri, 22 May 2026 11:27:55 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474474; x=1780079274; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3vaXGPhPcEspPib85CstdsUrhGWg1HWPTQKD0EVWs1c=; b=JLFXCla46BU2wgUIVZ/CGFGk240NhEMF4GsXAI4Egb/a8mG30PsnuHhLJlRv9ituUw kieIuKazaQCdT+QMfYjh5p8a/ViyEs3oAWe035DykQcMIlhbx59wxTPkNBp//xLohZ6a +z69C5Jjhz2lfhXTJbc36gxZC14wMJKlQ5D6yElySQskEF+7fiYJp+0zn1AmUGsHTVSu XzSU8/SvGBl8aQX/6wfJ3UARvGSk1RHnPnpQKUIVlREbYAPd2jOku4nYHetY0L13DIqM 4Odm/DOLnF+DWyJ7b0Sw5gflhydGHoOwiubEqcxrUuXZAyZn8xVMLH8r3KkEG3K1E5mz fGzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474474; x=1780079274; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=3vaXGPhPcEspPib85CstdsUrhGWg1HWPTQKD0EVWs1c=; b=kKArtzggHGGXZd3Ow68mT/s0O3YHyysCMrKe3fyWg6+v4tS7+rdlaBfMN3pSNhiO02 1JwZcfMRPurLKYAqwL4v+pTf16ga4x11YAP+WZa1kXDs4rb5qz/bAU1JEIRuNM5EoC+i wicTo/BldF/w9UgVjg/MOozB9NVLHzcLys0Hb2UXf3jQw5vo4W7+c9fSkFmMItiuwm5a u+bflWHvGXJ/ttfZNjkD+Rpkpv+2nzPVst03t207n+I9evlUMhTCzexQIMgLj1HpjLSV f4J2npUFPxPaUnob7la8i3VNfdow9AfI3SiYzJbj1vebCluBCQRSPj2kO7w70e2VKJns XLTg== X-Gm-Message-State: AOJu0YxIOt/Q1D+3IXblvMDfBDwpA5mcAI7ddEB7pyX9pvFthHbtpKXe 4J4Dp+eBVRJKA311+8NtNWoDIrWrX+m3Dfgp7b8N90+t92eXUccNkhA/XpdaXhTOSmDhC1Jm7/P al33N X-Gm-Gg: Acq92OGTZWlESNbcvXl8ODmzeE95kak24scrlfc6I7Ojyb90iwhAsTPdxkZdW0VO18F fDpmb83Lkyn3x8Aq7NfA2ghFsFJmwWZTvN+ffQoydlWvRea4mGe2pag74aupBI6dlq9F/iLRF/2 G8gT5CJo8yAVxGHA9IrbKQ0HyztXM6ja0kdr8oqJXiiiOGpTjeiolUGVH9Smr7gJ5nf5QXfVpLc TdFNVB1nHycum+ZiTkQAYZ1T6XLpLSq0ZQ31rO878bLT+fAcqInXtMRP7A1CxBYAnR8A47ZuVdE qDO0egs8FzBtObYIYjoKisnAUuffqDOkrbFendYWJAtyxRBxoxqQPf+NuR3B+fZQMn0G5oKkGBS j+TLV9B4TFd0NgciNI2bi2ulZ9TcMrM6BcbzdJP4NjNE1hejUteNoETqd6Hv+ptPghSdlKL/2jQ H22S/uToVGiwPYODiYz6JsueAQeyO/49rI9GCh+z0= X-Received: by 2002:a17:903:24c:b0:2b9:fb0b:b727 with SMTP id d9443c01a7336-2beb0675f69mr49210005ad.39.1779474473592; Fri, 22 May 2026 11:27:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Peter Maydell Subject: [PULL 29/30] fpu: Fix NaN encoding for E4M3 in parts64_uncanon Date: Fri, 22 May 2026 11:26:57 -0700 Message-ID: <20260522182658.184604-30-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474581151154100 Content-Type: text/plain; charset="utf-8" There is only one NaN fractional encoding for E4M3. Retain the incoming sign, but force the outgoing fraction to the unique value. Reported-by: Peter Maydell Signed-off-by: Richard Henderson --- fpu/softfloat.c | 2 ++ fpu/softfloat-parts.c.inc | 28 ++++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index be6b02d866..2c3bf01213 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -499,6 +499,8 @@ const FloatFmt float8_e4m3_params =3D { =20 /* 110 << frac_shift, with the implicit bit set */ #define E4M3_NORMAL_FRAC_MAX 0xe000000000000000ull +/* 111 << frac_shift, no implicit bit */ +#define E4M3_NAN_FRAC 0x7000000000000000ull =20 const FloatFmt float8_e5m2_params =3D { FLOAT_PARAMS(5, 2) diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 559e40d196..d0064f5d22 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -278,11 +278,16 @@ static void partsN(uncanon_e4m3_overflow)(FloatPartsN= *p, float_status *s, const FloatFmt *fmt, bool satura= te) { assert(N =3D=3D 64); + p->exp =3D fmt->exp_max; if (saturate) { - p->exp =3D fmt->exp_max; p->frac_hi =3D E4M3_NORMAL_FRAC_MAX; } else { - *p =3D partsN(default_nan)(s); + /* + * The class isn't actually used after this point in uncanon, + * but for clarity while debugging, don't leave it set to normal. + */ + p->cls =3D float_class_qnan; + p->frac_hi =3D E4M3_NAN_FRAC; } } =20 @@ -507,9 +512,24 @@ static void partsN(uncanon)(FloatPartsN *p, float_stat= us *s, return; case float_class_qnan: case float_class_snan: - assert(fmt->exp_max_kind !=3D float_expmax_normal); p->exp =3D fmt->exp_max; - fracN(shr)(p, fmt->frac_shift); + switch (fmt->exp_max_kind) { + case float_expmax_e4m3: + /* + * There is only one NaN encoding for E4M3, and with a + * conversion from another format, the input NaN fraction + * may not apply. + */ + assert(N =3D=3D 64); + p->frac_hi =3D E4M3_NAN_FRAC; + /* fall through */ + case float_expmax_ieee: + fracN(shr)(p, fmt->frac_shift); + break; + case float_expmax_normal: + default: + g_assert_not_reached(); + } return; default: break; --=20 2.43.0 From nobody Sat May 30 17:45:18 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1779474617; cv=none; d=zohomail.com; s=zohoarc; b=gwNai1W5Ud5Bh0dm3lyjR8n/jYzUJHjFvxeNfD7MeMozDTScSh+/o8CrWlPk7o+4Yf8Ps09r5/K+OH0jjVOoxjsaUgk2l4/C/kyi9dwcQTndDvnq1bIGNMhOPZgWf9iOovfEUJMg2LQjM3UCWbQh3vyToTWfFFONdauzKubQV/0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779474617; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=QjgecQOKIFquxYcNCBsqhcMsA2llHQcUX4f1yL+tqyM=; b=d9BmJYuZG7rSZoP2pB9OOESyQYsN2uzXAmquM5hTtxumIy8F/4SGwgyt1+NeeZQsPDVTq223vWoInHHwpYfmOc+J1YPnKmOKq+aZ2tuzmdMbslJ5EYWbAA75WXFofz3uOXADsNgU+T+w1L2ArpeIyRHt5nVCcQIkgbL0TVfQfEs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779474617102547.6913001436907; Fri, 22 May 2026 11:30:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wQUbK-0005fZ-K7; Fri, 22 May 2026 14:28:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wQUbG-0005XY-NH for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:58 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wQUbE-0005dG-96 for qemu-devel@nongnu.org; Fri, 22 May 2026 14:27:58 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2b941cd869cso50145065ad.1 for ; Fri, 22 May 2026 11:27:55 -0700 (PDT) Received: from stoup.. ([50.78.183.177]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5900b8bsm21824735ad.76.2026.05.22.11.27.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 11:27:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779474475; x=1780079275; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QjgecQOKIFquxYcNCBsqhcMsA2llHQcUX4f1yL+tqyM=; b=KFKf08OSRmOetB+fN1niuWKhlXjOQ9K+vy1t4yezbkd7ItfgJRX9VTzikyGLFiN8GG O75QZ90B0pmHyL1rLTQbjHfpK5ptnQPV7A8fgtNrjsGQkmS8vWOK627oIx6g/42sq298 9+X4FFcLcngp3Kh8V2WUyglWeSarZryv1atjD1vpX1Z6E3+HOVGHDb/J/lXj1eGdSci/ w2RQa+wh8nya3aT9sN4tYAaKUKv19ZXVHlUMBv211HZjUHbr++6xy7pU8zj1//+ss3Ha ZXWBeRdM7grUtrqa7bKrzNhI/78Z3Up2QG0qTId0ZkfX+1+Iyyrt5MbdJF+WPpvP7kuP p9eQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779474475; x=1780079275; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=QjgecQOKIFquxYcNCBsqhcMsA2llHQcUX4f1yL+tqyM=; b=LcKGZ02LhP6zPWJ9NUrM1ndi3yy2z3FH8KyaRSmotkwKBoHOlND194cTYOyT5K1Tb3 kKdxiX9R5jV37+hrsGLf3bJgtwV+Ahxzj3zo/qmkHZJgWYJaGJ9O1fL8NTG4zOkQ7uWs ZXewpWEomZBSo0mpUZ1yw4j6p2l5wuwQ2ao63nXHJ5f4wnScOJzjL8OwkvlVzRfJpeVz e2V3Gfcyrc2I9+VlKcpblixWKgS5YvMhW+wbhzQT6Mqdoda9lEbncwLWMyjaID7f0Bp2 ToegGeu8fFdvgPOxJ2duv9FkV7j245niE9a7uGD9gyu/A2WsxZITidGoLCsjE3W84ThS 83PA== X-Gm-Message-State: AOJu0YxzF6LRVegf8CZupxtjL496W2+zAU74Kx40Zw/z/dT7nl2S9TMF VPMC1CqfGsNODApnHAe4FJUk82S/BTOJc3pCL/VM1CO52zhWtKApEvkzTw6fVmdi6DLJi/n7xPV PTkkN X-Gm-Gg: Acq92OF6tUU3SAi7v6Yl609yI4oSWSNlFDapLDCkHf0/mlZE9BXQX8x0yH7U9Kr98Wq +vvv0k7s0NqSbnwA3MqbpTsQxyP6WAEhi1Bv0jPu7yNJ0j27L7mg/Y+1tSwSPB6Ooa3odQ9ZW/h sSjKnmmm//xsmeWaWcPY0pE5EkPBdzK8ZL68PdUjwB+OjbKuzPYSe3f6M7SgXEqkJT91HKJnyNV 9OVpPMPP4BQgUtikjEIrUOHd4y4OmbnxNLJ438/5ZnK8pko7ITjRaxmVs6McDcgt3Y/dW2Y+s42 IGp86/NHbshf5PrgXFGKvjBADsmlBXHnCQIFXIxguIpd+skDHewPrTWD4EihgUcjDpl50x9UrJg 9BC3c7mkI10PviQid9bse1DMe0Gx63P0oA4cM96FnUZn+yXbe9lH/h+V2w9eGBVBLMuEb9emlZ4 IcWyBixL4ypg7LbjtaVCCVXrHoTEwc X-Received: by 2002:a17:903:15c7:b0:2bd:8938:b811 with SMTP id d9443c01a7336-2beb0700897mr55834775ad.34.1779474474528; Fri, 22 May 2026 11:27:54 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 30/30] fpu: Export floatN_minmax Date: Fri, 22 May 2026 11:26:58 -0700 Message-ID: <20260522182658.184604-31-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260522182658.184604-1-richard.henderson@linaro.org> References: <20260522182658.184604-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x631.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1779474618394158500 Allow target access to routines using the minmax flags. Make the existing min/max wrappers inline. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/fpu/softfloat.h | 93 ++++++++++++++++++++++----------------- fpu/softfloat.c | 50 +++------------------ fpu/softfloat-parts.c.inc | 8 ++-- 3 files changed, 62 insertions(+), 89 deletions(-) diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h index e08d1c374d..d48fc6b043 100644 --- a/include/fpu/softfloat.h +++ b/include/fpu/softfloat.h @@ -132,6 +132,25 @@ enum { float_muladd_suppress_add_product_zero =3D 8, }; =20 +/*------------------------------------------------------------------------= ---- +| Options to indicate which negations to perform in float*_minmax() +*-------------------------------------------------------------------------= ---*/ + +/* Flags for parts_minmax. */ +enum { + /* Set for minimum; clear for maximum. */ + float_minmax_ismin =3D 1, + /* Set for the IEEE 754-2008 minNum() and maxNum() operations. */ + float_minmax_isnum =3D 2, + /* Set for the IEEE 754-2008 minNumMag() and minNumMag() operations. */ + float_minmax_ismag =3D 4, + /* + * Set for the IEEE 754-2019 minimumNumber() and maximumNumber() + * operations. + */ + float_minmax_isnumber =3D 8, +}; + /*------------------------------------------------------------------------= ---- | Software IEC/IEEE integer-to-floating-point conversion routines. *-------------------------------------------------------------------------= ---*/ @@ -258,14 +277,7 @@ float16 float16_muladd_scalbn(float16, float16, float1= 6, int, int, float_status *status); float16 float16_div(float16, float16, float_status *status); float16 float16_scalbn(float16, int, float_status *status); -float16 float16_min(float16, float16, float_status *status); -float16 float16_max(float16, float16, float_status *status); -float16 float16_minnum(float16, float16, float_status *status); -float16 float16_maxnum(float16, float16, float_status *status); -float16 float16_minnummag(float16, float16, float_status *status); -float16 float16_maxnummag(float16, float16, float_status *status); -float16 float16_minimum_number(float16, float16, float_status *status); -float16 float16_maximum_number(float16, float16, float_status *status); +float16 float16_minmax(float16, float16, float_status *status, int flags); float16 float16_sqrt(float16, float_status *status); FloatRelation float16_compare(float16, float16, float_status *status); FloatRelation float16_compare_quiet(float16, float16, float_status *status= ); @@ -451,14 +463,7 @@ bfloat16 bfloat16_div(bfloat16, bfloat16, float_status= *status); bfloat16 bfloat16_muladd(bfloat16, bfloat16, bfloat16, int, float_status *status); float16 bfloat16_scalbn(bfloat16, int, float_status *status); -bfloat16 bfloat16_min(bfloat16, bfloat16, float_status *status); -bfloat16 bfloat16_max(bfloat16, bfloat16, float_status *status); -bfloat16 bfloat16_minnum(bfloat16, bfloat16, float_status *status); -bfloat16 bfloat16_maxnum(bfloat16, bfloat16, float_status *status); -bfloat16 bfloat16_minnummag(bfloat16, bfloat16, float_status *status); -bfloat16 bfloat16_maxnummag(bfloat16, bfloat16, float_status *status); -bfloat16 bfloat16_minimum_number(bfloat16, bfloat16, float_status *status); -bfloat16 bfloat16_maximum_number(bfloat16, bfloat16, float_status *status); +bfloat16 bfloat16_minmax(bfloat16, bfloat16, float_status *status, int fla= gs); bfloat16 bfloat16_sqrt(bfloat16, float_status *status); FloatRelation bfloat16_compare(bfloat16, bfloat16, float_status *status); FloatRelation bfloat16_compare_quiet(bfloat16, bfloat16, float_status *sta= tus); @@ -622,14 +627,7 @@ float32 float32_exp2(float32, float_status *status); float32 float32_log2(float32, float_status *status); FloatRelation float32_compare(float32, float32, float_status *status); FloatRelation float32_compare_quiet(float32, float32, float_status *status= ); -float32 float32_min(float32, float32, float_status *status); -float32 float32_max(float32, float32, float_status *status); -float32 float32_minnum(float32, float32, float_status *status); -float32 float32_maxnum(float32, float32, float_status *status); -float32 float32_minnummag(float32, float32, float_status *status); -float32 float32_maxnummag(float32, float32, float_status *status); -float32 float32_minimum_number(float32, float32, float_status *status); -float32 float32_maximum_number(float32, float32, float_status *status); +float32 float32_minmax(float32, float32, float_status *status, int flags); bool float32_is_quiet_nan(float32, float_status *status); bool float32_is_signaling_nan(float32, float_status *status); float32 float32_silence_nan(float32, float_status *status); @@ -818,14 +816,7 @@ float64 float64_sqrt(float64, float_status *status); float64 float64_log2(float64, float_status *status); FloatRelation float64_compare(float64, float64, float_status *status); FloatRelation float64_compare_quiet(float64, float64, float_status *status= ); -float64 float64_min(float64, float64, float_status *status); -float64 float64_max(float64, float64, float_status *status); -float64 float64_minnum(float64, float64, float_status *status); -float64 float64_maxnum(float64, float64, float_status *status); -float64 float64_minnummag(float64, float64, float_status *status); -float64 float64_maxnummag(float64, float64, float_status *status); -float64 float64_minimum_number(float64, float64, float_status *status); -float64 float64_maximum_number(float64, float64, float_status *status); +float64 float64_minmax(float64, float64, float_status *status, int flags); bool float64_is_quiet_nan(float64 a, float_status *status); bool float64_is_signaling_nan(float64, float_status *status); float64 float64_silence_nan(float64, float_status *status); @@ -1279,14 +1270,7 @@ float128 float128_rem(float128, float128, float_stat= us *status); float128 float128_sqrt(float128, float_status *status); FloatRelation float128_compare(float128, float128, float_status *status); FloatRelation float128_compare_quiet(float128, float128, float_status *sta= tus); -float128 float128_min(float128, float128, float_status *status); -float128 float128_max(float128, float128, float_status *status); -float128 float128_minnum(float128, float128, float_status *status); -float128 float128_maxnum(float128, float128, float_status *status); -float128 float128_minnummag(float128, float128, float_status *status); -float128 float128_maxnummag(float128, float128, float_status *status); -float128 float128_minimum_number(float128, float128, float_status *status); -float128 float128_maximum_number(float128, float128, float_status *status); +float128 float128_minmax(float128, float128, float_status *status, int fla= gs); bool float128_is_quiet_nan(float128, float_status *status); bool float128_is_signaling_nan(float128, float_status *status); float128 float128_silence_nan(float128, float_status *status); @@ -1388,4 +1372,33 @@ static inline bool float128_unordered_quiet(float128= a, float128 b, *-------------------------------------------------------------------------= ---*/ float128 float128_default_nan(float_status *status); =20 +/*------------------------------------------------------------------------= ---- +| Minumum and maximum functions. +*-------------------------------------------------------------------------= ---*/ + +#define MINMAX_1(type, name, flags) \ + static inline type type##_##name(type a, type b, float_status *s) \ + { return type##_minmax(a, b, s, flags); } + +#define MINMAX_2(type) \ + MINMAX_1(type, max, 0) \ + MINMAX_1(type, maxnum, float_minmax_isnum) \ + MINMAX_1(type, maxnummag, float_minmax_isnum | float_minmax_ismag) \ + MINMAX_1(type, maximum_number, float_minmax_isnumber) \ + MINMAX_1(type, min, float_minmax_ismin) \ + MINMAX_1(type, minnum, float_minmax_ismin | float_minmax_isnum) \ + MINMAX_1(type, minnummag, \ + float_minmax_ismin | float_minmax_isnum | float_minmax_ismag)= \ + MINMAX_1(type, minimum_number, \ + float_minmax_ismin | float_minmax_isnumber) + +MINMAX_2(float16) +MINMAX_2(bfloat16) +MINMAX_2(float32) +MINMAX_2(float64) +MINMAX_2(float128) + +#undef MINMAX_1 +#undef MINMAX_2 + #endif /* SOFTFLOAT_H */ diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 2c3bf01213..bc244a44ff 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -397,21 +397,6 @@ float64_gen2(float64 xa, float64 xb, float_status *s, return soft(ua.s, ub.s, s); } =20 -/* Flags for parts_minmax. */ -enum { - /* Set for minimum; clear for maximum. */ - minmax_ismin =3D 1, - /* Set for the IEEE 754-2008 minNum() and maxNum() operations. */ - minmax_isnum =3D 2, - /* Set for the IEEE 754-2008 minNumMag() and minNumMag() operations. */ - minmax_ismag =3D 4, - /* - * Set for the IEEE 754-2019 minimumNumber() and maximumNumber() - * operations. - */ - minmax_isnumber =3D 8, -}; - /* Simple helpers for checking if, or what kind of, NaN we have */ static inline __attribute__((unused)) bool is_nan(FloatClass c) { @@ -4076,7 +4061,7 @@ float128 uint128_to_float128(Int128 a, float_status *= status) * Minimum and maximum */ =20 -static float16 float16_minmax(float16 a, float16 b, float_status *s, int f= lags) +float16 float16_minmax(float16 a, float16 b, float_status *s, int flags) { FloatParts64 pa =3D float16_unpack_canonical(a, s); FloatParts64 pb =3D float16_unpack_canonical(b, s); @@ -4085,8 +4070,7 @@ static float16 float16_minmax(float16 a, float16 b, f= loat_status *s, int flags) return float16_round_pack_canonical(pr, s); } =20 -static bfloat16 bfloat16_minmax(bfloat16 a, bfloat16 b, - float_status *s, int flags) +bfloat16 bfloat16_minmax(bfloat16 a, bfloat16 b, float_status *s, int flag= s) { FloatParts64 pa =3D bfloat16_unpack_canonical(a, s); FloatParts64 pb =3D bfloat16_unpack_canonical(b, s); @@ -4095,7 +4079,7 @@ static bfloat16 bfloat16_minmax(bfloat16 a, bfloat16 = b, return bfloat16_round_pack_canonical(pr, s); } =20 -static float32 float32_minmax(float32 a, float32 b, float_status *s, int f= lags) +float32 float32_minmax(float32 a, float32 b, float_status *s, int flags) { FloatParts64 pa =3D float32_unpack_canonical(a, s); FloatParts64 pb =3D float32_unpack_canonical(b, s); @@ -4104,7 +4088,7 @@ static float32 float32_minmax(float32 a, float32 b, f= loat_status *s, int flags) return float32_round_pack_canonical(pr, s); } =20 -static float64 float64_minmax(float64 a, float64 b, float_status *s, int f= lags) +float64 float64_minmax(float64 a, float64 b, float_status *s, int flags) { FloatParts64 pa =3D float64_unpack_canonical(a, s); FloatParts64 pb =3D float64_unpack_canonical(b, s); @@ -4113,8 +4097,7 @@ static float64 float64_minmax(float64 a, float64 b, f= loat_status *s, int flags) return float64_round_pack_canonical(pr, s); } =20 -static float128 float128_minmax(float128 a, float128 b, - float_status *s, int flags) +float128 float128_minmax(float128 a, float128 b, float_status *s, int flag= s) { FloatParts128 pa =3D float128_unpack_canonical(a, s); FloatParts128 pb =3D float128_unpack_canonical(b, s); @@ -4123,29 +4106,6 @@ static float128 float128_minmax(float128 a, float128= b, return float128_round_pack_canonical(pr, s); } =20 -#define MINMAX_1(type, name, flags) \ - type type##_##name(type a, type b, float_status *s) \ - { return type##_minmax(a, b, s, flags); } - -#define MINMAX_2(type) \ - MINMAX_1(type, max, 0) \ - MINMAX_1(type, maxnum, minmax_isnum) \ - MINMAX_1(type, maxnummag, minmax_isnum | minmax_ismag) \ - MINMAX_1(type, maximum_number, minmax_isnumber) \ - MINMAX_1(type, min, minmax_ismin) \ - MINMAX_1(type, minnum, minmax_ismin | minmax_isnum) \ - MINMAX_1(type, minnummag, minmax_ismin | minmax_isnum | minmax_ismag) \ - MINMAX_1(type, minimum_number, minmax_ismin | minmax_isnumber) \ - -MINMAX_2(float16) -MINMAX_2(bfloat16) -MINMAX_2(float32) -MINMAX_2(float64) -MINMAX_2(float128) - -#undef MINMAX_1 -#undef MINMAX_2 - /* * Floating point compare */ diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index d0064f5d22..a154faf32b 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -1469,7 +1469,7 @@ static FloatPartsN *partsN(minmax)(FloatPartsN *a, Fl= oatPartsN *b, * if one operand is a QNaN, and the other * operand is numerical, then return numerical argument. */ - if ((flags & (minmax_isnum | minmax_isnumber)) + if ((flags & (float_minmax_isnum | float_minmax_isnumber)) && !(ab_mask & float_cmask_snan) && (ab_mask & ~float_cmask_qnan)) { record_denormals_used(ab_mask, s); @@ -1487,7 +1487,7 @@ static FloatPartsN *partsN(minmax)(FloatPartsN *a, Fl= oatPartsN *b, * but unless both operands are NaNs, * the SNaN is otherwise ignored and not converted to a QNaN. */ - if ((flags & minmax_isnumber) + if ((flags & float_minmax_isnumber) && (ab_mask & float_cmask_snan) && (ab_mask & ~float_cmask_anynan)) { float_raise(float_flag_invalid, s); @@ -1542,7 +1542,7 @@ static FloatPartsN *partsN(minmax)(FloatPartsN *a, Fl= oatPartsN *b, * Take the sign into account. * For ismag, only do this if the magnitudes are equal. */ - if (!(flags & minmax_ismag) || cmp =3D=3D 0) { + if (!(flags & float_minmax_ismag) || cmp =3D=3D 0) { if (a->sign !=3D b->sign) { /* For differing signs, the negative operand is less. */ cmp =3D a->sign ? -1 : 1; @@ -1552,7 +1552,7 @@ static FloatPartsN *partsN(minmax)(FloatPartsN *a, Fl= oatPartsN *b, } } =20 - if (flags & minmax_ismin) { + if (flags & float_minmax_ismin) { cmp =3D -cmp; } return cmp < 0 ? b : a; --=20 2.43.0