From nobody Mon May 25 14:38:44 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=1779297747; cv=none; d=zohomail.com; s=zohoarc; b=bNO/SdRbZEq5AORR0V0zmKBVgA3KfjDYKZh33Kt1WCs1XCLUdGZWJTOO+uo4cP3zldRmGlD0O/N1kyumg/NxnsbaPfFKV4v739ckn8yiK+5j6+N99WuYaHn89bPzr0u0CgoTaLhD2snWACVJfRHNwXloImFBx7TPlr2roFTt2uw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297747; 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=kAFkVeMAr9yNnSwDJRXyut7RU2UHaRQdDSgFEK/grHmjK8GnIlTkjjo+ag4PaReeKse7o1XepGz7mBtgxFk70Ihy5gUS5DxsjW7dSHLBkNMUSaR9gqaoqYq9Cr+PShUiKPsSmlBo2OfieA63j7oo3e5040Fe4PY2zYMoZubbwfE= 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 1779297747547552.4777933610286; Wed, 20 May 2026 10:22:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZ2-0001Mm-F8; Wed, 20 May 2026 13:18:36 -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 1wPkYs-0001J9-Pl for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:26 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkYq-0001sM-AU for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:25 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-36a35e4eefeso421933a91.1 for ; Wed, 20 May 2026 10:18:23 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297503; x=1779902303; 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=guMiDFAhSnBL1Vc+fN+1Xd0BXDtknzQRzxOxoMl/H4Yp6Bd76RcfRvbZl/dlGsgWUY gi75IQQjwekxsI2Zp2LWqWFh5PN6iBcSlZnRiLmfzsuc85iQJUThTp6yUeW41L9EloYD 8ZdrVH+oSSkAngAFiCGs9ZVB1B8MRQSDsdn6lBcg7DVg9fX+okltSJrb92DDLHGRIzvz BBkEhgucw0fHwub1tVlqbf5rPmGzG9l91qsYoMYVAr3B9eKVtOvHRDMrdqs1Kk0O+ujz xRyN9o9f6r9DzSYmfFNy3y5Lg4BVOUXGQSAJucg516PwfS55In0HYszpqd1LsGKbTLdG oM5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297503; x=1779902303; 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=fzrCuSExCOJtu4T6s9x7fqyccAfKJTcTHO9vpPlGY7dA6FFxXboTQM/1sY/q8+ayPI TjMlR4pU+S13LUmesiu625ja23qli9V3B4mJda1GJJF0/7suTLbvZBF2UrV0dzV1OAbC KGL1c7ZYw4QRybgf9nMCZFBFBzAopsO47SGb1ngvMzBIiLApgvbZwp1Mv23/C6xuXfGD ILimWLAWeHaVQYgAb+4tx/UQ305HKAr/noO1uQErodajntTZj0BqMkfoZefT42HydP+g JMxGHJPOJUykDLOs3RhTX/dN9TF9tpOcf20k+8P6HuReTaO8suau+Dt42cF8Gv9TMkLI ACHg== X-Gm-Message-State: AOJu0Yx4rFQgyaKarZQc/wqTmoRxF0HlG6vwgfiTdUdAPV1j3mjehNai VYkMy85J7yNiugeDUbeJmFgz0Tcc12tZXCXxCrWI1JuRe/cSMU08omWMJvH6XWLCQedLGneWP+W ZpDwtphc= X-Gm-Gg: Acq92OHhSeVmr82prvQUQyRzXHa/gv/8jvup+ccdMpAv60YXBypQmozybbsZgwJUtEd Fo2yttM1H6Z5L+hczIKKXEy9XD67E+MnhulCHSdzXTY9TAg/Ik1bEFDQFl19IddQXVAwTd8whE4 OIDupeVLHRZQd35aisWhXbyKowAzyBP/w0Nl7rweAbtXgplsVT/F8bT03CzqmTrafUpHa/pFYwf UvkYoJY5xTyBV2FN2e1zoMaHEGr5EUq48j4RWrUbRHYIcIB43N/DEF7HktzWuQnpzIXjEIC0s9m Yj2VCTAAfrFZorMkeOs00r0RSlRCyBWtq1Dqk5hQYgZydDDo0fU8HfR/tYDVprCIkjxbFpCpcZB pPJvKXPKWY6muzLMgWQeAw51ZaT9PLxw2nRhp6EVivyVg/L7vf1XhYSpZN8hXMbwfD8zqOfNWuB kkoCzBph3RfHg5t6bfled1rABl/T69 X-Received: by 2002:a17:90b:5848:b0:35f:b714:e516 with SMTP id 98e67ed59e1d1-36951a66993mr24337396a91.16.1779297502661; Wed, 20 May 2026 10:18:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 01/30] fpu: Return struct from parts{64,128}_scalbn Date: Wed, 20 May 2026 10:17:51 -0700 Message-ID: <20260520171820.848839-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.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: 1779297749745158500 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 Mon May 25 14:38:44 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=1779297643; cv=none; d=zohomail.com; s=zohoarc; b=HixQrnKQ50ISyDOsSQ9P38JtVfK1is8EqIASTYi8xhna/r9r3DUf8cX9Su4wEmMP1FjSB8lhVAGWZMJELa5CpwP9ZEZlkAWSrxrgGSDPx9xXd1aWdD6MJbumxnVRyn/WHJCkj9F8OYBgiwTkTxvFVHWqUPBHeunkoWcYeBYSMLA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297643; 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=x9rWSaQvjbDXBnfVxCErc01A7AXki6hbY0KLzGZpXR4=; b=mR+KVEZ7JO6v9fFLGAsAGOSyIGxUw9A/+MX5YwjXseHIHGXfiZVvUnO5Y8lbNI9WM3pm71BSwW8ivmL23izCQUeqzUHuch3niEpH0VqhSvsOfQL8ona/1RhnL0o+PcnH7gjyJRRnkpaSxR1pI2QS7Kqy5MRv93dgf+cJJRlQzIw= 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 1779297643907829.0162229490933; Wed, 20 May 2026 10:20:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZ4-0001PE-VO; Wed, 20 May 2026 13:18:38 -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 1wPkYu-0001Jf-Cs for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:28 -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 1wPkYr-0001sd-GF for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:27 -0400 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-36a15ed5119so1649705a91.3 for ; Wed, 20 May 2026 10:18:24 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297504; x=1779902304; 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=x9rWSaQvjbDXBnfVxCErc01A7AXki6hbY0KLzGZpXR4=; b=TKJ47Yk1/Ww8QRVh9DY0+JVI320hVwTYS6XvvfeSA2zjCtAPCTsWbsD4YKTqIZ5Dj2 Bubr9Sa+F/mvz7tlEIuhmK3ryoWzTJ+Qh0Drik8UM1Xnz5Sw8en0vZjFOoojJg9qE7dp jzZhrWG4zdbEu21vtPtmx5OVbtP29s/CV+eo7xYcSaTBsxKW9i76e1RuVZs3U/SK6Tvl YIuRMxS02nTZWMGw8rpnJrKXDNjHKRyqF2IijPoT+PKUTFFtuE8NeAGtXu11PBYTo42F KCBULrxo07ec/XzIkytvx3vhendiOucfJlsTMTxAgkeHXPvG6phrdfXWvkLG5iSuwP8g gK1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297504; x=1779902304; 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=x9rWSaQvjbDXBnfVxCErc01A7AXki6hbY0KLzGZpXR4=; b=QSVQchO4Fpm1ax+HR0xwYGQIAyTEAqnrUUc6xZXDKo4Kxo6dxEfx2jYWwWa//iQIMc 85Prc33stAsWU4ClMwgyQ4IYuiKH4kAp2xcLF184ruAPeSdoDreuW+YIN0KXjjhuEpQu VhM8+zXkQ7JBEphvKRfyBm8XBrFBVOC/q5gB9hyHQbMtVwYIV9zY0noKyRwMNfAWXUVO snvKrcE2Z67zWflmzKpc5iMrPuq93ki/ACoR85ko6ElBPIQueHNPUSYZbnAQk7E02Lr6 ZfkJvBnhZuYXqOemLWVWdd0zW9/SUKYppjlgaxcRNPHvAT+phvwGwluWAbcIkBvPmEBN kp5Q== X-Gm-Message-State: AOJu0Yw0OVbUuajTHb43Vj6mGHf53lEYSglgJcESZUqispv4YOEHAI3i dMN8ud0Q1gOiuPtJwOaSBubADEIJ/ugSdNWyPKbwO4kE6nC3fsH7TSdL8t+Nu8JKYsYdja5ZWaK GfpIZb+o= X-Gm-Gg: Acq92OHoSIun2mSMXTbjSSA1/+WYfr0n1soZhXBmxG+N1QjgVA9KfxFjMBIE1leRB5o HPZ87vOgCPCzDbtKryddTLEr5waaB8qpKTsYAqn75qL8P/tVMQe48Aefo6nR/9FHik0+FjW7usJ bpGlcXCUhIRH6zUrHareO+psBv+o7orml1Hct6POfWMc2BHzQuMpi8pD02YWE61Ym/sM/o+ivPI uKR0TWYnIytNN5pIvFm/Tg5xNXgScDmp8Nsz2hPJQZyqjzL/IJSi73j9CZh9G5eJyJmAKOGt0dN XaAu4BKzSsnm2SdnLMpj/zmqmwUGTLlrfMhP+yJzsT6u4jMQBzPrRBETBtJ9HS/J5dkrMGU6jw6 8EkcDulAZ7GQ7GA6cYl2oALOE8aZb9pCCURoqOjZTj6Epj+2xjfHtTkdpnFhAYmEl0GSPExKyVD 1Kc1RZFNvSmDb2lRJv91BlxXg9u7yc X-Received: by 2002:a17:90b:33c4:b0:367:f9f1:af78 with SMTP id 98e67ed59e1d1-369519decbcmr25196137a91.7.1779297503441; Wed, 20 May 2026 10:18:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v5 02/30] fpu: Reorganize partsN(muladd) Date: Wed, 20 May 2026 10:17:52 -0700 Message-ID: <20260520171820.848839-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::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: 1779297646513154100 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. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- 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 Mon May 25 14:38:44 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=1779297644; cv=none; d=zohomail.com; s=zohoarc; b=JZ6BdoKZyVjZw0VDLyR7sda7kSFt51Eu0VMgDmT0/4TILbCVrb8TGUYISQ/r7D6dQ2WiyojCvXivlJxP4VT44CxR8GJ1EPj8bpUmnykYzurUqW2yhtIhnLCMgVxnpe3oU6nGA/CgEBtN8Yupl2yoLYMmJy3c0attxsQ8/qAMJaI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297644; 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=K5nJUDIW6zXLShpHnqYWVgVARCI7DT/p7pSamlYsSxsoiY50b2YKIR27AqNXPO/3HkV8rS6zBQ4sYI1koNsD9+ZHEzOyB4OJ/UjYLbj1n+bETA9jDtbMtfhSVXAzmedoctfz1UV6juIrbH8jAMcUMxQlXxhakw5Gqi4K85HHgjM= 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 1779297644509940.71655409276; Wed, 20 May 2026 10:20:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZ4-0001PC-SH; Wed, 20 May 2026 13:18:38 -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 1wPkYv-0001K0-QZ for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:30 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkYs-0001sm-HP for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:29 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-367d88b9940so3357953a91.1 for ; Wed, 20 May 2026 10:18:25 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297504; x=1779902304; 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=dPDARUIOXA4wJWzXaE5DTbIqUlyazT5acY5RrSqz4ZbZEShYDR1WKX/1dI17Dd3i1z cnK2NJwaJlxp6CEYd+zIKLpPryGv85WaGyOP9aeAbYPfzi1ajPKR/p0nLry6yu0syiil 9QLFQ07/hZnOTPcABG8HRrS7qBGvb+rmUJXEsQqtOySrQE3k5UEHHy66ofRUOT6JtiEI SGJWH9VUStkfeJ04/WlPDoAy0fMo0eEZWlVPOUPtIXoyS+5gyUUelrQIyqD7Q7yBIXeU UnM/VZM99GnUqkJuSq9cd7iEI5pa2UdxidDltCeNI8cAcdr0Jvv3B+H1HfKEb58GdSWi Of2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297504; x=1779902304; 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=bQ1k/CQ5bXYr11TU6suXfsYPsH7FbAZHZRwhjNUs8jVRAFiLkLKzVipBs/q1ZG5hRK wJoEy81DHmNNe3FXUuCohHieGD+R/Wsl/PbHiKaF+Xs9Wy0S9VyaVgowuf6MDuzqwA5u yxUx8wcuh9/XJLXRJkjMwFMYAWHtOj677Sj8LLj0YUz1Fkl9xjwoPzo+Y9vYZ0iwKRkV /DdJgJOdiYCBPjrFfFUJxF4zkOrpBZgjvhrqzw/LfdUwwnc3H+bmVsftDs4BxWgxLLm8 4tK8Uw/G6oR1FsNxq3h+oLin9CFKz2XFZN8ta/RcZLAxgBK4TQTotRcP33779p3zE982 qCbQ== X-Gm-Message-State: AOJu0Yw7+pbIvyhS+QFJbfgzRu6jrMDdQPId/AphBCjy01ePooYy+Gk9 Y7pJBDbx24X2Irmu1Ez0aBF7N1rAyiOVCHrRR1dz1jmyUJgXyO3m9TfjyD5961R9ZndX0gKWIZy spduLBDg= X-Gm-Gg: Acq92OHIn7DEy5GdU5NEoTIIeHMPuBiEY+75EKnsaNujmQnrd++vYcLtW9NVKGjM6iL jwJzc+SmGff0phqYpfqPPGTPpQDXoD2W4Z0yQehK4wsWHLDoKhBM5JvVlTWOAVqeS3Zek5gg+Od qutMHEMCMyXjzjSTVstICPS5ZPraY1rqfw8J8uoyyyfDc2QjYa/KGs9+B/zIeIK4BRh/BBmqQZD uYAFC5AcvjcRTx3u3oVam1Xk4SEVAJPTHARt3eN59TiwlDYoeMyUqLUbfO5NpkIrPByhmqdRvC7 dVT0ABNDaxTEHjilwTODnIBTI0sGoXU/Dt8bhH6j86LUl063DQHXjyvoVDD3KSxjwswL47KCEIg uDR91wFoGNNMCVOwNp3ZfJrjWK/4l4rVOMW5910heqwmBxEJdDEX9uJDD1J4wecoJm59cpFDs3z 4adTAFwH/NsawvexZUev7Q5bFGkm/FbrK0IYqUOEE= X-Received: by 2002:a17:90b:33c4:b0:35d:9c32:6219 with SMTP id 98e67ed59e1d1-369519e8faamr24287343a91.9.1779297504291; Wed, 20 May 2026 10:18:24 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 03/30] fpu: Return struct from parts{64,128}_muladd Date: Wed, 20 May 2026 10:17:53 -0700 Message-ID: <20260520171820.848839-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.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=unavailable 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: 1779297644757158500 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 Mon May 25 14:38:44 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=1779297608; cv=none; d=zohomail.com; s=zohoarc; b=R0x7u4b4DqhdooAqGUbjkd5hno6DMin43e1MNk9Jh8kZj6h/KX7eXQ5k2UZWY26MBRbgZ6w87TItZ7+SZMm1PLuvl2MfCnIs4RfrbVYDvMW95zzG09jAq/82DnvZL08VY+PCjWwCfHt7ahC/B+BZGshTtpCib7yckBS0XSjzxJE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297608; 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=VomzchIdsxJFwjyPIR5Do7DKkgkQwWWY/c6+F17BcxEt8SPZnjTAfU7hdM3L+gU/FPguVDtskDbR4VTGXygtzs4m0dcYOX8JuC5LMmPgrNzNzDYwg0RIkWenqGFQpjB9+1tlB70rQxeUvhe3GMMcF7PGH3RGg7YawtBrYQg103c= 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 1779297608731290.9208341724835; Wed, 20 May 2026 10:20:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZ4-0001OV-GF; Wed, 20 May 2026 13:18:38 -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 1wPkYv-0001Jz-QX for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:30 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkYs-0001sy-IY for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:28 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-3697f25d26eso2646365a91.1 for ; Wed, 20 May 2026 10:18:26 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297505; x=1779902305; 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=y3OT+wBDxDO3LQUQs2I77DI8jbA2HA5hOuMyu5uTFM2yvl5cu1f7AgnvfeCPDP+6GA oeXXSp5NjCBErwWYBADbpd/I0RMyCNmU22wkT7G16Zn3+AgIk2Rj4sKLln9OfU+0LuCu d6etZeQvbOaz0Mwtt5DuZuj3N6lp9HSKhtXVXLz3NmjB32sS/Un/XJkbv4C/XDihRGCi V4CikPWV+YzoPhBYfvCenyTtbiVYg7R/UcS6M4jwj7b9+rsFw1WCCmLKAll7sCgrjWZI Bp3yaMNW7pEA05aCbufpJpKWfcJskfz9tIpVEKO1UDB4YKivEDYJGFpyCEtol1//L5U7 sNIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297505; x=1779902305; 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=kwxZZSestpn6FhAwrdVwctWNt88axCkjnDQU3qrBiHQ+zVQUGGKIQMX56IHXyOsf1s 1q4NFSAghadck78TylKdfXep45RGk3X5jIv3HmuVNB2nM9Xt+j/YwtIRiajACylyW0fB 8HglxEYOZ7c0Bv8cYMME5XBLkvmvyPMGQw0wWB0FGaFHMhS0rLOEvc4r+LJzTg13N59i zbVRydcg5gB6sloiHJz0QoM0PNHqWUAxjLC0fJRV0GgXDh5ggrVVnqcz/SywQOiFNYo1 a1DefUdAXWqnsjAdlX//tToxb1dmLeLjWRhQuOorP7i9JyTN4eHCMZTfDn1gMdcM2/qt 9Yxg== X-Gm-Message-State: AOJu0YyiEAdAVHpAsZwz3HUYBC8JTdIEz/HYQCdOx6xVrb0xxd8TObXK fxcx5bHgFIzhepaRUWXR4zcyqvQFwd9pt68O7ABDSUYbZx5rSi4DJK6xNsCSjJP3hjOZWZFL5xd f9wpLtoI= X-Gm-Gg: Acq92OHTAhxNQk7fX8te8r2vle37Eu+o1IKY0OfvSre/+5uCTarVaXHKXtv5eohdOlr XRmaGVeg+hYoyaQH8Z75B+YRDFkScNXp3+ve5AxUn0L1R2EcfotAKrxgcrK0Pqa3ov3Wwm+fca7 HgrKkG+xDVe2HBiOQMI7K4uNHHR8QQkQpN2X/fPtJAXclhZAzbjHIycEw8XLCqXHUT/M9e9WM+u wziwFz519riaMQbjO8eIThojdtrmDTZJb0/vxb+cS0lOJ5zvShopPzBfyzGpOomjOp1VdOTrA+/ jAPoqmDtb8Ma+TfriIUMEmJdR0eU5MD9K5ZDyTrgPD/+TlOB8zgqqiI0gMr1meh9P82ULjRpS/R 84JqroKvH+W8CJe7ROjDHUnozQj9IXWgmuoZNrrhBwy7aKTA7eJreBsOEl+aepzEECb/JE73rVt XehOk2epynro0NLotionusJrJ0kPk3dEA6cq29O73CAptjHBuy9A== X-Received: by 2002:a17:90b:3c10:b0:369:a359:b189 with SMTP id 98e67ed59e1d1-369a35a15a7mr16712972a91.19.1779297505085; Wed, 20 May 2026 10:18:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 04/30] fpu: Hoist nan check in partsN_addsub Date: Wed, 20 May 2026 10:17:54 -0700 Message-ID: <20260520171820.848839-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.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: 1779297611651154100 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 Mon May 25 14:38:44 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=1779297610; cv=none; d=zohomail.com; s=zohoarc; b=GBRsRDgeUyuOXRblWXvDDYqrVRpcayeb133XUCtUZDQ2DvlyjqC7hzz7wsnE420IcggftRmC20o5UyjvTgeaEHSDhUid3Knj/AUb5xUBpF00jotE2YlWnQd24HbAK5fYk7x/zBJ4cnAHcw3J3YvQxsh+E2cp0yZ0399lt8xx9/U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297610; 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=aizZ6KsxuScbuarSuGl62Wou0yp8xd59JdQCbRvge3Q=; b=CkbvWrxqKl6mHy1FYP3OUaG2ywQvNjPDze9Tzrh9T4sDK7b0swpa22o5DIKKxMN3acZ7zsLYF7zp7uyJG/hikK+OQX+t/A8ZIfgH8IQEKWNhXSMhT+5DPZRBVjL0a2+gXIwHR7GbLXCXf7Hoiza1NRfAFBsjRp2gdGpxV21gdOI= 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 1779297610169820.6414291215342; Wed, 20 May 2026 10:20:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZ8-0001T5-3j; Wed, 20 May 2026 13:18: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 1wPkYw-0001K2-2z for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:30 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkYu-0001t6-4U for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:29 -0400 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-3665a90bcd3so5404842a91.1 for ; Wed, 20 May 2026 10:18:26 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297506; x=1779902306; 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=aizZ6KsxuScbuarSuGl62Wou0yp8xd59JdQCbRvge3Q=; b=c/zAX4lzRbGWc7nIPGb7/e2HFtKp+iOZL5o0Bu7k6CXaqtqPHGIhMrhfkb4hXOsyvC TvcVhhJZM5+maRc2Y1boawV7h+BjYZF4c8QpcLkIYx71vD1wUhQ/LUATeBbrITaOIFXt c1xbwf3W5rZmDIp/zYj3gIyQkrrxgcmFab20z2ofujbYKQpQ7ohUMf4smqOfuAaJ7np3 zbNSw8jFEK7NhEq5PQWGW/DY4OkzOcE03cWmtTXX5RGzxdsVEWsPirgemGKez8HH084X TYVIP1Rjh35b8FYPq80UWwoWvMHUfrzfM8SkP2VmmSjkGYbBf1gTdzTwcmLmrVAbRN56 TGQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297506; x=1779902306; 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=aizZ6KsxuScbuarSuGl62Wou0yp8xd59JdQCbRvge3Q=; b=orD3wdSeGcNZzJzLEtDt2W0dQKnMo1BzYpNE4Z/DgaxsnzXql9HH91AogBtoSvULYw ZMkvk6WQNv1Wm2ApCrd38HFrbAyb6fCwd3jFO6GS7AURuv3Nje+O6W+msyuOmqkqYmMs jS9Oa5RCiebk5B5PwLG8tyEzQ1QM0EHnLwZlH9PlcOFXuC2zSSYKWdczD4X4wvcAcfDE iUEF8msGUEm/o41jVR7phmOSbdOz4G9WYAwVrtEpihQ4JYr9riNhFE6p2Gagdtzzp8EZ zIqq4CPCXki1IMyj90tpfJGHbZ/EkvNl77r06nR+PUDkCdDpsuoHNPveT+wUEiJLyfdH m3KQ== X-Gm-Message-State: AOJu0YzFhY+YzJNt6tyksxav7BTbHMkQ4OlQUKkA2uPgZRdTh5l+ObW1 pCs7XPSH57N5ax1+PAUC/V0H431ynMn5NMedTjqwbTeWFl6gL839j5P8lPyd41S5fElwHpTet// x0Gh/NQA= X-Gm-Gg: Acq92OFNfg98MfDuvGouhU3galnFZ4caNJXu3jB2F8i8fexMcQYFcKzPBB9homM8MFY MkgUviWbfON8TojuSVMvOjsrkVl2NdQY4XbVZP3nSJxhCmeP9YafdKoLGjrFKNXNvHalhDMAHBN hwv/7Nt4rYuvBU/H3FjoRaURFtBICVBIUWzamjeLjSvtYFFEAYZV1MsDxZ+ZtJEYMXHlZwxUYys VH5UcnKSNT8KuMPl3pZChoK+7J2y1xRXd/BsiWm7XOtqPylzHYaPAP6AQIJHwyD6WD7FJzX3Mag OCgkxIcoXzTFIRZ4awTNFwOS292IlPuxCp+FqHqlA4tJnxNKah9M0qtiMeeCFlR/RQWOJoPF9uX Rec6FNew0alUu5yO5BuUDEtqRwdSxMg7M+cbjD6515P9NCSOZsAxW8CzHLNBWdztaL9aCuNMkS6 g8LgxFTLREiTWgLii3nV0MQ+2evuWb X-Received: by 2002:a17:90b:3901:b0:35f:b5df:463 with SMTP id 98e67ed59e1d1-36951b7835amr22394826a91.14.1779297505710; Wed, 20 May 2026 10:18:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v5 05/30] fpu: Simplify 0 +/- N case in parts_addsub Date: Wed, 20 May 2026 10:17:55 -0700 Message-ID: <20260520171820.848839-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1035; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1035.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: 1779297610414158500 Content-Type: text/plain; charset="utf-8" Consolidate the tests for zero and anynorm. Add comments for a few cases. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- 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 Mon May 25 14:38:44 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=1779297644; cv=none; d=zohomail.com; s=zohoarc; b=Gux1c+lm/YaK2x0rJ5OvxFwfQ7twIdA4JGMgbjbbEI4aAuJkGeNeioJW9CmyLb2hYZ6anoTtMCNp44g6aPdyOPMLqTs6uq393gngwygiJvjhw+jJIILwgmxSAFwfbQW2c7OJlzNSKoFq1Jj1bzADP9clTYtetf9Md0oK+7n42DE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297644; 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=2J8h7EuqX8JGH71JQZgqsud/ulFplvnKZbTkt0er6k4=; b=cCd6Be4eT9PFAy61RYfxnBR1PbaaY019V1ckLu+MeKzBGvGP/ANh9GY2l0ex9tZIOPRQ0GDtBF70enY+NMczyr+DZWuWDcppvH2QC9TmSV5vr3k3/4EOMW3WJgP8H+Wg6uIFqiDNJMRTUmgBP+cKYpuxlXhid9+VptYuEY7ceEo= 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 1779297644419743.5592249337018; Wed, 20 May 2026 10:20:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZD-0001Yz-F4; Wed, 20 May 2026 13:18:47 -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 1wPkYw-0001Kt-Kn for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:32 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkYu-0001tS-4n for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:30 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-367c26471f5so3295274a91.1 for ; Wed, 20 May 2026 10:18:27 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297506; x=1779902306; 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=2J8h7EuqX8JGH71JQZgqsud/ulFplvnKZbTkt0er6k4=; b=etK+tLZfutA/effxR7MraiXzQF56H+kJb4c+dJgaJmRuLxcU5tefevzAOZGJS7FyKt 4daK03f7Egn19iwYEwpb+NzDYCTShN4Xz2uw9NzE5w/Y5HiVMzUypJNmd1AM9dqpbTc1 wE0Ks0X9KN/ndY9YxVQXAmcpkswvAI9/vbVVEd34mOKLXPeI/Nl71BPXR3//0risAsZi DOPcRSR9J13t+tGwO3yYt73jc1RGbCw/hhRkZwG6lVYIKD0Z4Y2fJaTnZj8t/IJzhKuO dPd5EL9F7fL7qxll3KZ6G7x86ykAedC3HHVKoODIC2Uad5Mt/psb3p7BACq3OyKnhMRQ 7YBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297506; x=1779902306; 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=2J8h7EuqX8JGH71JQZgqsud/ulFplvnKZbTkt0er6k4=; b=qBZDA73lhSnQ1ny8DYituYnpiCmaD3mAG4u1jUBGxAxPcfwOyDfYoSnumTRm3P36WI BNsRR/WLDv/qwOXInbDNHg4SKuhTPJ1dN4+a09dhBBjIpxySYW7+li0XsgqBSEnzNTec XMb+IzBuNzmMjOnzRBkn0sLma1BJxX49q55YrpemEFLsQQQKxrDJ0+o0MA9tkxwcdEDL bUWuRMomHpr2wGIND2XICXzPEMHsgVsviZcZT4Utfx+2QnFcPgP+9GMaPABvoCQLoFln 0Wpoika8lWbmx2reXCa49NZpOFC5dqMSIHNyDbMw5kNiW+GPK3AS9eLy5XeY8jehdkCZ kpaA== X-Gm-Message-State: AOJu0Yz86UxqP0QqG3I4eFEQf9XNu0o+Ee4W68K+O5SUebVli2jkvjV7 O+tZXR82MNzKD1LRhNQ45o0XZSC8w0tJBUWY0tZtiPmxD33E6AkqmacG06fJMsRvA1rXMczBf8f g/UQROn0= X-Gm-Gg: Acq92OH6BasNY4m376vVt/WHUv+LGa4xPO5jMYt9fSQwVAtTCPy3uXWSwINFCkp09DB PWq8USEYwn6WCAksa3nu+s7LhQA5O6Phn6V/renVwibI+5LFJwcMFa9vqRs1zV9Yd6PsWx2IAhq 7BnQQy2rn5i19jyEdzmdrft3NoOi+ghlTim+OexAbo8hQhJbYgyUUlWvd/ziJwY/thUa4yWNugg 8vqjNLkyIjvNgotISPaar5G2VQLHMKZdu2wLulM0zHcG/qngO7mg5/C+r5mr3uzHfeohqqs6G43 CYIyY3oXjGlwT1IZ5uLRwkE8hJ1Hr1iy3fnoLPahVbphxFlUpGLe7wsi8dN3Fq5UJySVOpmCLmN RqjKz5Fxs2ofwOfUQ9Og8kbMl3ju0nEbmQJc4V66ZsbGxnF4k7SNpEE5Pup1LrhHHpXD0InG7jh Tc+qh+knd0uwWRNad9pVW+eK+dCiVt X-Received: by 2002:a17:90b:1d83:b0:367:bb54:8768 with SMTP id 98e67ed59e1d1-369518970f7mr22392194a91.4.1779297506307; Wed, 20 May 2026 10:18:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v5 06/30] fpu: Use parts64_round_to_int in parts_s390_divide_to_integer Date: Wed, 20 May 2026 10:17:56 -0700 Message-ID: <20260520171820.848839-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1031; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1031.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: 1779297644751158500 Content-Type: text/plain; charset="utf-8" We will not expose parts_round_to_int_normal. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- 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 Mon May 25 14:38:44 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 1779297733461800.0643284165559; Wed, 20 May 2026 10:22:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZ9-0001Ul-MX; Wed, 20 May 2026 13:18: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 1wPkYy-0001Lb-F8 for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:33 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkYv-0001tf-HS for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:32 -0400 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-366139223e4so2967268a91.0 for ; Wed, 20 May 2026 10:18:28 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297507; x=1779902307; 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=G44vvSVKPd+SBHhIuk/cqwqUWVg4PjxJ4M6l/gHw/RnsZVI86Dr3OcgcwD7mPtLM07 P4W03bH2jrUPh6Gw2HEzl0oYnaWlUbG4JiVgmPO5dZfiiXi2C++/dJfu+uPtiCNU3nmZ NWGqGgLblbk7HBOvle9bQPO74jI/OBUcpySzna2hOlb9858Nx/eBCS0kr5ZvD0Y3b3YE C9Yni0M8I6PgXBCCWixqegJ+cL6OC4sV+22bg98L3EKimL5/JM6WL2ZtFTig54p00UKB 5lWgXMEfUowFXrR//JXHJoCEd8NycTz8E5RsNt5pXCa+BZiG4+nTt4iUaOsT6WyYhBIQ 39/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297507; x=1779902307; 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=hcGTb2n09kkGseNdVNyL5z0vPpjyiJmb06dvSub6rtlhOGRw67bhfRyr0eskog+6e1 6RygkwC8yO7lPiDAIyE80QvJDc2VPpTRodE4uhZpRSAfb1f2wVL9uR8I/GfCu4928KZk //BQOfBXp3KVKyo3JYu98ntrIWJ8sV21yCw/q3LlZT2tpM+IGW7oyleuQ5fb4B/S7f7g vOZbVIRb80OqtIc4I1qD+du0ybhaTlHP7fHIJLJKc6wGcbECBh/kkvOIGJq2X7WqpdfH AJsbr6HTQX/X865IpanEbEMDFkq7QmLZg2To+MITvcQhjDpK5yvG/3KKGUN/7zf5Fiea gBKQ== X-Gm-Message-State: AOJu0Ywn+oSsmmp5ij/r0HwlFqyEOjtSLQx/XxET4SEYphyDo6hGzOWd SIxeThYERTmmpL293Su6S5sKfIAQ5jF88VuqlaeiJvCvtwfkKrBhfDOxnNt0UFWZt4mnVg+oVxu 1//LgV6Y= X-Gm-Gg: Acq92OE/pGdr7SP57P/cv782W7HlhgFu2jgYaSDcyeLT9iTjO7RkmMcO2WwGkgi7IZR isGo46fYoapv7DBbzpAcnc3Lzo5MrlwoEQjaRzpexl9njsj+8OU/MAAbQd8b45G0BiDmVeKDmMe PWhKRv7CScJcV50Y49AiCE1NioFfWXqp2Jh7PkF0Sye3Qvap0AUdO9VfxL18uhdP5MPbkaNJXrQ pQQYBEFpcuWVKwymrXUVPUqNIbGkeNvVFsJuwIWb3+QLofIcghaForA/oYho3In6cRB1/z9q8/I LVMefA7ElPYJbrkiIwsccbROJZdq4AAJf3mkSU92C5bB3sZhhsb7JXOQfut8TYEerDtoDVaX0+F w+wdZGmlWKZHV6TAXFgMr3XijT8Oa0p/7Dwu0SmQov/Yw+ty19SWuawv5COgXHHknvjrYCxWNzM vmurqPjJ6W0SR4wpxAG5gJKZ7mm/Gy X-Received: by 2002:a17:90b:540d:b0:36a:35df:769c with SMTP id 98e67ed59e1d1-36a35df775bmr1874660a91.15.1779297506988; Wed, 20 May 2026 10:18:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ilya Leoshkevich Subject: [PATCH v5 07/30] target/s390x: Move float{32, 64}_s390_divide_to_integer Date: Wed, 20 May 2026 10:17:57 -0700 Message-ID: <20260520171820.848839-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::102d; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102d.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: 1779297735748158500 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 Mon May 25 14:38:44 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=1779297568; cv=none; d=zohomail.com; s=zohoarc; b=FdOhENYOoaTipjVmokmJ0EV9St287zNAJFP1p6pOYAPVaHtKehC2K/veggfw+QDvWnvbt0Bc0D/ZFUcqWu0FN80QXz74mXemiZ1EnYafIj0wuOxIvxUeFEOQW7eLW54j5O/XbjwYCJf/lDkxJO6p2RINAVtZmFnm1RRJTX1kcPk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297568; 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=28S4s82CMOTDg2xJmEmm0cDg+zVY5zOgP1NUkaKd36M=; b=Sf+SxmM+vTQQMXNZYLd5v8//Bma8nP9xAd2F/ZPjRcpQ11raAInx5LeVsz/LOM5X2EVfsxKBJhywWQFXh5LL2Jp258oLE5bB4DZ4H1yakh4biWcNWuwB+OfN6oz1M/oOamAC6IdrUde5IOZ+osFBVzD785dwEuK+nggC1k0947c= 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 1779297568962700.6303687397136; Wed, 20 May 2026 10:19:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZE-0001Zn-4i; Wed, 20 May 2026 13:18: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 1wPkYy-0001Ld-Fn for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:33 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkYv-0001u4-IB for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:31 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-3664df30f53so3060373a91.1 for ; Wed, 20 May 2026 10:18:28 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297508; x=1779902308; 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=28S4s82CMOTDg2xJmEmm0cDg+zVY5zOgP1NUkaKd36M=; b=SvcgxZpw9A9X4wzEYg1KSPjMDz2Hw5SCTvSAKBaPq1sF1RG4sBZ9mb2Y6XRT6lI1UR w5DGICL7H5BuDBbgyHGtEIddlJEb8zTGnrpi40+ttDXlEraYGAWU/bzNgt2lZJyA+tjy KzfhBqYZ2KVoxApi8O7AGyhx7FmnOBW+WLcZIKmkjMmT+9nYNwkLv263r4OEFPYGxb0t pDhti3yTcu1MKlwMyhjR/Sgz7YW1nlMJJQgz3I6gmly1ZUeiGf9MDZVVNMMPEVgXXRFW q4ppJLLMkq44f8pGtdF/5Dszu9234RHqhrrvsYXY7YEAVK82sMu2n0QEQ19TflTjHH1B kw1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297508; x=1779902308; 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=28S4s82CMOTDg2xJmEmm0cDg+zVY5zOgP1NUkaKd36M=; b=UVg8qdhVZMFHBjGu2+Ea0Iva3PUf18zt/F8qCp+d8C9nA5el7QlWmgWg2TLOKdqDlu pG7RzLX/S/WKOCmd+lBSQpdr9W+j52MZu1/WkhyZf5s2lTBvMxm8bm7TuRrOQSk7IV7X qiiLhHji9vfBxMXcLOwf94rFdw2ul83423XniNITl9ylaKu1iu4q3LuUX77wLMRk8aqV 6Pa7EOPFvBtvQGZaht/IRNP5OR6gNDo4tUfk5kUxMpCwRSeqMj1hfWpXDif6Gd/kZ0oS X/t/kNq28Z1mGFsrd2t/4YoaK9WW7/sb/iy1WfTIO17YJ9ftXMiw2Oom5aGVEjmUT2zs s/oA== X-Gm-Message-State: AOJu0YxO2mMEa85p7li9RGMWKCTfJX0UDysO2yGs3fv/TTd21K/J5reD b6KJ6xt0M6fZm3D/iA55Tk2kQcNbi92DbE4zqP8KIcFUPQGbUgsUiX8+pqb/JvjlW/+15/9XFo1 ONdeQ9Q8= X-Gm-Gg: Acq92OGXPwqU2g2p3SrcsQPTYvbNqSaxnd+JqTPBk6xW3ewhE1LKAmakgx5jxlRnVE2 wEcfwI8WLfBqWEK6l9gqJZKOAlw7iHJmfluO82I/XCTvG9uUx5a+APKG8PzXFevnIPseIcTYfG6 FzZEUrpYTCZrdFdgqN5houe/9Ex5xC4iFYYtjQ6/cizro7SHMKWpj5JFgaWeMYoX9qOcD4bVNSq cOCAt6qmi6Ina8zyrg7XG4nKMbzkZic9IK+dEzXR8M2EpENNwRt8wMGyvEaxINpOxJiIV/mBZWx nKyKu89ivMs10n/gBQLxplUKCsTJENmZ87Jtbjd+vne7zVtsUeDjoKkq0gkJrk7v2hvRdS3NYU5 BJdB7SkQJzKFwrxIg6jZM4qbaEKM2YVXvtMn6oGQZl2zedY3oOBX7GM6ScMVqANX1zpb6/CcLVO Dyq51bD7I+TNxr4Bi9uSzzRFyt11HX X-Received: by 2002:a17:90b:1c82:b0:366:4782:1379 with SMTP id 98e67ed59e1d1-36951c9a00fmr25837305a91.24.1779297507565; Wed, 20 May 2026 10:18:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v5 08/30] fpu: Introduce exp_scalbn Date: Wed, 20 May 2026 10:17:58 -0700 Message-ID: <20260520171820.848839-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.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=unavailable 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: 1779297570094158500 Content-Type: text/plain; charset="utf-8" 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). Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- 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 Mon May 25 14:38:44 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=1779297823; cv=none; d=zohomail.com; s=zohoarc; b=SH/xhWIZAdYY/997MKohxsPK2QUPIzTPgbSJaOo4bOVBTUM5TeUmSYX19kt83uLYkIa7OYO433PMKKnmNzn4PrFe1eRQvwJ7czpf/jtk13aIUwoO50QLSLuTgAtNH9zWf2Kqxr8GG8n+xd5O6XzfUL6+2oV2csjaxaJ054SRyYA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297823; 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=EsdF0Kfhz774gMRmbYBXjqHS26hzkW8hTOOjLsjNhYO6VwWvLqup37lf3wvbB8gjpVwcfT7GD9Zzpy25gGX5Qu9ePmg/PJDH9BzszsiMAJ6i/5wwiGkFH0ggLE71WzBKPw+U5SJnLa5IT68+EtBdYm/lANi9HHpECZ6iL2Gj9Vs= 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 17792978233184.9167752313679784; Wed, 20 May 2026 10:23:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZ5-0001Pm-Tq; Wed, 20 May 2026 13:18:39 -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 1wPkYy-0001Li-Py for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:33 -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 1wPkYv-0001uH-OM for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:32 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-3665a90bcd3so5404899a91.1 for ; Wed, 20 May 2026 10:18:29 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297508; x=1779902308; 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=kj8+x92AyOKbSJX2QXiHlCpo+7K5tO4XuM8Wtgzf4W1/6HBcR+wCoWrxJ++Ii9n/WN oSQXUDmXw7kQOcNrN7E+W/+GKxu30bp5MwXE6JCens5gAdIb7MLC5pMvgW4WG60Zz9nK cgIZ7GdrdKYe8uDT4qmj7ZzPnmNX8O3lPezvRSiZTNJQF7VCbsRcgh64KRu76HDMp8S6 A/nSvKEEZRirO/ghuWzBOU+F12MDsHJBtWHFptEwu2NdDXupaBgatnHzlr9aXGE9YftD dLQb0dlZLbfmkhvedNDgUpZZo6RZAFBtwJDebVxRkYZaPxXdNokvIQxx7uVdV0YRAJ4D ftlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297508; x=1779902308; 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=jccWCzWOKfthA4zyTgeq29dYVeMAzUGVAGS54dcgjFAHXwHeLsGi23dJb2mRUrr271 VCdpVISgKdG8ZnENZSxIxNDcx5VUAFgq1tdYh3zCdr2He1f/35Loz8ASLZ/TXns2zVtR EXXUDoh/DtAJoKVtC/c3px0ojUcd5cTvrT/UjkfZXdicRAVm7wYe6HOrhEBMOD6+j+/t Ct/nXTeQnhcgW2WGeDVd4ZBDIzkO6SXgbbpTgLR+KUmLJALvl3H70a0kO0H5ry47EWPP RFqWnmYFTt1ekIFoYYn2Hj2h+7p0nZ1FGNB5/yT8h5K7JDI+Q7gNNklXWTHwL2I6tNRA BStQ== X-Gm-Message-State: AOJu0YzljtEp8Kx/TwzMNBdF9gXQ3l1g9FSGXo6BlOcrn8jacou8v0NV 5MrlpPECyFXi2IbIUxq1Xif08HF8k8UcTLkyhqibVJVpFx/Q6oc7BIqZ8fSwyKwbacmN3txs6ZJ aYqV3l+g= X-Gm-Gg: Acq92OHgKsCtqwoxVdYRS/At9CgE5k/iCE77oBN2EvblYNbG9WBb+JDJAHpHEFv92u3 FS1rDJ4tUQiNTloSZpUTuCStNLOH6pj/otdf3Bk5aHSMDQG9qLDlEaPiDkQO3LbP2bYxsRIP2AI ct+DHDFpZ11+6FeTTskZ4KYR4sAhceBe2r0HT4+02Hl+bPT5K3sPhZN6fPQk41ahjaKUHtxNoRj J6oxarHvb+cBKHxet8IaRiYKoi4NEPclZ2hEuiCUSYXH+V0voxtYvXrIwkWRvl4UryS2a5O2xI9 8odKXQFffLOhbe3/oOsO+IJfz54Zmc47IbsP4pXCs5sjGmZFQq7daEulmPpr6jvVYjYpmAtYj/P ItCWJXNPzlEuCc9mqYAWtqo/G6bg6k9vb0+dnk5uS47l5SvyWsHTCqq0u/2yM9gkOjV3zcwgX8r /yI/KfFbr8jDTZYxqfdPnxbU3biPsy X-Received: by 2002:a17:90b:5385:b0:369:de03:29c8 with SMTP id 98e67ed59e1d1-369de033084mr12519454a91.23.1779297508269; Wed, 20 May 2026 10:18:28 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 09/30] target/alpha: Remove CONFIG_SOFTFLOAT_INLINE Date: Wed, 20 May 2026 10:17:59 -0700 Message-ID: <20260520171820.848839-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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=unavailable 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: 1779297824223158500 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 Mon May 25 14:38:44 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=1779297901; cv=none; d=zohomail.com; s=zohoarc; b=gj4mAALMWvAD5xJlC/5Qs8mrW/LD3Gy8eKp5gujvtbXLaSKYh8or6TapE4Xjzo7N0Pk7jDcSJl+dglo+/dipHATe8BDRNQRw3rN6MQzTw89QRlx6icONGPZNKa7IwBNqhIo1qmFYSK7h+Alge9IqJTgutDSMJNyNIgFpCqzqvyk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297901; 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=aWKFD2ba/cbi94DoxBKnlOHXxSGHpPyfedCCSWGAKILl1i0t1lJ5uVBOaTRLestdYid4lYlsUfrs2Mo8DMyan/UO5aDQauI7e1A1RY+Jd+XUyRrn007IvSuzPd3ObuB+JLIdndM5o76167y6ZbxuLekuDyyytOnCO9LuZB9Utoo= 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 1779297901435185.6226506422214; Wed, 20 May 2026 10:25:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZ7-0001SC-82; Wed, 20 May 2026 13:18: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 1wPkZ0-0001MZ-Dj for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:34 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkYw-0001ul-JK for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:34 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-36608b2f2dcso3178142a91.2 for ; Wed, 20 May 2026 10:18:30 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297509; x=1779902309; 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=JTOVlhN0hKj6eFfy2eKZhjK5YuTQYkM6LaBb0GQtIWgNarywX7EqqB3f+6NzzfE8QD /pBQK6pPp+HQziBz16KMipe3XsbLKgCXqQiu3h2wOI8sVRBJS4O7I9SoqB/hkSBYlM0I TqoJaSa6quvdlTNVvKQlsKVu/2eUmJFY+4vNe53SOQ+c6LYARtXgiWlyBfrnrRoqSLVc XBe0BMfzweqVxwEtJN47Cj3dcnO2DH1KX/O8MXWviHB5IYhVE1lVaE+1JQ0uHEBc9/9P hIdAdj8aIVvrErTVxMgXMX1AJH+fgyOH/Qj/zvBDK/1JTlF7VhYB609FvweXolbLg+Yj +WxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297509; x=1779902309; 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=Ks7wu9siw08aBMFbopAP8PosEFO7omtp9nj/Q70R2tynnCZhdHXMvhTMIiMBhOEqzM 6QnbHBSwNyusdtD87jh1fhe7zR3RQuN2u2Y2xplyQbs9iPI91nAZK7brPsFLjpwpWTpu kqXyS/jrYRaNBuS1lcgx4IC+ycFFMn7ABXOzPG/6nTEiXMt2Q+SBxkUXJcbg0gJP2AAW 4yOq6NG43BKcQeSG95hzJ1TchTaHikr6Y13q7x5UFGpSNipjTqDrP0KzL4orIHatUH05 JrQmxPxtK8TIcXhOkng3dI7fj93zwKHlWX6RR1LiroccswjRS6lwjqP32jQAV1J5FlO7 PlpA== X-Gm-Message-State: AOJu0Yx6/IUc4s91LI5Id4S9ejGUKqskzFEX7DUr5eeH4MKpCDqdFVAX DIhsVYW0ZhNQx7iFEF+Gmww2LDxUoyhJsdqmKyW78UAxGcbtD0C6Up8wiewLK95MuJglBx8zWzK mBoQV4rU= X-Gm-Gg: Acq92OHSZ/4cvNVxKi+qtada4WdImcdNz5LJI/9GeV2ah4SLLjFemKa89XUVu4YK9kE inrOC9686es/R6xzrZzkJbhRAeq9Wo+U5ocHMUCxco/hD+MTsoZxgyYwuYoNBBlEQYApyfxTHWa B5JrLCfqQfC1fPPahE7T0PtgmZ/wYZ0pt1mjfBpQOB6+xXUx13ZP5DXxJ3YUgFohq7ZvDo7H3wB ep4erwxreP4kXxx7wu221c7eCr0B+K+/hmC5AZvmoJcufLSq78qkzEQ8HUPZYaNXPDmnS9+XtBd qdBXW1yyiQjNwXe4P8jxew8c7qlutQRKd3CXJzyjisAokWAty0n3XDMDetEhk7W0CwrwRWT3RRe 2sp/Zpedvf/DKuuFAQDbmJPavswRcsRLnKw8B1nQLobX4NNPmkZwQqBJ27ixxmMOEB2sE5I9HRE /xD+OpR9ju3en6xR1EGZe/i/iAMtZq X-Received: by 2002:a17:90b:4a8a:b0:368:6998:b49d with SMTP id 98e67ed59e1d1-369519cbf0bmr24408819a91.10.1779297509011; Wed, 20 May 2026 10:18:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 10/30] fpu: Introduce FloatExceptionFlags Date: Wed, 20 May 2026 10:18:00 -0700 Message-ID: <20260520171820.848839-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.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: 1779297903797154100 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 Mon May 25 14:38:44 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=1779297988; cv=none; d=zohomail.com; s=zohoarc; b=JN4iDhVmKsvLVyglXpU8kkW5IOELdBK5cfIFLngKoU6rM/AxwDdIDumkB55Mew3reYTTVyRyolVO0sXazP5ObvCnpOBefdol7rC8ga0seTa/GW3CFtSxUdJ+85rLsNFR7N4iTvuXlQO5WGmF3pCa8d/1gBP3j+h5MFpB7byV76Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297988; 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=aJRVq4/KW7Y0yeySbGLIksXcN/q9Bk52/T3+6pf+r3ykIZiVMSmhxrdr0S0HNE9NcS2dCREgE2Lwls5k8aMFQXOD+Na4Xh4C48DZ/6B79AbpBE4l/nuyIJTffB9mP943fbuzKtPSIGmjNA2or7QWZZj06sR/nP0RWlymF1BrFHw= 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 1779297988490789.892483963922; Wed, 20 May 2026 10:26:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZ5-0001PU-Ko; Wed, 20 May 2026 13:18:39 -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 1wPkZ1-0001NF-AN for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:36 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkYy-0001vG-6X for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:35 -0400 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-36a15ed5119so1649892a91.3 for ; Wed, 20 May 2026 10:18:30 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297510; x=1779902310; 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=hKDKyIoBm6s84TFjKpbOa970eNBog+SrJNa7bg0PravRqEJur7eekcSghJq7QHZepR co5J4+LQmJoAbHGSWBWVTFK0yWi5alI/4fWWSsWZ5SKGhrqk9jcMh/9VmMsufc18rR1D aLzJsTWfwwX+3USTiBss8MvrJNJyHKef3Hy4v1Je2PKPLQwE1/T6bJ0MN6jmDNKY/PvP cUqmDWQWs7bx40kdgkqXmN103wYHmmYq7czy4fF5kQYP09h5JkimIWifD0W8km1/w5/6 D+BurqtN2H3s3Ex7wxHpLqoIW2JMM3cDfZUJA3qLuEud9cJzGudWObxyw6f1xwXNdk91 LqKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297510; x=1779902310; 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=qFa6VGaAy1CCi4aomXEw5jZs9QfPIsTo+v+ep06WAOiVxBHWxFaV1w37Yhz7NKtNEu hyt0IBxp3QtzyklekSjcWRFD1VT/2F+42bAUm/gHaUKl/gWEaCUjx8SEd8qsYoUaDX4m sd+NT3AIJHcavS9TqtnIUt80KmnQ8/VLRkw/o16mbuiKBMp8261QPr2XNr1FhRvPHJF4 jFn6DmMgDIWBCi89gKPJReHoTzQl2N9dT0U7+NSj2VIDk9ZX5qTx5h+tWjQ6PThMJjEr wbtDMoMfFQgcLQJ1jhTIjT8zxd9wuH0UVvsYWOIRPADhVZmk7D03PMNTt2RSffZVGDuI 4+jQ== X-Gm-Message-State: AOJu0YwqB1gRY9DB3+bKmmzOSup5qpzQdmWVuRoJbQgzIX5CWxK+GfdL 7o4tyFjnD3HLJvHXDnXKP9q2PXZcF0ffS0rq8GqxqokopeOmGMILF/BQpxemt1EARVdap41hU58 aPNuUXa0= X-Gm-Gg: Acq92OFjNSqZIFSBUVut4gFdJxglj2X+wb0sYOpw8x5JcYZ3EK8J/xH5YWTCeuHVedT dXXRQGW6w2GsyPiWQRGNR+SIJ+oPumKXVN7cQMt9LLHAapSv3BIlfek2T+qe/qM/+vKpRwzGq/5 K4h7O0/PekhDXAdoZR+Mzdi++Jpk0I1Z82TiOBmyoy4jDvOw+DVgrGCRMQ1rrKEZLh+QlXQMCuo hUFBdLdcynGFUQIicX5ZmYfwtl7ZeR8/4TebOpoEXvWVEmsrhSjTGXF4dFDKTGi4ax/VVQcX+lu Py4vJp5/0Sd58EIvMPhF2iDM0yB/FwjGKQYoDBdm/ZOrbGw9no+k/P4ZWUu+7sNERRarg8Ufzi7 9r+YHVLZE4sINt37nF4zy7JAXzwEFemEZ7ErGVZJANyxBqOAKPAN3fb1YXvK/v6wNqqpXYpgJwp x0QxhiBUacn052via/+apw+WmodwlC0ng+/SjP+78= X-Received: by 2002:a17:90b:260b:b0:35f:b987:4dac with SMTP id 98e67ed59e1d1-369519f3559mr27533535a91.12.1779297509783; Wed, 20 May 2026 10:18:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 11/30] target/alpha: Use FloatExceptionFlags Date: Wed, 20 May 2026 10:18:01 -0700 Message-ID: <20260520171820.848839-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1035; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1035.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=unavailable 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: 1779297989539158502 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 Mon May 25 14:38:44 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=1779297618; cv=none; d=zohomail.com; s=zohoarc; b=Nv2ZQN2yd16gR+K2QyigPvJ8CAkFPetK7JuOI4sxmyXVqHgIwdNBmsOx+c0c2597fgubirTzs9mxs3Bf7kp242WpfZhFT4xfccJNf5zz3jbCr6RcEyEsBfeJ/xAYbfn/SALNkDt6weaJdShyGX2kGdbZiy33uAuqYvSA0TX2Src= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297618; 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=VlMHy4AJ6fYXHE5DycIu902MQUIkKK2KfRFOEQhLcy8yMfY607IEMV72HBFGlXehw91X/X1zlAMzntuCaa5TiXty/xn0lf4TBYP+IrEWGB9pR4uOAGuQ6UnH3Xbw9L3OXtIzrSK3PgRipwcF5ipJOOR+SXm/icBtnmBarMcrzoM= 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 1779297618806791.6046011883502; Wed, 20 May 2026 10:20:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZF-0001Zz-20; Wed, 20 May 2026 13:18: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 1wPkZ1-0001NR-SU for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:36 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkYy-0001vV-6f for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:35 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-3665b67ed66so3347335a91.1 for ; Wed, 20 May 2026 10:18:31 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297511; x=1779902311; 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=mptimgAnBts2Zqwb60T6Q5Sr2vtVne0soxTg6d/93kG/f6gepsn888mClF0ljfbQeW BXDICgeaMnp6xT770cpjJ/qmsdNXJ5TWn8c03G/YFfaFxz8brqFKkzFuqHZDjIVufX/3 0oIt/yLk5d0MgvNM+xEBgB0nJhARv/Bf7uD+tpsQEdHManoBDA1tG+tXKSDOPxkPTHIA 0+i4i6CcMb3+uGtKy1wR8YOGFVZiyqwCU7YJK2UMLQesma+RFKGkRefHMATnYcX0NU/B mRspKOo9F+96h7oRIsvDn4gpGluX6OHOiZDMBF5HkoLtVQ0fLsYTLLgg3YzOV2axsDm3 uDIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297511; x=1779902311; 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=W4v/xR0Y9miATI10UesUQlj4sc+AC0ppfUY1DbxAFuEHx0qV0SEfYGXy+uJOL2vZRq B/UZSuHMcSlbO9KT8NMGfBJD2elpUYUvfC8FsaSUWsNdIM/NIvfRvvMr8Iey6hI24+0t ToAlggJW4GMRhjK2J7BB+Y9I65XLDOxxb1BnE9DLYmsO6VzsCGW7iGDTlT4Ju3RLwdH1 gHaHOTP1ZTswfDCyJ74JFEFL7YqNuALFt8eoeIb5FMaNNQZP6pK2is1QqXcF2jdx761g jGaXmtX+fVCLEgR66VObhwrcTg+n99fJpVyoXiT+2Fou8JPr+8Bsg7DxVONuS134pRhO qyBQ== X-Gm-Message-State: AOJu0YyakevFrvmzW2Lr5zVMzog/RljqW/2CPI7yaGowqDuOZkyKVddl 65AROEAzCUxpyzCiwaqJVKd/eVeX38ETk4OWUFnxDxX2EzdtN5u2G4OJhzERzIrv+z2m4HUhzhW C9mbZXPA= X-Gm-Gg: Acq92OGDHQasj9JTsvkVzZM0rAEtKm+5fAKzyAA4o72N+ghCehcNbMm0+vVEmfXOFFL ADB4kzp5OdEGVb6Xa4f2KjqIyLvEcnggTm/afyPp+3KefqE3jyRZtytdxz8derQZs942PnuWV2Y PfhXeuKDgMVTUijnEu1fJUjQ3lPXbptB49djwdKBexqC2SCI5QLDMHyG7Q9rya5QF7wbTLslyx4 IKf9lIQnfQ9lNDxjl+9QUqmVn9dJ8Kq64d4fOSeoiuiADccADlTMe2fMoy1UHHD53YCKKBKPIpd H5HJSRM7ca/x17NAdfdtZbElKjvSJ6KiP8YwoWft6rzWqVZ1DB78taUq/pxip9LOD/uXA38ERkF gdQxElW5kuz5TmIRyt9ddQlHUA+QiTrcPbxzgQ7aIu7x5bjmh88lmjN2/gx1JnBiNd8QAM1DDGJ Vc4y/yAc1ZaoQVraslipeqL8HnmC5A X-Received: by 2002:a17:90b:38d2:b0:35b:9894:f6f9 with SMTP id 98e67ed59e1d1-36951b82f83mr24025483a91.18.1779297510481; Wed, 20 May 2026 10:18:30 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 12/30] fpu: Introduce frac_msb_is_snan Date: Wed, 20 May 2026 10:18:02 -0700 Message-ID: <20260520171820.848839-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1031; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1031.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=unavailable 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: 1779297620563158500 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 Mon May 25 14:38:44 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=1779297967; cv=none; d=zohomail.com; s=zohoarc; b=GvwqbSwOZosJhLF3/Gx8D34a4lz3K+jTONIDh0XWmSIPdjAISUH2SuSFPH50nmhtSPkO4uiwQDuXidjV2cbQte8DDMw45KxwWZ4UuVXmHleaBmkNxP6IxiCBHJk2MIOXuXL9SpHdAqPzVneffd8ZbbKU0uh8gKMfDBAIkK5VUYk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297967; 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=Aqb5qPv9z0eu7mu4BrS1zVldtDbGANs0wUkfo8Zc7LyjGxwBsqGCkwVTB9D2L/DKm9pFsHypYTb/fxUoSywCGPYPFZd6VBxiKpX1ATBU93+/BDRql4NcQnXdx1bHn3IR8q6SKA45hDy5aSWXtJOhn8oE50Y2t7PQlUZyV0TnN5Y= 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 1779297967014646.5618271571379; Wed, 20 May 2026 10:26:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZ6-0001Q7-4X; Wed, 20 May 2026 13:18: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 1wPkZ3-0001Ol-9t for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:38 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkYz-0001wD-Ux for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:36 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-366139223e4so2967343a91.0 for ; Wed, 20 May 2026 10:18:33 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297512; x=1779902312; 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=m4YU7yhyHq0pKidsR4Scn1fcOjIitjq18kjpeLw3Pt4mu174kvvyamd/VQqtm+VLm1 nOwUM6AoxGeKsG8D29WMHmK40TJCnD2+0haf8nQ5519Tsrg2bOuLmdBgy3JXZ8fwFU1H 0i2IbtuVFTTe6ZQuCdIVDhyKoeZl+eOtxF6lrml1Pu7q8EHg/e2o02g09sm26qbs8a0K LMRJPOcWLUfw2lI09PLeh1YANO23oq77ZI3S2FiZBMU5hzhC0WF48FRuJpSIuJoSAs5n FJVJaSH/uTOkw9Q08Os+BIIU7oKhFVQIJrEFr6PbTCHntipzK1HvcxldVAdgrumUQKiK kJ5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297512; x=1779902312; 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=I4SfhIMTje9dSnk90ddb+3Z33VvcP+3wRQcQ/Mov6+cw5c8EwWrNd9NEANa4Lfiqi2 INQuGrY55LKBdcScg5qYdIfjyi4svNe8Gj9g5EG+5sNTpst7LG1L491fosL2y7kKUk+x OAHlWhCE5U43o8TvwTfpBWdMMiOuJd2A9PnKFo5gHycgA1M58tTBdm93bYXP793RMkvK xX3qgIX+W9Bw6ZiskfqRUebm8McX+GpteITGYYMNwi1imdbkGlFvlXIt9CUcK40YHGqt O1tkbeIaBHVAlHLsI2Azqgy31ZIGW+yeHdDzHkYWqaP89ZJjpW6LuugLy5mXtLuV2FsP onww== X-Gm-Message-State: AOJu0Yz1Y0KK1JD8RpZtSTUH/BgvNWMF+dcM2MQpAn5d18OEfH/ZzVNC Ch5cnxCUPuqqYvEHNS/rhE7YZgnd8VLh2ycS3+LsGhEXfTpZ2Z912vs/YngMaCmGlW0WE0rbJ9Q HIkwzYjs= X-Gm-Gg: Acq92OGWn0NemmOlWNCmNZS5fkre6sUO+mqSeTek8SuKeQvIbzKk2kp8lI3kJHs3uVY I0sW1/kV54IfBnfAhU55gzToT1kuBE7cWpX40Kq4qxozxLQbuH3OFuqi1StsUOPiO/he9KTSQeJ m+EnpVCYqrkDYI6HlKOExXpTIqiuHfKx3EnJ5ICoqASgn8H/mTI8PVvqU+LjkXZ8uQk5tLumesS tyb5YuMctnxNsfm1U5h2EiOj84xUxPXGCB10gXe8Au0pnc/jkRU1ePBlCc8sP/YSjF3mTiQnizU 5mQsPg8NqNtm4y9FOA6RyAFu7bbtxSUAuK+I+u4CJBqwEyWvOAvOUwIEQIO4534z4/YwlRV0l8f /7OTC1N1snvUxQ6TxA4jvE5U4U1+H65sYtztR7VO6X2csKVzm1tq/iW6XvCPtCVnNKV0JvKhBhi wWfEp5WsKoZk02w/TySt0aFAZs8yri X-Received: by 2002:a17:90b:57ee:b0:368:147b:536a with SMTP id 98e67ed59e1d1-36951b97c8cmr26363833a91.14.1779297511478; Wed, 20 May 2026 10:18:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 13/30] fpu: Introduce FloatSNaNRule Date: Wed, 20 May 2026 10:18:03 -0700 Message-ID: <20260520171820.848839-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1031; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1031.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=unavailable 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: 1779297969146154100 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 Mon May 25 14:38:44 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=1779297643; cv=none; d=zohomail.com; s=zohoarc; b=lTk/0Zit4SJxyYksUzNFmuc2DKvUDyUaCsd7MSMDjO4lkM2k4+Ep3c6eyQML6yn7ZbTKKMes2nA2rgB6cmGZc/TXqED9tx1qd04ss0WpZ0gEZ4qFP9olVD/2TjQxNQFmZ4NJxXtDM6ZQXzF+qljCR4AlFRg6mev5cZfdJEpmDU0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297643; 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=YTPZXqtK3XozF1LMcOx4R0+smVKc2xsDKam+rIhl5b+dmEiMMe9JWVBSo8dtWyEPrx25oDb5hoBp05eTxVNYNiGG0XywETNqHuht+NxlyIe4pL3L2bK3ysN7Lk3RH9W4c/Dx8tCbAivg2TFkzwLIQACDkWE4MQR7Ifv1eAqU5to= 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 1779297643862150.34990831893606; Wed, 20 May 2026 10:20:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZ9-0001Tn-5u; Wed, 20 May 2026 13:18: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 1wPkZ6-0001Qh-Eq for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:40 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkZ0-0001wr-CZ for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:40 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-36974221f93so2743018a91.2 for ; Wed, 20 May 2026 10:18:33 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297513; x=1779902313; 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=HwE6e6s+O51aDV+qqifdVju2819fDR9VYRr5nbd6Rtn+M7byCFDrU7vB1PbHw9M9VC 9S/iejBq8gcIzokXy1ue6RNPi2k++Ncr22ngSv3NC9W7+ZdEZ7itsbmr4R4p9YgzaGhC Bo4RrLf3WxsZndvOXKNiA9Mxg4Ri5xWJZ1fTFUHZKBpLG25QOtuUF98/ebBh4jOHksGc 4UOzpMTPSlcyytYTXtwUOSubimCLVKhyW//LcCAJkc5CgvJPPbW8PX1l6U4P8AIQg8pi N6m97ELiLbCi1p5rnLhol9ABqr1WKSHtgd/6gflFAETNJtILtlNWVFtFK7Grhwgz5NIw gNZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297513; x=1779902313; 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=CRuTpdoqbK/4u9TzOLga+UJgcfk6PiV3tdVxhi3lyUv0c9C+N8mvYziqdpIN3vGaWe J3lS53LuLBu1l8akWgPWtLBXirx7tTNgsnsknF3kR7gAfpGIJ7a1ZJaZHY93A/qP6p+B pX7DhGV7Pq/z+FGnBd4qCuKbBuaK2ZnsHVYD3okrmFObUKrtHntVNtX13N1krDlOgRiL hHZOP4yoYJm1rxFeFicJNihpZq4zaaexxTrem3JOhoLJvJjIi0xAA15cuRToLZKtYPjG EzMMkQRVrKKYjDOeEJ7zJsaDwWXLFcDpPh5xpmtiSu5IzDY17sSwm2IUoEO3Bqh7+o5d Dncw== X-Gm-Message-State: AOJu0YyoDb/CGIk2TO4mhX0SAr/bN57xa/6jHYy0DaCL+ARyrkDYQWl/ /qh3v/3DWyCxNKnz8yt0cUOqAzY46o9fswaS5TeHOik6TlfEocXt6/fk8WtDz3pi3vPqda0rqZu 9jwHJZ/o= X-Gm-Gg: Acq92OFKHwzAZZy2YEitlUh7pjKKyorOf2+uAxrYJ34q+Vi3DyqgPoaS0VtFpBXGYTw ewMK9ltzmGWJeQDXS6BCfH+KyZ1Smn/jr4lfNIMdK6sPWbgV9eil+/DblRhg6D5L0v7w8WX/53e cN3gRI+E7RO62xBmhKSM8iEHMapuSi81wnoIErKPynikh2RcgvE+vai9WckFWx1q9x1OIB5a4p6 bqbnryPlWZ2ajtFnJOuQ6W+ZEVtJVcEG/W49gslFDN+TKlJ32NVn7FZ/ER8KQWtvDbuAMNW6XDn NnC3uHTQUhXkSc2LrwUdeYVCde7EzXiSjgi7xthZmfzBXNQtjyNfWDJLCw5/dtzzSAS7V9UMf3s riD1wvyB4iCcYFdj3OAHQX5m+rzj2+GtdVLWsCOZv476pCMM1QMcRkkaWWEIk3nS17VjH74aqnS 3B9cdKeqcAmkF0BGkHZGgeTSN8sJUwJ35fbltwRv4= X-Received: by 2002:a17:90b:4a:b0:35d:a0b7:9608 with SMTP id 98e67ed59e1d1-369519feb17mr23970154a91.7.1779297512413; Wed, 20 May 2026 10:18:32 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 14/30] fpu: Use {get,set}_float_rounding_mode everywhere Date: Wed, 20 May 2026 10:18:04 -0700 Message-ID: <20260520171820.848839-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.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: 1779297646451154100 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 Mon May 25 14:38:44 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 1779297561746563.3976551222706; Wed, 20 May 2026 10:19:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZ8-0001TR-JO; Wed, 20 May 2026 13:18: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 1wPkZ6-0001QI-5o for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:40 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkZ0-0001x4-TV for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:39 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-366375c4076so1991966a91.3 for ; Wed, 20 May 2026 10:18:34 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297513; x=1779902313; 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=Nelbznqs6D8CT5xGHK+7YBj+EHzZEfglRKTpzkTsGqfze2OFCiq8SZ5mmNyj4MxSn+ zrMld+QXiAM87kop0n9t6iyORLXZDeJQ1cW6P4QPyWOZXBCRBD4p2OmUNBtfyrxWSkXp LiEzC5DTbTHhzmE2AtWVdZY0rNs/G679yKYXZlYeNerasohBjkiWjrx8Qs/JdEJW29ix 0r7jzO7j1txRhTqZGpuGwlE5hnb9d9OvSbZi/HShRbVYVrkxFpNdFddx8FcD0ZpuqkXS UtMLEkyVwL6DflsH5zqd1IjIo/az+BNo57zz+At6CvFrtMYM5l+76o4l60Vq+lLhXc5s AoTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297513; x=1779902313; 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=KGypLz3VkwUyqy++ivk0cg9SRuLoHAtDqd6UgxhdwW9xB2ADFXiJMo2Wnx2y+epIpX NQeaSxOnT8sa4Dgi2S0RTQMNjfWhloheNa08koylMMgJm9QJMo+4HcgzAdvEwa57zYRs 23sWqmPakgMzQ3AwxbFVp3Tq2eS1e3jOMNAwuAPH8UQ6SGK9ZrjHb+RpScbrmZItf5mn nhwJgX6Ijm+bHhHi1f5F5ysg9hoYSBGlZwRdj8y/4vMq2jfr2o7OE5M+eDlx1vHlf4Ev a9olCR3pto8x32QkcMc7NXCkKPZNYESbMXFuMizDCZTgTd5VTRsMGdusfzSBBjd8VFfQ ZfAA== X-Gm-Message-State: AOJu0YwiTZPu/rQ30qeTjtRYTw/8PBPDw4BgWEaTXlTXUm7qpQ+7pVHA OMcE7NMj+I1K5j/jKux3WLSYZwwDQcDD+PV61IZxFiDPVuIZWASkgLVpGToABBjMo1ZhpDOz421 H1hzCoMc= X-Gm-Gg: Acq92OGHwe5/QpIrg/5KG0g5mPDBsHGLT57hcgzp+Oj0QSl6wQxQAhZZSmjAOHRlmVS 4xt+RaRjKCn5Rm07JjQjVH6ZpQknn/0lPtMsM1/OSJvfe4zMmfGtZ9DNkSzuxVicqwgpUXCPRIs Ga/ig2NLXNDLuQz37Dqgvwvkwu41pM8IjLG1PEFRJj4Y8IwTodRxEdzZUgZa9JKJNlGBaGM+gh8 ofUlhbWCOKSvWHWBOhifw2OiE8I8PmatLJW9uW5/gh0K2SbYi4alyzyot+wk/51B/DVnrczACzM AhTph84A68tllsRBdJjYzdF4siVT6jwp7MmshcgtqwWkd1ei+eMkojdZM2VFnq9Pp6WxluqyFVg 27+g6KyOG+49s5XspvoEMtvBV33elwKRib0jXB81zpao68PZ8NxRvIAE0Drb1okWBPGC/1oCV68 RAJietF8u8cDmm9qQOmAC+5cgo6xC8LTFMD0D81YM= X-Received: by 2002:a17:90b:4c49:b0:369:bddb:79bd with SMTP id 98e67ed59e1d1-369bddb8547mr13771020a91.25.1779297513151; Wed, 20 May 2026 10:18:33 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 15/30] fpu: Use of {get, set}_floatx80_rounding_precision everywhere Date: Wed, 20 May 2026 10:18:05 -0700 Message-ID: <20260520171820.848839-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.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: 1779297563015154100 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 Mon May 25 14:38:44 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=1779297584; cv=none; d=zohomail.com; s=zohoarc; b=JlSeIIhl2k9zyU9KtXX/lMzb8im9UJq1riUqfKUr/6R9EqWFZ3v0XagWlXjY4bcqIIpHqiaeb8vUKPPmaNpftJUK8kIhfVp857o+VvoTbBrm5C0s+ZJ6roZ47e1F4wWALrr4KDnuAlssD/QZzI3eoVza/KQNYLOOAnKnf+KJ8YY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297584; 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=kWUwmq6QAFolKo8NPGg6Tp9X58NK64nifFgjQoyKNkul5+rik6zDrBT/ik+U1NGQCusX2NawlVg3pdqLdQC/Q13rVj1T0owglpwfoRmHQ5U/FXB8sdTn75RMXkElc1zN+dOP3rT3Z/rqzECc8yjf9M1LacuEEhxWyjnWOZaXApk= 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 17792975841464.658003385856432; Wed, 20 May 2026 10:19:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZQ-0001hX-Rk; Wed, 20 May 2026 13:19:01 -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 1wPkZ6-0001Qg-Ee for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:40 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkZ1-0001xb-Gw for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:40 -0400 Received: by mail-pj1-x1033.google.com with SMTP id 98e67ed59e1d1-366375c4076so1991968a91.3 for ; Wed, 20 May 2026 10:18:35 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297514; x=1779902314; 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=T51fXMyzBHgM9tR+FV3NOj9iEUhqfpDHbMC7b1gu2Afug/RgXy4k/2PXlB4Vmt2M8J /kBRsviKZKEYtTDYdMtZm5nPidJUieAZvlMpIWLstt5fWP3MjX3WsNc2MAP4ci6oJ8jG UcfptZj3i0vLuZ5XAiheFOn5MB6r1sZu3D0hPTNQp1VFGvqvykXzWF3sKs34A6cqg/B5 ZQSKZvm2ayM70dgx+QvbNzrk8PzjmBBf3UDfo7nwEWRYtkiv7XZHR/AwqZBq2Lmd925Z jJdCh37lJQUIb7I0apWkuyclFguwoM+IhbbOtTmcLl5S3iJaLocbRmy+lP38CtBIFdId HXIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297514; x=1779902314; 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=gXUSvpSyyRxdY/K/NZnkOeyfI75UaLsDC3nX4n4JP4gG579oTgIurnzprOUwlPQf+v 2l5vRVlLZYbq52rOVpjyLJHlaTTcPnxRQfyEwb+KbuzC+eerSs1xNMTgAWz060+8tvea LAHB48oWoVGeHZxCYiF+EUgbwBTcqMPnE8eif77OkmvThVqBOLLvTNb5RJkgiLw9ZHUv 0wpJUUd1m1ZPHWNFE/RziSGCsirP+3mAKJqINsrQYJgyfnH1nCq+WvX7tqnUd4E+B/Mq WXtn3Jj56hT8+IvnaIhzPJyNh7bVAE5rWTV9PxpcTblhrzWDAKIG0d7Ns6BUvhDasok4 K/mQ== X-Gm-Message-State: AOJu0Ywv3rmdrFIIoXYTSc14HBrfC7BAlQhncmWctTYpaLLDzy15g9D8 cpgqYLTY3RAYG+WbJgv/lZghf1c4ZJdjthLTaHbsbJwbu8ZResVCDW1xF7nJLydiopiUk5akAE1 Fo1OEkts= X-Gm-Gg: Acq92OG3a/7HD7H+PhJ6qKu1xjPi65KViWOKCeV+yN/JMnk80M5VZlG6BamcIYc3Ewp KRxCBjkfbj0z6JpUJh9sTBPQMpgUhRHQv8G088mJ8wm/SZ9RW5zsRijPlY39BHRI2OO2fUvclhn qJHGdsoXF36LATv/zquRP0C+9qWlQU55Df4C4JyKIntkGVe0eEac/QVm7/gTN2Gwcg2DhZfR4Qm 4PZGEFKuGpwyS3NOcrf7QxYuCkCzbatus0LLytajmKW1F4hzDLJ4qpVQntfhZ9H+75Ko4Gblznn sHy57temRhwJDXqn/f7VNCJSFzuYquYC50kKjebQ0LJLC9kr2BxLjd3c5pFWsb+bCmw64tnPvZe H/svaotZpuNSQWuCVliWG56VasUqc3p/BgJY/fvZcJS0ohro23PlVYQk/KwG7HwZCzkAE3cSFzx 8lQ8uHAjttGP5ndi+blJiAijEIOOz1CObEkeHFzSo= X-Received: by 2002:a17:90a:602:b0:369:96e8:c8ae with SMTP id 98e67ed59e1d1-36996e8d08dmr11515642a91.19.1779297513805; Wed, 20 May 2026 10:18:33 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 16/30] fpu: Use get_floatx80_behaviour everywhere Date: Wed, 20 May 2026 10:18:06 -0700 Message-ID: <20260520171820.848839-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1033; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1033.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=unavailable 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: 1779297586125158500 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 Mon May 25 14:38:44 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=1779297558; cv=none; d=zohomail.com; s=zohoarc; b=QlDtGe/B+1Z8IObpveelvQISCzGHWIh9F3i57ZRPD51tX/fcwTnxhLXenBjc1AImmtz/jyouvyTOnUp0Tn1f9GxBI/Rsn0jOAK8TChDIrsV8yCGUGqBQ3JruUFylVy6iw6fR5hJNDgTs71ocrN1hkviIPGNsnC68g2KQ6p5Ytls= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297558; 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=dBoUGCrfLZuztb8w7oEXYo9hUkpW4XOqIEHg4arcQxXfJdyyeMKQpn8aDsb561kVy/QmgfHfYtg8wcevcSLEajcmOMaPilwKnvmuS3xVwzWWKQgFBzJ0DMiE25iTG2FlVhiYpJAVeudOQc1IqyylxqapvbeHrQqwVls5OLBmhKs= 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 1779297558346268.521831415727; Wed, 20 May 2026 10:19:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZK-0001cR-5F; Wed, 20 May 2026 13:18: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 1wPkZ7-0001Sa-IT for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:41 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkZ2-0001xo-4Q for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:41 -0400 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-36643b96b99so4823898a91.0 for ; Wed, 20 May 2026 10:18:35 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297514; x=1779902314; 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=vzfMCNw1cOejXQQ9hFqdLpu52Rvb/WaoYpSkDdxxNwLz9i0K3x+45eYbrbSY0e5MDR /SwBAEENf0+CFmw8LjndpK3yicorehGOD/aURY43Iv4qWIYGdEYmp2Wr+jnDOJKarhYq UYmqdktTtp8BQWynPeeCoIc3nZyB4DZJ3suKr2kyJzEZQSHwtnZ+L5+pcjdJ8WrAii+7 DLlCBVCoC3vzui87YS4oAEpIcW2MwZJ4YhB71mX/HbU6EL065EOWNEiGMWxyZDiz3ii6 NK94bRUqoW5HXU6ep6D9lK0rdt95+scjzMqnclPHsCpxCAOfM6HlHO6AlGEXjlJGGaQG ECGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297514; x=1779902314; 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=RCckdGfkqU+t6Wiftyq61lA8JEIz8UkoC5do1SCz1q13Oo9gYoD5aVaBULwnHh0ZkL 710ieJ2DlohT7ucaxdIzjCKs77cVvW8sn0rbcbLsJRNmtfOayvEvZ68Djl8VRN/bF3mZ WFCmtf2OtESKk69X0UGIarMkvH5tTTvxzySWKWUAXWLWiwMSCLnYA7P5mNdMZAYDTGdn X0RjQ/WCXz2keQbjEBA4wRSKCm67AotairnXIYGpF1xIIFUNeO1XsBHQtBp4XeKVumyn eWeBFqb5XxKDCwphfj6bUMdyYW34Qjg5MSUVKMkMM33ewtB4jKmcUVk2KMHEpOKpcTaf DdcA== X-Gm-Message-State: AOJu0YzRmldyL27c8XIGjwZDes4NsUBpAFi/GATGIgeZsyGzGuX/PKY5 /udUAEgfhO39Ii0LPakHAFqPz+jOlXE2AAcePOuglQ8nxEsHcn1K1V9nrm6ZssBp/EqIengfM5a MxvhHJTk= X-Gm-Gg: Acq92OHMMvRI/5Kn155mcki+XFmB2s5nwgteT1Tq0Yn1wLLbldbjyeRcd7367HKqT5r XIjzluhUyVLi34RbuYRwekV2/JFmeLkt84Lar2veA4OYMVXo04CFdNsOHXAFPyI2IiL82Z07yLp Y/JU0TPQHCFcBnk+3sLSzgpjggCE+AdMrFvOrydytarUGc6/Vz1ZjmXVUi66M+6vVPk+M0yxfWD h1FhzwhSBTlzbNW6LVIFnU7GPffuRkqQ/25aSMgBpqwdA8TC4O4v6/pOhh46Qn1Be3erENby5l6 qsVmFKPCWjMlvpIXN9iLxBDsYB14eRgh9yTJAEWwxrs/xpIbnGyK/xxChDrzZIbQMce7CPmeLId llPppujgz9PxJpKuO5qt9mJhPlSxS0vRoo+p7iML/QQK5ypumLrbImTUzOQzkIS85SszIvDFrQJ BNOiis1mLv7O80Ntmf6NxiOjWCE1HT X-Received: by 2002:a17:90b:4a87:b0:369:d22:4788 with SMTP id 98e67ed59e1d1-36951dc3ebemr25948746a91.25.1779297514503; Wed, 20 May 2026 10:18:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 17/30] fpu: Use get_float_2nan_prop_rule in partsN_pick_nan Date: Wed, 20 May 2026 10:18:07 -0700 Message-ID: <20260520171820.848839-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::102f; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102f.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=unavailable 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: 1779297559823158500 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 Mon May 25 14:38:44 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=1779297700; cv=none; d=zohomail.com; s=zohoarc; b=AlX+3vwKLgit27EZEVftrQc150rWVSRGol+q0cSDXpxN2R3QdSJH7F9U5DKxzSPbu/rmxqLBLyPNkU2C4/JM372YWKLBu5E+0Hvz7AwHTC+SDdMIjrV5pSDvpoq3598klFiyoXWvlD2Mrl6+q06z7VJ7I8nZvM3JFdiY+yK5Hvk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297700; 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=inwUlED35nREyeo2Fhv0AU1WF0zCvO+dyEuJ+Q+LnI9+iZO9Ys2AVW1cpxWe8XaYCejpmM7SZKQdQ3MLru2+PNEG27pVggBVzIqbznQR06XKF7sECX2eadDi1MgmTIsv+Ju4NGZ0ZDBHkuE4rF+mcosvQ22Ec6zy60MNalBOH/0= 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 1779297700087492.1120071280292; Wed, 20 May 2026 10:21:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZ9-0001Uq-Mw; Wed, 20 May 2026 13:18: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 1wPkZ8-0001T9-3r for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:42 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkZ2-0001yK-Lv for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:41 -0400 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-3664df30f53so3060440a91.1 for ; Wed, 20 May 2026 10:18:36 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297515; x=1779902315; 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=SESmsV7CddNMEWl22IglVFrBXLnzb717Bu3UuFGctfbpYsCZ0oTVHAXMlNH6Pqew4P Uir075+3rxZO8ds4JYwDfjNxUepIphO5WDaznsPr3tXN5zkFk1XC7gA+MPQOHex3eYIC Vgi9K6oYo6g+vv4e11TVDzkrg8IECzO1YG2Kzl4iju8p1QL0ZPde6vIeyixIfdhz4T6H Cs501BCp8ad+9BDk4K+zsJ375zJFm10xzbguZt/T+suCh26DjS0X+oEi0n66whKv3fbn FMO02EmaDRarbE28WM9kf3Hxa9KOy4NuETQl3/AehYNS2/OohEDGExDoKvodTtBZBsKA zEwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297515; x=1779902315; 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=U+MQU2V9VrPlrk8/QSLL7xvnQOusUXisobpJIEx6XFspn/uupi4I5QR/Jof979IIdn qUwW9SD2QWqXAVNRtXKvUN2hrsgL2YNjhJgI1Xa2lZwiEbJGdQgFeNHKD/JawZBuS1+O 1InGi/H8MA9WsPtDDjjXG+MsV2TdBHscJg/wVJKq/28+LI3UuZ5fbB/aSQAuSBM79mmQ FMH93bxbVmYMHkUITty3kW8fVQK89m5insfFSCVB0PWFAPrRs7PwRv3V8IB9xqa3+QFa RsU5h98LFDjE5ECyNdsJn06Ma0ShgJKXnzz3yHqbiO56CAfvhby162Fhx8OYlIJ2S1Kj ZGCQ== X-Gm-Message-State: AOJu0YzUoJr38tIS5tMI8bVkykiEs1ATTuIgm0dN3jKfH1RoksQ3VF7t k3wvOEScQmok39e3SMKxWkydRoGml6hPbRJ3R73TaL4sg/hhPQ3Mn0RHb0d6xgn9lD/xZ6+S64L 13+Fpdkw= X-Gm-Gg: Acq92OHyk9K+16Uc9GdlIGK3olYb7OV/NUfZn1e/T/0CPvemIPmvLLjh+XZEC9HkeaL 6v/MPcQd+Hj7D0fPyXrD/bl+hCDmPF2uXoaFqzpjCUk3YebwgCyJc2lCQgmLRmo7U1H2sWMioIP EOjkLVQoziWGtj8+DjIFgsSZeSf27C/18GfjOYIcraJbHNDJ2Ola5C53ywKEcX1beNvMI56oY9P K9QT0ZCXIPMxEWIRGsgpsqJNcM9SEWMVcjjlJOJRmFbE5zZydCrzJhQXkUCNMIO1CFMA9KXSSMw W8Ira2PV40imjr7sxQOL1kC9xmX92KmaDBrydirVDtL/v8drYwceDP/o3RDgs0eGcmAloz4QVpe Ra3SM4KE1zIKouXLXAZ83Cu5VBD8Aw8VH/tXeonTlC01aLHqHNZQYYazJQIDLnOnUfRT9/NwAxE h2EyOppRNEtX44qJXJoCEDaPngvahn X-Received: by 2002:a17:90a:d446:b0:35b:8d89:719b with SMTP id 98e67ed59e1d1-369519af686mr20885994a91.1.1779297515114; Wed, 20 May 2026 10:18:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 18/30] fpu: Use get_float_3nan_prop_rule in partsN_pick_nan_muladd Date: Wed, 20 May 2026 10:18:08 -0700 Message-ID: <20260520171820.848839-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1035; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1035.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=unavailable 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: 1779297701542158500 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 Mon May 25 14:38:44 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=1779297767; cv=none; d=zohomail.com; s=zohoarc; b=C2RTZmwNK+hzr6lZRInUwJ5a+nC78aflNL4ZNoDXEiaxeH2A8UEoMT+uX7HMRuPRaMzar5AcYGITHfb4xZr/Ed+lFtMll0vZuZ7JtiBTlIyXhDsp7utp4jXt6c+NlCb6sI5jojKTiq9myNp5D3i70fCMA88DL4XSZqyRccZ4Tqw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297767; 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=H02plxcy4S4cZOnC8l1ZevBPf6U9gurOQXXh2tojhNISC99mxPMEIhGBQlfu6Q3BrVFJBScQei3vDHdOqOLG59Lwgnqw4xSKMNrdxDaF9eHbRncup/gxpQVS83RxBMNvupAsVW/6jFTxJQEM6JhzwAUhzr/gD2nCLfamGTYYS7M= 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 1779297767811609.8835091285948; Wed, 20 May 2026 10:22:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZA-0001W2-E0; Wed, 20 May 2026 13:18: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 1wPkZ8-0001Tb-RX for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:42 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkZ3-0001ya-6A for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:42 -0400 Received: by mail-pj1-x1033.google.com with SMTP id 98e67ed59e1d1-366330b6751so4100909a91.1 for ; Wed, 20 May 2026 10:18:36 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297516; x=1779902316; 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=Hka0hQj2x7QktpB3K7gwYBg7OFJw8WzFkKwQ2Whcs9seU/5GWeyEW6whi+5m3yHHLv uKQiiUN5kM5J5xJvT/F2NJsJGrChOagrr8hsvldZEqmwTChPsqf7+9l0x/3aXCSyKm9p 4oOLYLr4RgbxcadOL3SNz8IGp8gja/BIwP5195znQ0sX68pB6ekwRuF9vYftGmXMB4iQ UppM9DJkrhwf/Br3py99uY1wQ4V1xqaJUZQ8zPGvOJEFtR/5NebnqWALU799O/J3aGBU Ut2WiKnxiCQw7tqc3YukXw2CLTwYjVt5GhClQ6ovkv/j9cM/lHV90+CQwZe9gyoykoMV EUqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297516; x=1779902316; 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=VOJcfF2ge0jl6T47bcVjUuBPIgaLc9lfKapDsabgzQ9f+zw+00QBZpaaVRVvUyjXyK iiNv61bQsbPzQh5cHDIywxTJ0gLNYlXsYp5yeg0DWS9aATX4FHNQ2SQLM9MmKUfwF46P ajVnBrX0bbpzaOX4Rct5RWogooPynKCfY9UNylM2cIap8rKfpFm9YFGUhNO3vSfUDcUm zPWqIg5SmyQwbQvw4JL3pEJJz6UKmEtYG+m7jX+bTk5Fx5+wUJskWRJhhowZFwqbLbqP hnu4/Wup46Rcqu+RWNhsWHIj41rbeK9Vg2wHas79dQ++Ga7LY/JRwCVUQ1g+utzRLWi1 nalQ== X-Gm-Message-State: AOJu0Yz1t0vHyfC3GbOUt7Yju0GAMOWOjKcW7JpsVGv2rF3rYBZuhq6X 0KWBwpQZXQmd2xJ2hTKPsOLy6gF4nBtLbI5yZPBTdxSgnEiWWo9hd05gB5/l4WVkMHjEj14G6bS G75MwgTQ= X-Gm-Gg: Acq92OF1sQizT8aB8F1uPLWnVU46qcNEBI1haNQlgprBhreoKvqNfTvVTKKKIfGdIxi B9TeGSXrfHos+410tlQcKoGfvKYhCn8Uey8ixde28I3q/F21c65vRGeVMOGf91+QCBkmxmL0Ogr tS1eRInkRhjs0b/9ZLvGMjVo1Dc/3Z+b3DhekQiiFJVUxQ1nQRHARWHLY8pB4u0OdPSKw5wF+jU /l6WY8HzY7BWzl6rkwKD7c3FzgxKy43iPQcx2X4H4uutq56SlPpPT8brU6fafzEPEJ4vttqVQWY HeXHAXJzzhxZkYtWdLILsyuyWFZq/h65cJBs5CzldUxDx58qaMbp7bsAKFEZ1zhuOb8FWXn5tsn EFWd9vbCwdH9fLmqZ6f50slgzOMY+t/M5WSny+JzdMsHzB0MnNo955oOFukBNa8zlqu8EOVEqfB J2nREYN4JQgiHvp9/aMqfSzOcHcbK1neGV30UTCQw= X-Received: by 2002:a17:90b:560b:b0:369:f48a:f245 with SMTP id 98e67ed59e1d1-369f48af48emr9846534a91.4.1779297515713; Wed, 20 May 2026 10:18:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 19/30] fpu: Use get_float_infzeronan_rule in partsN_pick_nan_muladd Date: Wed, 20 May 2026 10:18:09 -0700 Message-ID: <20260520171820.848839-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1033; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1033.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=unavailable 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: 1779297769057154100 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 Mon May 25 14:38:44 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=1779297752; cv=none; d=zohomail.com; s=zohoarc; b=kQnarhJrXQK4bUz0JOIoiq2piAaNW58YJIrWnfof43yX8BsowhR59K6vIuTY8mziGV2K/UFBrxVTXOMejWr1SwMRSsbOFoFAyHGeENdE7ZgMH5tP5Sik1sKCyzRXkyoUJyGlzNBlyuxhA6tMprI1lLz9bFxZkpwVp+aQO96397Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297752; 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=NQEgBq4rZkMTWPwg/t1k2UrwmWiUYA0WwtgpZa8VSp2n2ong5W/IhIpnI0C/OQpXQ+dLFYKHy7Ou+bV0c2sqsiF3y1h4vm2h+3Baaay85I9xfMnmzeu3nTo9kyzpwvmyKcMUwXK8Sa1gC2wxKfB86UkeFgpYTOy57j7dLpsKbRs= 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 1779297752976810.8863054870084; Wed, 20 May 2026 10:22:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZR-0001hW-1u; Wed, 20 May 2026 13:19:01 -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 1wPkZA-0001WQ-Kp for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:44 -0400 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkZ4-0001yt-DB for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:44 -0400 Received: by mail-pj1-x1030.google.com with SMTP id 98e67ed59e1d1-369576666d5so2407013a91.0 for ; Wed, 20 May 2026 10:18:37 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297516; x=1779902316; 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=JdBCnpGW3cOPhOjD97g+KCpBgBaQeYUDkunHl6gVrVGO/lYincfvRym2ftjDCkN7ZY B5qhC2u+z9RsZPJsZ/sgZHszrVMfqFjLeBAEwsRVzyDo8zZGzqruns5Phnhlsb2zi4iC H+sb/7NSA5Arhw7I2FfE8DuFyi7sfglGqU6ErfWtZ4u7SY/zqbLgQ39UJ34qQlVH7ZSm cTtbViwt1xXnxF9EHdNfs8nUazTvgTQ2BM805JmtvII7PAhW6N21Jl6tL1k1j1ezo8Y0 MFOLl+Bs9GFigWE7eN4rJJ2szVuBbgT0FbBEb+kmrhizmY6cFVb1RNpimPW4Yb7p2KyB qzOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297516; x=1779902316; 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=fkAm/21cwWtjl4FoZUlFm2IkSUgOFUAvD7HwzLd8OvMy1rsS+Uflz+QaKR6gmjsZSq GJXjqG3RIF6SNMq7bsOOW/EhTstWNiIXBHhBNWkc+GjUKf/t+3KjpxsjhMmyf7GcDT5R oG3i5UfNE20RC+wL4HM04+9TgVt+5iZtlqMQl0GFjDBk0k3yBABUsVslNVrkPcfpjCGI RkR803rbxwwUvkf6A/UGWyeDnN3oLydETGjWnbtDT2tJb8m6e+axT6xIKiy7j2MO6gx7 g+0mElbVeP1YpEhKRsW9a0WlJq49SSaNdH0a5hswhQ2fWLbUHUrH9rJN3zEUZSkB0p8C 30/w== X-Gm-Message-State: AOJu0YxRePbhNLVyvfgfzrhlohFXTJOFh2bJ0N/RBJc+KKJbLuUcxsjs 4rYernwUmmL/nBv/WOry9+M9TZu497Puf5OkqyTbvlS7zdnKu+8U2ueyMASy8MRBJ9Vxh9m2EV0 Ql1Cq15k= X-Gm-Gg: Acq92OGSmBdlQXq2AzW/pYDTy3dnP7WWJtX9CWLNhgJke446aBuOK215JyanPYRuzTa pjTe1WCZWPyzRZ3DARGEuCrTuAMgzHfju7yc5SmZ2hgqf5p1leva79M23FccqnoLDw65DpD2F/O m7XDTMFRF6p4F+a6ElDxoOHC/q6Fl4dqiORxOd3JWh4zd4AU1lFF6n4n8WgW28IX46Zy5ae0Dk9 x6qCn6sZGw64KiqfX4hj/mxG+737Eeu2Ju2r+G2QajbMcCZH2yxGrIZXRCGd5aRQoivKgudS9lC b6RGmkJKDjjBPXlYXLcrEWrwQFBCouGSMsdydAvD9g1pezpTjpG+R9xmyA0x2cyPGE483qaOumf lP+HtN1W/p4xW6GAL+8NQLvUkDPz3iNzNDlKCou+kPOUeTm03k3OrhogIno+pj+lGXW50LISvtM ILxHFo3pViDcFKTCU2pJAY3dcEmmNp X-Received: by 2002:a17:90b:3505:b0:368:9da3:c496 with SMTP id 98e67ed59e1d1-36951ca7638mr24829565a91.24.1779297516353; Wed, 20 May 2026 10:18:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 20/30] fpu: Use accessors for tininess_before_rounding Date: Wed, 20 May 2026 10:18:10 -0700 Message-ID: <20260520171820.848839-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1030; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1030.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=unavailable 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: 1779297753784158500 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 Mon May 25 14:38:44 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=1779297553; cv=none; d=zohomail.com; s=zohoarc; b=oF+iuUxJUZjzioqT9FCjGfezNfJM5ozEMyZi0WkPbN61dtKcRfGmsCO/yFld6hIFuXV2OH2JmFIjLLiMgik4WlAD7GwWcICH8WUS4RzvzxFyUXW4N8SUkPWIPp7RmtGOvWVjw+MS065iIHSQcPZlr0tnNTfdTyvx35X3KaCO7LY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297553; 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=RnqV3hd0PnkDtDDEMQa4ODFiKZlIs8qcXAnvERfccpkIMJIwlTQa1orZ2OFbIHSp5TK/dQ9ujs371f9yK2fzj1vJBEKujfFPrOUuY26f90dAiRkcN9EcizJh5HkGebR1TU3tS2lHehG3kh5cCa6Rue+OhRqZVT8cBQBym3dcmK4= 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 1779297553605270.52823566129155; Wed, 20 May 2026 10:19:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZC-0001YY-Fa; Wed, 20 May 2026 13:18: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 1wPkZA-0001Wr-TC for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:44 -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 1wPkZ4-0001z4-HG for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:44 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-3665b67ed66so3347411a91.1 for ; Wed, 20 May 2026 10:18:38 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297517; x=1779902317; 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=MGZdltYC+oxxL8yqa/07MQHdnXHoC9ujszESok4PxB/9zDW5FsfqOx+IqCIhPG6U90 AejutDZzst4KYjvHuCYPuCKhLIWOePiJKHyOm4RfUsljJwVEQMCt+iPx9w3ygzKM+e1G moB9j2Ndr8vd3ePeX7/XO9H1rPxbvYm7W5aybyLVtVsuTP1wJ7N6dKvyF7jrZq4W5Jm/ PoVSzKwEtbrNlryWRHDVTF/mfwo8onoe82XfA1s0Cp7nj+QlRsPN44s374O/FXdZcHuF rB6smwn8QPiCJELroPrQSgQQPxeyfGLgOhJh45XJ5vMTjGrJTbEyN+q/mLG4N7DwsE/Y W5/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297517; x=1779902317; 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=C766N8Wzn0smZuu62R4w/qUqtYMp5vjx2pJp214CPmArotQdnFG6PD0RAXNcsOkdFB r/TAwKoYKQ1+2qWGpK6BLcRakMZ0xpRHB59sklIwr9sefFK8kojVlvHyjZ6QAZ+BnWVo znEEoef1AVdwy6aKQXpQU1VtdGGOv77OgaSnvMNvtgdtoZWJfVl3Z2unY7HST+Wi/LA5 6BDGY5Pm+Mjnrqdmm4D7rLjzweC32goD3la/uQ2qE1LBzQy6Nbl0RURv+YLmpZYwpren KLHngpJ9REWnzBGXhveRaT4Re1sx0vp0v6kXJV7u6VH1dODlWX01kII9zGD56E0n+2Df +ZDg== X-Gm-Message-State: AOJu0YyhWwRrXmekaRcGXuQNOIjavbgg+EyxWmXCynWR72UfR3DNZZFJ NB4Q4HrkRs8sJZC5SP6PUho6q1R04OoI2sE6I5YG3sj11Y/vBFwcQwgONooxSWQadGLB6K93Kmx dd5Spi3M= X-Gm-Gg: Acq92OGbq3RBFCTCDTEkh7nFZm2UIEQNnw0DzxxjxVH18nKNLa74kOwOedtSyRO3a9B 4QRroZVUx47cOCVRqVfSNlDrbdcXw2QGzG4nJC2mKxPRw1YY5Zmr/gKwiZlfKOdRtUXTrSHEBiO Vmnj+orhs7V1hqVaiMu/8gUjwHRpopklsIHk+/FX9ul9sTMFIE0vG2FG0eVzkEsZlScepOGQRVb 9hvqfcUFH8ASY0i35yKbOBLA62xj+Ru1lPx4FmBRzvR7+qkB917OXeh6V/ozWRxIgacq2+4iTLq NJRkSRMGBqaS1QVCPxJ17RNtkJFlqnbgLM0z80XZCn0cGCrkVHjFDW4beLdGxTBit4qIQBIL/Mc zYwQXN+Z9idJ4UlwwrBFCsBNmfEU0BilF4URf0U9eyPCk/1KpuQ/Gk4io97nzVyCyvbwolOLMxT bTkvkZReS1F7y6hqbqzqUyo+4Qg6tm X-Received: by 2002:a17:90b:2e49:b0:366:3517:1aa2 with SMTP id 98e67ed59e1d1-36951791eefmr23632145a91.0.1779297516957; Wed, 20 May 2026 10:18:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 21/30] fpu: Use {get,set}_flush_to_zero everywhere Date: Wed, 20 May 2026 10:18:11 -0700 Message-ID: <20260520171820.848839-22-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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: 1779297554916154100 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 Mon May 25 14:38:44 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=1779297553; cv=none; d=zohomail.com; s=zohoarc; b=EEiy3t6RY3nkD5Fw1AUj+fBhkakG6yDMzmbLLS3X3+yJ5mpZroiXTjwyJpk3e3RR24LJO2+Nsz0AXCwNZhfJycYVFvkUF6GBJnHXqlaSWMDzw7WbOXmcHgEEXfrw0QwOvRwfU1/vBEh8PcIYCN97MjFLq8brjvd31fMiuWhqsFs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297553; 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=NodYyC5t99qUM3iuf9aBuc5C2MK9cAY3iKZH+OuQLc3WySV1pq3hdZAC07sfi5SRFtKAKNaDl3I0VnkGkwblL+Mm2JWU+7SjrSqb18LIjHNhA6xzKa7q6t8rDo6w9dEpoAv3n1eLaCRV1+3blUgMukp7OcrtqCPyv3B97l4gN98= 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 1779297553394779.610498925278; Wed, 20 May 2026 10:19:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZT-0001li-4t; Wed, 20 May 2026 13:19:04 -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 1wPkZB-0001Y5-SQ for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:45 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkZ5-0001zF-2l for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:45 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-3680540a6efso2786073a91.2 for ; Wed, 20 May 2026 10:18:38 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297518; x=1779902318; 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=TPdn0fe+FWrPLieNJvZ4cUt+aHXE4vOWdjJKB97XwmxkRdILGkCFRi6t8El835b23i HXif/uDqJ4/O3la46iNo7Doa+Ho0vEYzjZvXUOL9RiSVswn2eZdrBxUEqZvl+i0QrcMt fBSrHaD8mHgbFJKSR+rquJjGlz3/4aWLHgMlf0bmIf9yeAr/M08DdTYzzblcIDHBD2QO tahxZF6aEp9PMDMuyiFGnkWq0A9D4ahfSmE3cxXBGlW7aCARq1vAGtOqYDiS9xNy5TIq BkDWdpuLU4qn7CRr6DYiSnQUQd7OXuii5ze4A/J2QnU1RW2Ll6u//u8jWIpDIOYIttt7 T+mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297518; x=1779902318; 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=O6u5Vko5utrywZN300LpJVLa4ktuVcQcjxQdrEYpu5d28XoJ6aPXVqCYIDSveIPd1t W4rVvc0/GpRVqgYRDeQ+v0uM5s1XIfgpBJE1dwy6U5+21VZXvH4RFSoSdiardtBMGU+o qPfum1CH00OmWrVe2D3mdMoKnv3If15jB/oM28I4nilSuPUM0hpaJEzoOnG2qNSmghFK WAmyyzL4v2kWMZQJAh2Xv+gwrdLlzcA2ImEjFxMVZ3ydjiXNnhTFlv5QinfaaI0y82x/ uqJHRgkss0HPgoYW9ewYr2TMfQq+tJBscIwEmChT/oK65GZxHf/+163l0aiYMHCxIkkX A1cQ== X-Gm-Message-State: AOJu0YxFXZXwttT/FYCK2HWy6bIuFEhZlj8bz7+GClOramXJNCICCDDU C+ipkY7ApiUDx1vLuIeex18wqRoNR16mKAK9Vcnn6F5WFaRaIpgNHcBaYzDJ+rhxCf89rZktTg1 JWxjgpTM= X-Gm-Gg: Acq92OHkHNOosF+E1m6vaPwhMEhff2mXKd/wf/mj0sxlPNcT6c5k7UjneeD5DcRM4P3 5WuFjJFtsNPI5Liz2qRZXdKlTmbywx/0M+iQ8LxG5FTLaXsHm49HDSkbNXcv8AAG1z4FqwFkymh n+rhm0fqOd31+iAKb2Zu5dj+OsAnH36wG03ifrYYZNyzBXBYMZl6tVQCFuUcrmbUpVbbJL1gDVe VGyKrAaswXv3SD6K0/h2dtEnduusj2C8JV0CTMb2biWBfjuAfKe0qWfnuQI6jhIVKLMQwrDyPE6 18bsRtLODgbEPqVjHa4dFYOPz+reqMVLb+qaiOamVsKRf+YlVYVCG01AZtm4nNvWwNceyOsHpYD CVwl3fLcaIchlGyzeR6iRsOWFOsRbjE7CCSzM5TDTOJn4xZ6qn4RlYD1LQ0GY5EJDbNsmTnDtyL t6ZKJWeYvWD9+NUhllg+R7kIGhtKo0 X-Received: by 2002:a17:90b:4a03:b0:369:7003:4e30 with SMTP id 98e67ed59e1d1-36970035860mr19588786a91.15.1779297517599; Wed, 20 May 2026 10:18:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 22/30] fpu: Use accessors for ftz_before_rounding Date: Wed, 20 May 2026 10:18:12 -0700 Message-ID: <20260520171820.848839-23-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::102e; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102e.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: 1779297554712154100 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 Mon May 25 14:38:45 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=1779297659; cv=none; d=zohomail.com; s=zohoarc; b=E809pctr0227pN1ZEELo9ghi3NNmoh2ZfPGXL/wC7TmGxdNoeXV3WxipuJGAXEhiifukzEU9sCUCh3PL4R8SzLPXNPlU35ykXmLZlVoY66pHvowd1cJChgaKSgcaTdUQdOoDUXBO5qtca5i0TxHGZyuwyl5fL6m9wrQpfnlWq+s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297659; 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=Q+3tZsTz60JmgF12XoNhi522Q1kKt5BPpl6H2GQRU8TXhX5iweUiRwTbLvpnQJGzoZtvD7TYKJuBU3SAk9GI0RuwVF+1yICK/AM6IGEMb5NKWfOoxpPNwQ2zPGemHx4NCXmcZujltf9h/wkPXniVZCVk6LNhMTTDLyE+jDYz81A= 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 1779297659947837.2272726819135; Wed, 20 May 2026 10:20:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZX-0001mc-1N; Wed, 20 May 2026 13:19:08 -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 1wPkZC-0001Ya-Gh for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:46 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkZ5-0001zT-LP for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:46 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-368f25ff4c4so2701164a91.2 for ; Wed, 20 May 2026 10:18:39 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297518; x=1779902318; 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=MRDx5KCe5SY2/k2gI+X3wCcu+eOXSz57MkSY7JKqHXqdDNQcEm7k5ebQl20KWpBEM3 FHYa6Fny5xOPhFz8Gr9SFdd6obxQqRN95pkMtGVS43oQeOktTxU/gYskXR/uEMmiHN7Z USzXHyj4fvbxk9PJCHrrLZ3kZBRnRq19AD/d+zmNgSmP3lL+eHJSvLn8ROSccWpgvFm3 zjnYJ+8vSYyHovhykxANgNOr/9UbRgw+LAtZcGaiJ3JgMjdK2zgBt8uM09+81WF1B3pn UIy1A9MYbGUkoT4D2ijp+wyGj6bKddzGzSSa6CvDq5fktZHdnJFlFY5qLAwGZjXtpEKW OKdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297518; x=1779902318; 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=fZoL/CR5i47Yem2oPmF+r4fj8wlxWm17ahSJI8e1hEPvgMZu7pfIv/Ilij8sEFgJbL sVS01lY//pkP5NuDFhY+c4lFyrg5tgRRG6BZdt5kzHskCIk9NoXF0KZMORB3hnRq7oxf J5hvtjQVGL4PDr9w4K8iSi9dbxuvmfBmkBTrTOY0tEs0FD5zPhPxcosKDAS5c0AIrgeo IKcEbFIUFJAoYPit2ACtwRorSCbWaLmHHyFHDZDRKHaA9b43xbIANGxDGTUk+tyGgOjg 3N6YONSqXB5qjJ3Sb5gW+pblph0/TWJ6iJbRJcUQs2ENBOk6qcfNc1Au2g2S0dnUmkfF rJnw== X-Gm-Message-State: AOJu0YxfSMz76WtnPz2j76alpF+vYWABFuFs1jQA9pjlVeyoZol/V1ds bpLUXb0H9BCLO1IKvmfukKt1eBwp0aDAel4p6WcWAAunxWYWPZiKhPq82AN7nc2P6BtFpy0s0L0 OF2U5myw= X-Gm-Gg: Acq92OG4z0EAngCp4NSQEg8DCXDb3ptdRrtfUFEhldXDcmPJ5ieO+6ReEZj1mWN2ZGb eDqsvQLR46QMi+R0+eHykMM1Azyitn8fXXWZ0bViEHSbolupt9tfqTieHJJSyk1akYiFCyIT3Fh RPqSmeJfJXigxormWmDEwF49BkEXjgUcYIL7eALQbvdGAIGqSIgFq2CioUbYYax8nmxyWAwOxx2 kQLEHPYmQXeJnP+9AR2yxptDWok6rVLBEBxqJb8DERoj5dtQUYpq7JfE6UHo03QWYCEPfthg2dK Nvv2yGs17i7uRhDL7St0/23PzVwJweZp8Kq0t7D8yeEg/9oTf2bXgll/eMCw9fB4Zj0twV6QxrU LiXsmSF7nQgZ6TVn/YTgT6ku16VACspWIAuhonzniBHU75HbpcwisBD56kitEIOO9pNjG0iWnvi xLpLS4sT/uBaeVNeoopDtXn/7q4bjv X-Received: by 2002:a17:90a:701:b0:369:7433:3b1 with SMTP id 98e67ed59e1d1-36974330471mr12917872a91.21.1779297518215; Wed, 20 May 2026 10:18:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 23/30] fpu: Use {get,set}_flush_inputs_to_zero everywhere Date: Wed, 20 May 2026 10:18:13 -0700 Message-ID: <20260520171820.848839-24-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.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: 1779297663089154100 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 Mon May 25 14:38:45 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=1779297720; cv=none; d=zohomail.com; s=zohoarc; b=kq0q8r4Jp6qSnnt43OKFdNCgHoYRRPD8cP6PiMIV9yjeuamp73ij1YflsAmCmfEt5+2adm4OrD+p6xtF0TSuN7XSgZt0+PCgLjUQobBmLObCfG3CrFRVO4C74IxI8f0jymSf8WosJtHsGH+EPARjl4VkXB+nr8sqP/ZC3ZOECg4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297720; 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=L4haPSSYn1xNjiQ0OHkCeBkzKv5+LgtzwFKqQ7SRGElzI5mUiIwueleIMxfzg76tDGNpGsK5qK7Y/Cja9pr0vAQl6TrPs657vAeVmgv7SFOJl4GTHX2B3wspCsGB3gFxArJjpodsuGJ2g+ei3VcWAa12B9SdrGRXvc0LzSmY0lI= 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 1779297720481200.8349282504928; Wed, 20 May 2026 10:22:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkaS-0002pm-66; Wed, 20 May 2026 13:20:04 -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 1wPkZD-0001ZE-Fm for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:47 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkZ6-0001zl-F5 for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:47 -0400 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-3699cdeec05so2006130a91.3 for ; Wed, 20 May 2026 10:18:39 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297519; x=1779902319; 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=rneYRC7aOMD0FlkKOjddVNGKJvhjOvZXDuXC4VRZYnen9pNyrp9QdK8nhheijlMp8v /av//zYhbRBu/kKxPAYXXFic68eCsqn99C4pnkujt342s5SBkMuBWsDwMretwLus4zV6 Lx0LTCOw1IU7IBKshapZgIWCWzkFSO8TWRrlhCrl8VrEvZPoRNlTcfoXF++oKEziKYFb lhNOXckltkMKU43iPlhNed7XbEOg9r3I/eiqH0B/rEgviU4IB3b41GkBMUCQJI5OQKbD yeN4fESWMUaoExRr1zafAOnGV95jZ+E1B64uR04mP4MgEt9/REu3d/Y1chrnqiJJ1LNg lHVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297519; x=1779902319; 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=iyX+ad+HvDm0HgGc+J5YyvCE96WkSPhxrTSj4EDswqeQewsNSqLj+d70aglJ8lHcLv /Ej6Gb84tQVAlwdAVMRp3YAQYYHf12OnOxGXLHrGE5IgVMJ02HDYUbAAxDYHu0khIWY4 CRpdV6/S1lfnsJEcF39covPYMn16/lMhZ1Lrr8SE8ZVuhG7MBDUGayedE3sj096pt80R Ub8dLsQ3chD9em/O9DCFnGW18BHy1OTna7+eEETyawIhVEGXX8gIUHeTeASTax+c5Paw IE3vRJYZiEM7f9qNxnEjELiESszYkLbzhibFkLPWmvhWQKqNiK6aEHwrAKlHtCDXB1/g NftQ== X-Gm-Message-State: AOJu0Yz9sSH/x84x2c4RZYU8K0m5TVjRzdG9X3lDzrd2Ih+bPhp7UPBe lQVNYvtsWIblsa353OB6KDoC+LAXf8zgFTH3wyiusLE1Y2W7RRa7zCbhKwGY05DPlyfKqZx7ykq HxVITGOQ= X-Gm-Gg: Acq92OFndf8HI3qZVKh/i5L0H1ZRFb8NovQmsWlGSoKLy1WF/DEBzW/H9MuY0jtucJm zFN/T1+OWw3q9cSyxX7BRVVulUnQaZHyF0qyxRneJei8+SGIRPTLt/RSqsDe/EjGPLk+4UzEhrs qz4f43H4h7+07t3bddkc/cFlKPLbRLDfS/wQPjydPXNvxIRDAcoO0Ktrum8V615cthB7vThSgo+ ybdvcE1c+pG1wxKPqe2kX5M4k1U1rInp/pGK8TAxULjudisbv0UNNokwaXjw91HEtIRY3hua+xK 4AzabNNFcw8Cymcf5e0R/RhDE0WUvesavhEzjJJAPi8C8vplqFh8kiAV3GX1WKicvoj77zOU7T4 64P00vqPpEm2q/QL1rgBbXvSlrfsanwQifEO1vvgOmujqeO9K9ELdYLjK5QB0hy/iXwWLXf6TQH BMaHmlbilIG+XqT7W9lynocLZECKT6 X-Received: by 2002:a17:90b:4d01:b0:366:3ac:f725 with SMTP id 98e67ed59e1d1-36951cab229mr23453857a91.25.1779297518797; Wed, 20 May 2026 10:18:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 24/30] fpu: Use get_default_nan_mode everywhere Date: Wed, 20 May 2026 10:18:14 -0700 Message-ID: <20260520171820.848839-25-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1035; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1035.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=unavailable 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: 1779297722119154100 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 Mon May 25 14:38:45 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=1779297660; cv=none; d=zohomail.com; s=zohoarc; b=COcwrfTxJWUDOI1SnE+m7Z8GnGsDbdRFHorOfGAt23ksrdo+MBAecXRnqS3hUyKF7zM2/Ghs+IKRTV+0HMAf82ZjDlTg/pXrv/NOnc4ng6idHEZpCNWc+pDhVlng2HOqzfcBwQ+ngDQH7FoKvzkwFVLI5iLMukhvvev9CtSbH9U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297660; 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=a326aOe6hRXUVmLu8K+gMLH+o9SYNyBY7rxaP6LWKWHR7UryWjHY72u+YLmE8zJs9YQ172VRwD6XVi40WHCE2ofiCgfkOgE0RrFLi7XOg9CEZk9EENf8qzS/Zg1PdyYRiUrU9yuyY77ZIAjtXqXpGYVbtO0O2V6g1c4A6oqzXnM= 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 1779297659975871.0122702657518; Wed, 20 May 2026 10:20:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZS-0001lT-OI; Wed, 20 May 2026 13:19: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 1wPkZD-0001ZX-SC for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:47 -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 1wPkZ7-000204-52 for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:47 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-36974217d4eso3215120a91.2 for ; Wed, 20 May 2026 10:18:40 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297520; x=1779902320; 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=Tost7me5mqlv2zQeQP2l3mAN1Exog9I3YaWVTVPMWPijjDnPZKE+iA4/9ualMcM00T U4pz9376+Iys43Nm+mIcJ2dlNxXUrQU4NE1nkC2n7VSBWJm135X3ydjx4qd2VHG6hYxH YMKUKRvaLYULKzQX3r5B08wWtO2Urg8giE/mCe5Ha3WsPqMs26EefWxf5cwgfYpkIrAU Hx9tTd7SiOVWVAp7Zdoey9Coq/NCxJgapBf8Eo/5OIe4cFLrBt/SV1PM/1ekuEQLpstE rMhgA0VbJdeiQEBUo+2fEOqlYmLORIfoxFBzPxNPoIk1B7V0clwfQ1Fv20IVDeQP2Qsq p0iQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297520; x=1779902320; 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=pA5W6cllERQUFtpMoBXBonBAMVBwSK1FFa9bS1dnjHkdO7h8kCMpMQpLHh+HLGy5Qd 3/akdUxKx95Z1peGgu3S3NYG36rqMzf/4CxHlU6mFvPUI0fKlcDuBcXn7q30kyleTbOq 4iE2QutugBf3APCBd7hwDolKvaYu8SG0+ncgxIsPo8cWRCoNzCEVRGY5bmiUQhT6mR5v Ba1EOPmZmWoSrpu07MsaKFg52Lm1osjVD8crGrgvhvd7hw1qJQBHZwl20m1TRU2ZnLpK bgU18AMZtuctdOVZiUAc0SfhfyK81BBt6GMwDrdXdWcXzISwrQipbPPNf0iPD25GiQeN BO2g== X-Gm-Message-State: AOJu0YzRb7e1sFKHtxqKP09+tnJ2TUED9UxKUmmeCFDNjI7DQEHbA9DA Qq/ehRyBBSA49xKhEP24XP5KXOIjv405PPuF7bASSfnB5rZEVTrUsyXk4OW1OV4J7+8wngGW4vJ fi9YqEns= X-Gm-Gg: Acq92OFtcHFZW5OEQLdQKlQNiDf/i/R8D1rUyyMefYgALdyPdGryNgJ1+G+At6eHGQy I61qZgLiBlSxg5OIZlho6ec8tyqtOj56KAZmZ7QXV68lPu2cfkp6ZgT6bHUXyeO5h/etujanlFj HB/l9b82nDouZWhSfYlgByYjIINl/eQFzEsRTA3qH4NovpsQTdQ+/sa2iTIW6MzNrvhKGdAHqZN n+DOaSo3AQSHKV1SLNGRwHkLVWRZGBPSmN92luIopYj/axxotjH6TTPeXF12VHzdviMJjxu7i6w xo5W4fus2bSuk/EMltPa28hVhe0p24Mxs7khmkUy6S87pYzefQmG/a5sSqJvFL+abcI9JyqkZ6E 9GmRjbeyhjtn9QOloWCO0JOf5De0+EyxBKlGKI48OC9Bo5D0gs55SlaY8S3bxS6P5B0UonKeS8U IUfXZx734XsA5i9POk+5p6sF1Qdq3N X-Received: by 2002:a17:90b:2c90:b0:368:2289:42cc with SMTP id 98e67ed59e1d1-36951b9cb8bmr23102426a91.24.1779297519631; Wed, 20 May 2026 10:18:39 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 25/30] fpu: Use get_float_default_nan_pattern in partsN_default_nan Date: Wed, 20 May 2026 10:18:15 -0700 Message-ID: <20260520171820.848839-26-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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: 1779297663011154100 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 Mon May 25 14:38:45 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=1779297629; cv=none; d=zohomail.com; s=zohoarc; b=BwhWn/3rmqd0XMxg9ITp0OawAPcy0orIAFDgv2WFZE2vYw7dKyKfi6PcfLoHzLetG1QARW5vlu4vmncTaIDlTOBPrx55oYjUZ4vPkQ/OdoHqHFyyON3x6rAIm2T8JOgUyaiuAAyhERmVdAYFJ9BDlKc1tybgb7eXpbm6uRq/KKE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297629; 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=ACq7MYjcImG8dUGmhWugB001qk5ZA90DcVZ/P5tLd9q9zeLdsR1WrXE72OlsoTHfCZSL0GDiODBMd65+E0gM3CitIxQ/aIRXy8ohr+6cyxNzNoH33Yj8cqclWLx9hX7z+AcTewc2pvX6p9NcQVCmjig4PZLMQpjOfl0ZZoaZJLU= 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 177929762936681.40018232093803; Wed, 20 May 2026 10:20:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkaM-0002Yo-FG; Wed, 20 May 2026 13:19: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 1wPkZE-0001a0-G8 for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:48 -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 1wPkZ7-00020P-NL for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:48 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-3680540a6efso2786113a91.2 for ; Wed, 20 May 2026 10:18:41 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297520; x=1779902320; 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=Bd/pvMtWAjdhY8yW3X1wPXwXjr/8koOxG6H5yxPjNeb28oa95XFW2Fv60OdHEmKBpj qjMreP1qFCPzTikHXHRc8VzLJm+0o6o7IqnfzzopsHr3wVAdRl4M615AhWDWGGlPI+k5 vn1kZ2Qn7yHyiFlbdI8k93q/UV6b9E1MojGeu1nU4+BGkXEk8iH/Im0zSHIJc9wDzag2 GAOEmjUL+wwTOCsOEfOFLe+EaMibE+kgNCNUIW26UZbHitybbTciarGNmUjcul9qfDTd zE6nefYVYJYbnVVTka65fOzAtqyIKTCtfnyISlYuyUqSBQfV8aJKxKj2r6IjHbqFx+ai CNzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297520; x=1779902320; 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=Dm1/mvjABP+5P13Z01GCmMf2CBOdERr2zq7tFwlI/fGlm66Uk047Beg2lWDkKPXsU6 IUOPJru6bM4KurUijhjbtr8iFHXs84HmXNWzwEjvWFvrq9dC1pCttKXvgySuDraJ9YAq +us0CC3vHqVpXytq++AyUQir8Xw9ocLzdOrU09bINbUzVcQ4mwLeO6rtzl1PIcOAkUYn s9LiwPuCRRhAGTcuJjLKbmLW68ED8VDLLISa946BF4CQVCnhouyUXqG7nGSh9hAtTd9a E5QM7PAIhnNemSqYoQONMtJZriM6BvEE/ALZpc1pmhuoi2IjcOnaq/v8FPQKAEIJmFqu 8yhw== X-Gm-Message-State: AOJu0YzO0OQlbjkyzhSFAen3XWt62v/cHV/HYI9jYbgipejYAcjCjm0h JfoCMmwQcXGBb8RJknnVs+yBmmP7Ffq4luZVDiKsU9ECVG1TEAcnQkJFw8TWgFIRJ7ahXC5k/4h NvcMEd9o= X-Gm-Gg: Acq92OGKcw7a+7Q2KLTQdMSueXOiYl+eg48gb4SwUT9JxSNGYMoa3SaJrg1WPLcqgc0 PqeEOExk4VTpBS70oPiK/hNiN4EVCoIUg6/KQobGtRyDXxxmgFJqUDbmjB35/Z4kRBzF9MxW9JK gsBtZ6BY3yTOEe/QPp9Mepc8z22uLNjBq1TqAVIMijjS+wnTbw3dF1NHuD8HfZAxVEB4ad8Kzmh +mjsk0zJucBh3cSXxN+TEjaGXyv2VeqkKyI0q2sWQdK+ZVPDD5TF351g/nF23niMONVxBiaBeY0 bLJMxpsSDEcRC8yyexLGl75d6D3Mn140ufGoNpJt+p2Zsc25RRMg1GgV6TYqGux/JgB5tbWCs/p RKrYrMkTwldRnaBajELpgiKEYAVaAxCA7BrTEpNYcskK99qYoiIrpXUt070TBCqFAzea4kVhWAi pFjIasvUb+mCTId0tbohneUZVsuUP1OHliPIgK5oU= X-Received: by 2002:a17:90b:260b:b0:365:f8fc:3846 with SMTP id 98e67ed59e1d1-36951b87209mr26499265a91.22.1779297520228; Wed, 20 May 2026 10:18:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 26/30] fpu: Add accessors for rebias_{underflow,overflow} Date: Wed, 20 May 2026 10:18:16 -0700 Message-ID: <20260520171820.848839-27-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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: 1779297630158154100 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 Mon May 25 14:38:45 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=1779297688; cv=none; d=zohomail.com; s=zohoarc; b=ESUxRfx6EmN861MgUd0oxDq+JTkboG7sjdLFbhMdafcG/95O6WguqiVKoDrYftja/InxroqsrpD/Vh9rUvqXAYCsMUuCr6imSlK6aTzJH+HEFC4kRTxeXaMNMznO3AsSsDB1XmKjY9NCggzzTy5pOamrlmBD4CXZl3+ySdTuAPQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297688; 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=VrreMxJF19dggT7O/OLIEh5FsJ7UAlxTQV1CFHC0GsGD+BfKuifLpF98IfH9l2ufeQkRvsGrRSDL6Z8xjWvVBZbfNr75S7Bui8lgB5qwObPWbI/Xrp0mfrqKm8rLG68jUW+aekAONfEqtsp2Wy88fSRR8QyrCIZj1hgiIja23+I= 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 177929768841275.7040363927565; Wed, 20 May 2026 10:21:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZU-0001m2-2y; Wed, 20 May 2026 13:19:04 -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 1wPkZE-0001a2-Sl for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:48 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkZ8-00020q-AQ for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:48 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-3697f25d26eso2646479a91.1 for ; Wed, 20 May 2026 10:18:41 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297521; x=1779902321; 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=FGBHIIsWjAWHTiYfsJzsz7B1BL+Mh13/bavrT+MWum8lksazwMyMjnN3FiCrns7fhp D6VsvfP5oxeg/P6xq8v3IILet2ZkafpZOcXGz/fmSPYqZ7HoUz78vASQPgKPGcruzHqC JVvOz0KNiopJP8TIaDfl7O3XQh9lzXWP9XBck6JvEU9W+rDAsK12IxmEK9dkCcjeIbKd 5JzEimVk0VhUMjz8ZpM6Q8OuJJQMP3gyn0QL0yyE9sSrAwRWllTHgiL1N+Ul5ZjdVnsx rzO96Obf94zee0MIh7OCfOTOOE04YnxvfnZ/8yKQC+A7NhUo+R8RJ46xg388rIbGcMqP X1pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297521; x=1779902321; 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=ov21kiY6e9+Vevse2nfGzGXbIBKt/LYYn1uX+IyqxYGqn2ghzba50s/bgqMwwFtKmh hhKbTIFxkFDZfHuxfxcyBvD0WkSxHG6kwk+35gv0anGoypdkeqmRtSi0L7IrGPNZ6rRR dXpayvYm/dTyjBDG3EUeeI0RHtDzk5oWvLFxHo8M02/TaeeixxxC0R9n/SwBjW6/+MXx 04sZgZj1aUsD2IV23mkoO4d0eb8nsHTfPT2VuEtrVivCDaNBIBmIE9nic2LEGxnpsL2U TLGkKmn9ljkbCvH1Q8UDEOOp3wLpf8yQXl4QxaT+CYNnr6xkLsdo/YjazkEhOnvGHH8L 99qw== X-Gm-Message-State: AOJu0Yy5Cw6mrVwJGQyizifFLRK1t0X0fuCabuVMDdY5/7YL8DE1Xa9a NoA0rnIVN7IPs6r1AJ77cUddT6zi5RiYT9pnC4XCe656hkqnjpEQcsab9yqms0CMTEmMQJ0XYzC QlTeomyY= X-Gm-Gg: Acq92OFoSYfZcezPSn0JjPUL3DBjBwg2k2Lehnw9a18uBi9Iw6KJphH/5C3ITQM0mlX WxNWkD2kLqkhX5qJdUcrx3UaxCf1PwYnPiJ0e0PlT2k+u9+kwsvvYxHOauhezBBbsgIO4YwU6iq EMrikZz4Fea2oqNDHvRTvPM+0ri4/M0tZRkaLXVk4LJhMe74nypv7UlKALNSMD9sOZ/OHLglD0A uTbsLo5HLKQhmESE1V12OdWbGgbSgugfH4TmrFSlF9joUZxIuLFz6PC3GXoSDA46tBeAEMSsu6p Elmb7cIFU9JvvfpmdRW8XHKdn47F9d7AlObLESKZsJxp8HB4xQ4k4pZLZNfDDOorrhjucNHh/oE xCba8TQ4vB46pL8/qZReXUGZIU33zQhw9IEJjVJSwSV26gmRQ5cZBfypklBKheC/eQGUbk60nOI pysNO9FI/txSlGVXySJJGDR68YEoe3K3n9uo1fLdE= X-Received: by 2002:a17:90b:2f08:b0:369:996d:282c with SMTP id 98e67ed59e1d1-369996d2ea1mr16182128a91.9.1779297520833; Wed, 20 May 2026 10:18:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 27/30] fpu: Reorg float_status Date: Wed, 20 May 2026 10:18:17 -0700 Message-ID: <20260520171820.848839-28-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.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: 1779297691460154100 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 Mon May 25 14:38:45 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=1779297723; cv=none; d=zohomail.com; s=zohoarc; b=JlKMPkpEfNZw8vHL88WohfdRYhbULKN4NRFvB7T5s9LQ/fKCSjtwEtrd0hmsAv5stCU1B/3fxSMZ+hkeAKkRFkaHBcyhECSB6Jt/BnEGCISBPHAF3Hx4joHueToUVmlghSSpV6YjRiy+5jcXpBLf77OuhHiRErBFGWetHLdbToU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297723; 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=EzAkNYIqBiG4Wda0W3Zwd2nFVh/tHZDJYFGGvFPNoqQ=; b=Nu3LUJbYyOwwmTWMjOAYPOaJV8S6nXeKcS2nHjNTEpO26rgVuUvRCCWLmCjFFYcuY6TH6Lo0MbO7ySddkpPJh5FvEpFgKEbeLOQYWYi2whLJMUv3MauX/WwAgXvuZ/i3QcNeH79sTztyijTSLxFpI6q1VdzZJjFlFZyO6jIZ+s0= 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 1779297723205655.8022550872485; Wed, 20 May 2026 10:22:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkZX-0001me-18; Wed, 20 May 2026 13:19:08 -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 1wPkZF-0001aW-7v for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:49 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkZ9-00021F-0I for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:48 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-367c2a39fcfso2420363a91.3 for ; Wed, 20 May 2026 10:18:42 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297522; x=1779902322; 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=EzAkNYIqBiG4Wda0W3Zwd2nFVh/tHZDJYFGGvFPNoqQ=; b=U7MuupXA4CIB0D2mYCxaDgc1ZpyDtd1gg01KVrErPLaSrHg9LiXMmJv+NWzgjLnOHc gPjJp6nsOjx0hDtqbojKwn+k7BQtk+kcHQ59xQdTlUiH+/pBb7L55A66Yd4rUcqnv6ad YJXlkWuZJ4QcfVy7SAPNWdJcd0sGRkhdJ4VM1023AmFraZrZkqQsN7OlwAUh8V5fX+k5 CH434JIrdoYiTlQQZ/p+QnvHKBO2i4TK3x5APxhOxzgI4/V12dYscpn6PqUbgW+d3RaI 3ZlLkI34nRunCBEQiN/q1Sw3Gx9ckmBz7qaC/vPxrHQ9HDoYGhoqpu4faFQx+oD6/Eyl UbGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297522; x=1779902322; 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=EzAkNYIqBiG4Wda0W3Zwd2nFVh/tHZDJYFGGvFPNoqQ=; b=nMCQ9ZG1Feyo0FyyBXW43WGZnVuPpJUVW+MSZfQKWIWiGPrX4osvWfUyAYCCfsKO3M fpPi6IpAdd+KCzZKx+4W8LX6w6FPFlHkuMX9YZm+hlATBo2AC6YMhZ1oSVugb4QR+jEj 4C5Og6L9K8ySBlo6ypyV6+vl+HYoLCUKQEJIZecnfNb8og2bDCjH+DSu7GGQWAIdVFdT GWDsNhYlFcwWygx2+2AKte4eRHfVPlGM0/nLhT5mOKJVpUcGJmXg3mJ6oOSBDneQuouH KeHUZ3OrCjWlAtg1ETZOAhDdQQUbuq3deOnGW+3dYvSGJygwkS+yvhKB8t3pFKUQQp5y VkDw== X-Gm-Message-State: AOJu0Yzr7BaZXKaOSuyMe7QDbHLL5fmfoqgBpfMjOxet2fUW1b+hiiDc /zJul8PJSYwz8SVF9qfqq5fxea4GtROcHpcbidjxbOoBQGrDgw6b3Qiws8CTZlwat6K4QUsrNpT dIDxOUp4= X-Gm-Gg: Acq92OG+XwIY36Ir6u8JaEG5GFULXatb194GqwQTQWJS4NgiUBWqe+b/MsFerXObwya lyAaWK86Ize6TA3HtPqHnkhaeC77hNraz0yx/30Ku30C903NSS+anYbww0p8ooUZUb1w5PoVlsy hgstgmmRvC+zf2fy+YJ7saCrZkuctVaYamPwuXzDh8ux9Yu+8Cp2SLSiDO52lWf+FJFdNYY0ft3 8dI1N99AYgzFZZScbGgoEXw3jGT8iZ1az6AmNdEUhEkLAXrQhAH1L/m7P0fmra70QppZeq//YcM oR9utb+qHG85Nt+gUNGei8Z6OIaJ217GAR4j9IObfLtQi/HN4f3iaLaF7HFWZUJpKV8ATqzPH/B smc9tc5S5h47dDqZb8HJsKrTTGoLWXjL8hhVWJJ2+YsPxcmwpiCCpDrMHVIIMLX86bsjamp2viQ EPVzp/p0C9DgRbZjcIzKYtVISIsk8G X-Received: by 2002:a17:90a:c2c3:b0:36a:b34:17e5 with SMTP id 98e67ed59e1d1-36a0b3418f9mr7373258a91.14.1779297521462; Wed, 20 May 2026 10:18:41 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v5 28/30] fpu: Introduce float_status.e4m3_nan_is_snan Date: Wed, 20 May 2026 10:18:18 -0700 Message-ID: <20260520171820.848839-29-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::1031; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1031.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: 1779297723522158500 Content-Type: text/plain; charset="utf-8" Introduce a separate control from float_snan_rule that applies only to the OCP E4M3 format. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- 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 Mon May 25 14:38:45 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=1779297886; cv=none; d=zohomail.com; s=zohoarc; b=Q2NKER46+SdBfnoubEJpw5aKa+tWPdykR8qYokBJbFVQDTMti7HIPgtqmUgrq/22A12sz1W4uDeIAjfj5Yx/iTgspMAyXHeoxa9kSvLaR0JkmxB8Ur5tAfdO7CKJ2aUlkH0Nk5w3Z/n+Dj15tJcTBpo2C6tUIHgFBVyDYCVPzy4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779297886; 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=W+P1uL8Ve2PxkJ/Xgs2JNHb0YhQ1hDFIb5oD/QLJAt4=; b=jzTqlvoik+xs3zMNce5A27Ce534Mxi3EFFAwx0kV7PshesdmXhdWNkFyJpg5nAidnyIS1bFZUU6nGoj6Eglo86iiuIEb0Ve1FOXbzlwarOtK6XSSNPluFM5q5DPuq+SzrX2FffjRa+ibQmhcVL8a7L3CTCODbW24Gx2/hDELD5Q= 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 1779297886032508.1739265649985; Wed, 20 May 2026 10:24:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPkaN-0002Zd-W7; Wed, 20 May 2026 13:20:01 -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 1wPkZG-0001cM-II for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:51 -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 1wPkZ9-00021c-Kz for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:50 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-365d8e43759so2780900a91.0 for ; Wed, 20 May 2026 10:18:43 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297522; x=1779902322; 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=W+P1uL8Ve2PxkJ/Xgs2JNHb0YhQ1hDFIb5oD/QLJAt4=; b=qILgXhv4WMMTl/p/wKrfvpuB7n50V+CeLjbMa6v0lyQX/huj+OUv3wfVG9CXjUT7+m AL3MHvN/T5Ev4/3yWRJfnCcLAWepJ1yj7WLlt4QwizfF3kcbg0jc589YC1SS+s3ACqnz cyF33xrktjFkc0LDyYPUJNT+RG9UNOfhSgq7NgxpQ+mupLMuQO8Ta4rmrCNFpZozNUrV OWh7/U+dmVMGhRoWiuWqpx72Q5295q0Rmk9pqr1j/CoxZ+zOV/b6ZYLejWPfgA7X6trA 4Aj6vizevcKdLAJngjmc0AxUUk82J0Gj8hi9pAVykTY+68RHfic8nCLFdHxl+OEzvjvN m2Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297522; x=1779902322; 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=W+P1uL8Ve2PxkJ/Xgs2JNHb0YhQ1hDFIb5oD/QLJAt4=; b=QCsuiYoSB1Bt0kW6tP18EFtXz3GCCZ/Muirpr5NHetDw8ttcQhmRGtCevmu2+uQj4I TXWURlW0wdcmUHHvDDy06/etGzWQLRelScsAST7wU6JuXL1iY1r8+Lx+Rzpa/vt2+MlL j3XhsB5n3G1DMy2hsktmyi/eZNgri8E9UdR5DdkO+m23qYgexaYK4Qtta4c5fbA5Ube8 dWVvw5GvV2oeGsPZXv3Ow2rrnPoWnfov+/b8TAUaIdoakWKCrgegmDlTMRunSFFYsdA0 R767gTv8nyPqIzHx0M/o3CeIJRMO9KgZZ1kpI0i6R7nOLA8ZtvAT38KsPQjfZid0zHXo nWwQ== X-Gm-Message-State: AOJu0YxFsE/kXH+dC9IrNekzrEt3mxtrdfR1PGF9O9pNoJne8FzkmeDZ guM5ohB3qyDAKlfwS/Yo+vMHhBYXt/01B7TogxBMOI5MS+CTueuSvxsp8DLTYJLiLq2tmOZeelk jyW6j7sg= X-Gm-Gg: Acq92OFaYUE0gIawJCZbqIYnMji0b+vmChfrkGu01zYWdw+uAYyeAGu6dtYgMrmpKnY NRcwbB7St2Y80b37cKN6ETxjBhwcvAoAGTqf8hdYogmqku1/0LA7FZqv7pgC054nQyUqO2l9zCi 0EEBDapyZYiLChLYANR8ca/aDXh8ZsFYzt+De+eoetH+NpIgKgcNzX3V1j1ej8kR3KZeH1hogWW usan4eMr5aNAzEhE9r/2xwTaTdipVQUyJ1D9NgpRUb1gmWnBi8L0kI3sOgaRnaZzFp+ceLprY1h RWzFIMP8VMKSn7Qalzkr+/Iy/8q0KCF8arjP1kwJPDOUsBC/wuNVfCPbV3navLHj2zXyXemqYXU AtrgLCU5Apb+nDFvPwfDw03k8EHsZjhJMZ/Pro7J+Qx2gMCS+cWqcNxDuj7aBv9uK/RaUDXDzA8 AOnmqe0GGktb0r768ZQR7N9A37HsQ5 X-Received: by 2002:a17:90a:dfc4:b0:369:742a:4259 with SMTP id 98e67ed59e1d1-36a3c802ce5mr314738a91.0.1779297522111; Wed, 20 May 2026 10:18:42 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Peter Maydell Subject: [PATCH v5 29/30] fpu: Fix NaN encoding for E4M3 in parts64_uncanon Date: Wed, 20 May 2026 10:18:19 -0700 Message-ID: <20260520171820.848839-30-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::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: 1779297886664158500 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 Reviewed-by: Peter Maydell --- fpu/softfloat.c | 2 ++ fpu/softfloat-parts.c.inc | 29 ++++++++++++++++++++++++----- 2 files changed, 26 insertions(+), 5 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..d6687df982 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,10 +512,24 @@ static void partsN(uncanon)(FloatPartsN *p, float_sta= tus *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); - return; + 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); + return; + case float_expmax_normal: + break; + } + g_assert_not_reached(); default: break; } --=20 2.43.0 From nobody Mon May 25 14:38:45 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=1779298052; cv=none; d=zohomail.com; s=zohoarc; b=fmhQTDWaoRgyvyrEUZ31n2mNs8BfPebwhkhB9xwZk9R21Pv0jfpX1mF0OVJQ83b6FWcYmuw0QvcX1b51ZJGlH4XWE8Tp1HSdUqmPP+KPTVWN4HIkr5IIqGsjdt853tgFHKX+kZ+DrIkfIDy0BC+gnUAcJ7FxLNwooz2JZTWrQAI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779298052; 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=TOMzvZ7w5rHqlg6irdyDvso5DcaHIYg0qg8G7j38P8E=; b=CP5M4ArrAhp+o1B/aCc3dX+xvDF6zLqPraFj3y+5oR3C/4maIR0AN869BAXdpbAeWOAxzAb2Is04nDyt+w9qZ6bHL2FjEF+ZJTZuMzhCwaqjl6VR3BBmJq9YA3KFqOp5okd0OZlpPY0aEIHuml89R6d/R2FajAUjMBgB2JidOnc= 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 1779298052414384.59860670175044; Wed, 20 May 2026 10:27:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPka8-0002FG-0v; Wed, 20 May 2026 13:19: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 1wPkZJ-0001cp-C9 for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:55 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPkZA-00021o-LS for qemu-devel@nongnu.org; Wed, 20 May 2026 13:18:52 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-3664df30f53so3060524a91.1 for ; Wed, 20 May 2026 10:18:44 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a3c83f226sm254416a91.0.2026.05.20.10.18.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 10:18:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1779297523; x=1779902323; 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=TOMzvZ7w5rHqlg6irdyDvso5DcaHIYg0qg8G7j38P8E=; b=kc0HPL7x90nrRBDv1nLWXjdFZrfQp4xKHVD/0VVctYsWUI1mnbVpY1TYo/1ljfDR62 rv6jJePOrkA2qprTEsmL8iOCdDROXzUHtylUCtzNeOooneNcDZlj3SU9OatjllZ7Ygr5 WiWtpPTDMvof1Cr0hoHLSlnHu98ifq6BhuTQWNdDdWBE1beWV/YciKdVlqHSLiTqIUxK G+0U9/HxMveYBVj3sAo0T+sZDhgvQgHFHWmfSr62wkkvACm4gVRYl0hu6sh6OKqNOQrf jqjdArANnExk4tz+tMP1pbSM5K3MLt2GhSIWKQ+VH2v/hPaTNXiLuFhDkEQfv3l5CLpy 7NMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779297523; x=1779902323; 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=TOMzvZ7w5rHqlg6irdyDvso5DcaHIYg0qg8G7j38P8E=; b=pO/+AXlG+7o68JyZFVOMjzZiPIF97Ybh0RL+5PFAdXwX3eQkIOUN3Ya8o7nEubuaVM +sJfUN3APYrktUdFgEARHhlUwh5eGavvweO94ckg0ak4Q+FJRLoNkCSNbceezT8sbNN4 NDPnvEgtZiLcFrCwIoOktcaX6F01IU1O87yRbf/NE9BJ3MkMSZhMrM+ZMuH3i98aPZGO 5VqwTGW8jbgzNdgVUfHFcVFzrPuU22bCzh2r+cuPRZ8kywIljeXOamXWfbh3L0Nd1GfU Lrf08owfUwvaghfSEoatCwMlUYKjSvW2Pgai2ZdtQzu6Ert66olvLxy8Gi7i/YzmwVys v/xw== X-Gm-Message-State: AOJu0YwUvKklXENPs8s8Srv9n1DMLwrjzDkL+E0ZKqitcAoO9xFjSuq7 giaiv1IGGjRc5wSciyjfKD5l5YR7maQm18X2jsrueBWiU1FCafFNswB7FsSXci8kfVEzE1CyScN LPalszSY= X-Gm-Gg: Acq92OFgZQ/B0GubnxIH6ZQXBfVAyg5ZFZVycROECt9KzHLl/OEt+jjPgkUx2PLn/ql lNKDfW2rdfu81msYEILi8Hz64mAe1d8vnwBQf5jdQboZpseWGeTt4wnbQ9EcTJ3vn3C4Lyakq/G YskfZm7ZZXx3Ms5e/CDAjDP1KbbORg1zy20z0gwCF2j4v6HsjRRMZjN2fSZAv7qF/nDtszUwXmD zIRdZnNXbxEqiPSRps7uj/2R+68ydS2azT2D2+I2/W488OP+bthpmWwWbmq6lNHV0BD54L30AWt FDn8JsEqtXe91Hk1APCQfHo3SI0sTaGyLOS+W1/I7wW/beElidqewVqxHWLotuDsExzutz/NOMA 93oyqzH1kJZV3E9aseOQKcamN6gvInTMY48LXMBghfaWoAUVU4FiXhHbttRsG2mu5qAMoAC/HVh Tlw3w8QVqgdRBzRsF0P8C3Vhxhq+Ws X-Received: by 2002:a17:90b:5284:b0:367:bafd:9431 with SMTP id 98e67ed59e1d1-369519e1633mr24391066a91.8.1779297523036; Wed, 20 May 2026 10:18:43 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v5 30/30] fpu: Export floatN_minmax Date: Wed, 20 May 2026 10:18:20 -0700 Message-ID: <20260520171820.848839-31-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260520171820.848839-1-richard.henderson@linaro.org> References: <20260520171820.848839-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::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.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: 1779298054329158500 Content-Type: text/plain; charset="utf-8" Allow target access to routines using the minmax flags. Make the existing min/max wrappers inline. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- 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 d6687df982..7e10e1662e 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -1468,7 +1468,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); @@ -1486,7 +1486,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); @@ -1541,7 +1541,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; @@ -1551,7 +1551,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