From nobody Sat May 30 19:23:37 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=1777507635; cv=none; d=zohomail.com; s=zohoarc; b=Gxm6ACU+oQgnk4FLNBR2BepoIs5AVz7mnP2tlHabHXovCcadoUG0otX8LepCI2sWGVImQKYRHneGS4VraMCY1fO79BQSnOKOIzd+OFP3DE0CALp83ZAh9EyQMZ69Dd8SWmncfMXc9sp+Wy4O0I4OAdGYDQPOVsRTVEcL+p4OSNY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507635; 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=8PrlanBakDW1aJjxZgN4Ch42cudiBjZCS7+sWrmaubM=; b=GSDTvdhJPdiIBUY4hrwExUTx6Is7je+azh7yD2+tghIP1V+wvb8j/Apvu2H8q/eNCuFNz7S3m/vVWrOlcgd2OdwYsYMPaU0Otvo3+8ap4iSwWWnPbbpTHU92IRjTckl6gMaRrFLi77qSROundbYC+kuWPEg+6/kKdVlhijcp/XM= 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 1777507635094289.4118982166981; Wed, 29 Apr 2026 17:07:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEuP-00064H-MR; Wed, 29 Apr 2026 20:05:37 -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 1wIEuM-00063M-MD for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:34 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuL-0001ha-9X for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:34 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-82fa8d6425bso178951b3a.0 for ; Wed, 29 Apr 2026 17:05:32 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.05.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:05:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507532; x=1778112332; 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=8PrlanBakDW1aJjxZgN4Ch42cudiBjZCS7+sWrmaubM=; b=jbD+EkhE5OdorXL6tesqRADtOGN64GgnZHMi7vtdGTYCe9inW5Mz5oGqcKlsUFHTzT 1UuED5yKvnYSPFTX+ouGIB2x9jQGGEVGdFwKeuygbfA8R8qPQo4H31Sd4lNUAn9KcndS IVLWO9V7FzmTHEQH6P+O5uZesqN7hWwNLMbNIUJln9M79o1oyToZrGA4eQcYZhJm0HVr OCO0kFKvDZ0t34+pxE7ctDnS37xBUN9l2oz34Nm9HFE7WFmj6n0FTxlkfuqm8VBxm8tw 9W1xGst/Ycm8VQua0Ino6biGiUCjLU8A6Jx3zDOiVeAbJj+Zs9n3Yb0zwQRFPDsp1Enq G+ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507532; x=1778112332; 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=8PrlanBakDW1aJjxZgN4Ch42cudiBjZCS7+sWrmaubM=; b=sDlFiUfZgjtRwtlaODicij2uHMP0/E3iwpgl4bVKUVoIi2wVPn9ElgNjU2NKi+nHMc cIr06TuYxFf75LoYYvPINakIG58FMc21BWRtQTMdSga5ZDa8xIWP6H8g85qlb+8ifapt 45W3SBzY6JSPkO7PfdksP4BKScYZTQHzT9DUBBIY5RMopWSIeeEzDLotKJ9U9G+27tJ4 sywaiTVKjowiIqMMxsjYjDud7WSNEpB2b3CSATaKZ0DdKhOda1lVKZgAOz7iYEfSLX7R YwxyZryH4WJJ7yDcOPfCLAZOBryi7KCpHs/IOlfT4J+X+OSERF3+Ru5u9RZYN3KMtB3S b3iA== X-Gm-Message-State: AOJu0YzOSKATJmrhYIk1UOZ4ya7amx88X93tyNvFKG92qp3NR2riYsNs TgZMsA29MTn2PE+V8lDzxed/qF4qapOQWOBC3hOFAu/FxVglEFbeeULplv8d+zVIiYrRBqbSeSS p6Lvoltg= X-Gm-Gg: AeBDies0XldwiCQY84VEGNgQAYhh8sVIijPrYLuLGzwzaZ1R5EIW2i1POyeXmE0hIpa TuxdhXF5BRLeLtnipyNBhD7GnOLnodNH9MrmXhmaZbDq+w25USFVJR6+DK1FlSxE6QiMPRbrksZ y6AGbaQpKTPsv2UAtaSAXL265MjWIlTksn7qddoFeO3AjgCm3xkZIQ9ef6sBjNI1ycepE71N57T cKeKWxod2Q/CC1szK3iOMXIQYwRfN5uk0ZHltYBYRMih3DnQj0omh/EZxLttP/5vsoF1TNSCtw9 Z+I8khMYWI1f74vHsQereGpp4ryLjFZJ/KcCrHUOgtQgJK6bSTxxWAIQXmYREKoLvxraiRGIM7R n2UNrAcgNWPRkqGPxIx4RZAiWTaXnpcJr7twzkNmidpdacfj9iFP56r3AglwjBFJZf7b+VBYe7z WkikahhVk/N4M629Cr0yyeTCD48Jj4gH1xCYVzL7cJ X-Received: by 2002:a05:6a00:1741:b0:82c:e1a0:3453 with SMTP id d2e1a72fcca58-834fdbe1749mr763374b3a.26.1777507531654; Wed, 29 Apr 2026 17:05:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 01/40] fpu: Inline float8_e4m3_pack_raw to single caller Date: Thu, 30 Apr 2026 10:04:44 +1000 Message-ID: <20260430000524.56046-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.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: 1777507636648154100 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 5d58caf5ea..18f2ca900f 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -673,11 +673,6 @@ static uint64_t pack_raw64(const FloatParts64 *p, cons= t FloatFmt *fmt) return ret; } =20 -static float8_e4m3 QEMU_FLATTEN float8_e4m3_pack_raw(const FloatParts64 *p) -{ - return pack_raw64(p, &float8_e4m3_params); -} - static float8_e5m2 QEMU_FLATTEN float8_e5m2_pack_raw(const FloatParts64 *p) { return pack_raw64(p, &float8_e5m2_params); @@ -1474,7 +1469,7 @@ static float8_e4m3 float8_e4m3_round_pack_canonical(F= loatParts64 *p, bool saturate) { parts64_uncanon(p, s, &float8_e4m3_params, saturate); - return float8_e4m3_pack_raw(p); + return pack_raw64(p, &float8_e4m3_params); } =20 static float8_e5m2 float8_e5m2_round_pack_canonical(FloatParts64 *p, --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507648; cv=none; d=zohomail.com; s=zohoarc; b=fr3WYqiJPWtWJFmGm6JPPygCmM5hz1RnpxNKm/nLRU+/2id1x2ixVCQF+HGpOFzzr/5J/ipO9BXkvNngIYEdVD2hleZoH1b4Lzzjr3cuXQoKvY0JJwUoKOdbFS2xc5ZthIiop4AzxUKJU0Z0j4v/HL5/prpz9qJf5N/yRorqX1w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507648; 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=8KddSzfu6h2SYxUnVyJmdaPI//25dV/tGyPD+hJSdvk=; b=TkGvSRYsUPaVtdE1zpbEagrqKfz4FLrruSJA8uGLOktgnCqf1X5keM+eXd5BY3sbsJWMYfvCkwwlHagLzX4dfzbxoqcsnOziqkGd64uKQAkNHEKCh249tlVynK7M0zVBgubozsEr0rHqA4hehrpMgq7bm/WhLlaYKHcOjQujzew= 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 1777507648765924.9926597895358; Wed, 29 Apr 2026 17:07:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEuQ-00064c-R9; Wed, 29 Apr 2026 20:05: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 1wIEuO-000647-Oc for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:36 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuN-0001i7-8t for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:36 -0400 Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-834da62e52dso158921b3a.3 for ; Wed, 29 Apr 2026 17:05:34 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.05.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:05:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507534; x=1778112334; 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=8KddSzfu6h2SYxUnVyJmdaPI//25dV/tGyPD+hJSdvk=; b=JQEAneSZziATNDhR0HcslGc5i8ENokGUNRicaTlA6niGjCY6lQ/7LoCCQzNiwccZXF mQATQTm8OvR1/iJfo0gybLKtYx+hitMHfA6A3n6cSGzelMIOe8Wd4NQGetVULb//DpCU waKP6LzFiLPfg2GInKAWAiH5dhTDUNhG9ovMvMPOj4mDmdd80rf9PSg1CLHEmFWfQ1sE hSfIG4nBIdXVZrTbFXI3CoKgEDsCcpavQwjB9xrUjbpMRwtZuOtlH/C0kbok5Gsnz3Op 51yeSczND3B7YX6FoGrropp079tA2JxeTOxDs8pjHpnFuODyDXLccsAFUEs8phlIMgHX qbmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507534; x=1778112334; 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=8KddSzfu6h2SYxUnVyJmdaPI//25dV/tGyPD+hJSdvk=; b=VbV8Iyvy8wFAgU7Z/7rJq/1Ba4eSvCiYkuxrm/MLkQXqXr4PjFrYXb0lnpd8btz0yV IIzI6lMli8AExi26LCkK4DX4X9Pv/ZQwujRpJ4GF3Ft/sB8F18hLcsAWFSGRmAsDdWei UG8rOivP1kMgb1JJphHlKiAkMKKrBeUW1DKMpVmh6CdbJpMenplsOnIISqv64u3qdZ4Z FNzaVWvgrPpDOZ/3GWxKJUH40jMUuqBE6KG4PIz+Hw7a41GAE5zUgafxB2tdWZC0ryNF yT8lH2Qrqd6ISxZkkGHY/ZcShAesNAUtqbnE/vpBvEqxdJ6Yw7zexjwFFptWs/gl2d/0 7rMw== X-Gm-Message-State: AOJu0Yz+kmLy3qhPGIXta1YOAychqDwVLDoNgo7qe2uBJAvcdzVHr3+h KwBv73h37jQU1yvuXAB3sOM4r0rgOj+lZh3QFpP0qDBhx9cLrRwanHA2I2Pwi91BHoPuA986kdn xjXG0XSM= X-Gm-Gg: AeBDieulTF3zar3e13dX4Ta1FF+oaX1+VVy8R4UTKx9tHpC31gI/Ns/CEKp6V8vcWMp a809Bb3ccxZeAsKTx90zwIh3/NSF+ikLFgd+K7Tikn2Ohzdio7nCYkbcYfFqqJYLM9MPgN4kZ0v Yy2n5sX7CpYaHggR1sW1IcgfWwOQIYImo6/+q5wU9PALX/EQUo1USsBb8yRBx0QFT7QyBSlLQVf mIujTnzZ4t69NXj26MRLhg4p3HhgUSEF3z+XW9H4kTZXcpbDEocRbe+nMjbyqD9qhfgVA6I3cg5 EAcOpX9kr8vkwrwtWY1TwslZbSbF2+ZB8DqGZUGezJ3iGwImMJh6hzjXUhiE5GlWT6XR5doXjLY o7xEOnMYSfx0JnninHPu0AUl11Km6ssYkWYtkTT7O+kkC4LSQDRHOzJrl3v690au8d/vcH4X2tQ +ay/6zMNGmtx55cuKuce8OlazUA1G2nX2u5VIqnzC1 X-Received: by 2002:a05:6a00:8e01:b0:81f:3bcb:af2a with SMTP id d2e1a72fcca58-834fdbd238emr708570b3a.26.1777507533761; Wed, 29 Apr 2026 17:05:33 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 02/40] fpu: Inline float8_e5m2_pack_raw into single caller Date: Thu, 30 Apr 2026 10:04:45 +1000 Message-ID: <20260430000524.56046-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42f; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42f.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: 1777507650840154100 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 18f2ca900f..5269e5f977 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -673,11 +673,6 @@ static uint64_t pack_raw64(const FloatParts64 *p, cons= t FloatFmt *fmt) return ret; } =20 -static float8_e5m2 QEMU_FLATTEN float8_e5m2_pack_raw(const FloatParts64 *p) -{ - return pack_raw64(p, &float8_e5m2_params); -} - static float16 QEMU_FLATTEN float16_pack_raw(const FloatParts64 *p) { return make_float16(pack_raw64(p, &float16_params)); @@ -1477,7 +1472,7 @@ static float8_e5m2 float8_e5m2_round_pack_canonical(F= loatParts64 *p, bool saturate) { parts64_uncanon(p, s, &float8_e5m2_params, saturate); - return float8_e5m2_pack_raw(p); + return pack_raw64(p, &float8_e5m2_params); } =20 static float16 float16a_round_pack_canonical(FloatParts64 *p, --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507566; cv=none; d=zohomail.com; s=zohoarc; b=I+2vi0lgrS7hnIpjAthD0ziLzib9P/slto5h3g1Uk3wjcuvq5yIdxuRds3f77xOhHMt1mDPNTBCZVzpf5pMVaryBpn9MzIuuNltd1SIloX0nkN7G/88SyA8pzhLuNR+x4YYTNyRlTm63pWr8j0bknLZ4iMXLZT8OvMH3eyNNVM4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507566; 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=R6nFkQ6KIlNZ8kekfBTy8MBT9tZYGdlcL2ADdOiZc9I=; b=N2j9xX7419LUgHjvDTrbMH9MFbgkGg39LI0X5JFrxSGwTSYHKgOcRj7VcoQgsn4Kh9OvN/q10F4DbuNB6L8JIv5WxA2hKbJhXLW9IS5Fpbr/bgT6uTYab+pKStUmlMlBLn9zkk0rZdlupFcNE7EK/j+PUSESsTXTnM69KRmyQkA= 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 1777507566647760.0140268465083; Wed, 29 Apr 2026 17:06:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEuS-00066x-Hb; Wed, 29 Apr 2026 20:05: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 1wIEuQ-00064n-Ua for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:38 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuP-0001iQ-F5 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:38 -0400 Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-82f9fdfc965so169855b3a.1 for ; Wed, 29 Apr 2026 17:05:37 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.05.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:05:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507536; x=1778112336; 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=R6nFkQ6KIlNZ8kekfBTy8MBT9tZYGdlcL2ADdOiZc9I=; b=Rk01/gs1I+fm598V/rVDHNyiGEo31l9QpTifyEpE2U6a4Kv40uKFb6KaFbwrNF7wbt B1wCHJVuWjuEthXaRwAOtVMLr4ExHTQJjHdG/axy3qAielvtZIBQqed3jxxn/t0c/7D9 +m2tTMIxqi7WCqyWb1E9EcWM8bMqNJ/KPAuE7Lg2OAkuzwdOGPTXjWULQnfcsm6I+YHV IHTEIu3SNgnzBej9Qh5HPfE/RDZYL5iIhhcCvTnxt1gSd/eHaIxqDOaTYoAvTDWY2U/Q ODJVcYbakhyU7Gfk9cDaVm/e7DlbuSQ6DvVujW1LNuj9gi71Y4njNLG6WFJv2rHUei7S CdIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507536; x=1778112336; 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=R6nFkQ6KIlNZ8kekfBTy8MBT9tZYGdlcL2ADdOiZc9I=; b=IpKFt4MdWdbP4QbPb64/0OF5PJrqjZ+BWSWpyzVmWsSGpNnM4gqxky3fT7soctnmHX Y3Dy8G3gsv4UO8V2pXxWb0/opiBhmRJQYmy4FuBll19Yy7RPJbQlftjSC5QYv+eGzIlW xZLH8iUUDWtSTY4HaXKV7AQsqnYC89qg/l03pbCs55ncuzLHrTjU88k3NSphl5qPEkC6 RNeZQCyT298lJzjBJxH+yLjdf65ntLm74QW+Z6CcGMFBlUiGLAflhEUm23FMApS1d5hA N6vCtg3PXulsFMKJqiJI9/AAFEYeEV+DdEUfeS68uRpeNjjz6e0ZXFoD+97jCvWtylC9 gtWQ== X-Gm-Message-State: AOJu0YzoL0aN4ctWM15XAaoOBt631KndMDEOc0OQT8P2NohLQJwrT5jk 3c0P296xKxG6R5gGv/4JEuk8fQjQ7hgxFUY1OvupQgQUXDd40QmrfqEvCYSAyKKdVx1tH1Pn9Zf JUj9x2yI= X-Gm-Gg: AeBDiesKk1L2eestAJLe/bCW4B29ZBQd5IyTEZNZSAQiP8qs6/n6udvv5AMsnv+Id1/ Yf6W60gzj+kgXrV8eafTZv+cZ+2bn3+as0zniT+HRq82c2tokGxvDJU4Guxtd4V71ypBFslWUB7 D271aU+8sxC2qdMgIIWKfKs+9oi1h3ZdYE4oI67GL8QlwnMBC7ettkW9KXqiD2as1cgbb8SPNSC 2kkSIta5qD2YCent0JZDU+QnHEtkasQapPAPSG7U043OueJkNbKdoUUD+25MdzoPpbktHIzKgfo XhbJCTZIj4KTdUUezU1ociIc9y7ME0MkIAWa3PkJE9B65svtr4TpBZm8f1jSF/I+gxv3vPXZaI2 V6pMNhc1nkbNjaVT9FFpd0ItH4kzuYwvPwFT/hl7IbVKmeLd+G5iaO+48kRYoIpE/UBlYsSh2xs 0+kwefNwOzxwt3XSyI0hkZHnhpPifvGggB+tL4C4oIBAo/W0VPfAo= X-Received: by 2002:a05:6a00:851:b0:82c:e09b:3f76 with SMTP id d2e1a72fcca58-834fe238900mr656975b3a.41.1777507535956; Wed, 29 Apr 2026 17:05:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 03/40] fpu: Inline float16_pack_raw into callers Date: Thu, 30 Apr 2026 10:04:46 +1000 Message-ID: <20260430000524.56046-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42c; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42c.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: 1777507569953154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- fpu/softfloat.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 5269e5f977..8cfe7f8f4b 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -673,11 +673,6 @@ static uint64_t pack_raw64(const FloatParts64 *p, cons= t FloatFmt *fmt) return ret; } =20 -static float16 QEMU_FLATTEN float16_pack_raw(const FloatParts64 *p) -{ - return make_float16(pack_raw64(p, &float16_params)); -} - static bfloat16 QEMU_FLATTEN bfloat16_pack_raw(const FloatParts64 *p) { return pack_raw64(p, &bfloat16_params); @@ -1480,7 +1475,7 @@ static float16 float16a_round_pack_canonical(FloatPar= ts64 *p, const FloatFmt *params) { parts64_uncanon(p, s, params, false); - return float16_pack_raw(p); + return pack_raw64(p, &float16_params); } =20 static float16 float16_round_pack_canonical(FloatParts64 *p, @@ -2022,7 +2017,7 @@ float16_muladd_scalbn(float16 a, float16 b, float16 c, if ((flags & float_muladd_negate_result) && !is_nan(pr->cls)) { pr->sign ^=3D 1; } - return float16_pack_raw(pr); + return pack_raw64(pr, &float16_params); } =20 float16 float16_muladd(float16 a, float16 b, float16 c, @@ -4722,7 +4717,7 @@ float16 float16_default_nan(float_status *status) =20 parts64_default_nan(&p, status); p.frac >>=3D float16_params.frac_shift; - return float16_pack_raw(&p); + return pack_raw64(&p, &float16_params); } =20 float32 float32_default_nan(float_status *status) @@ -4772,7 +4767,7 @@ float16 float16_silence_nan(float16 a, float_status *= status) p.frac <<=3D float16_params.frac_shift; parts64_silence_nan(&p, status); p.frac >>=3D float16_params.frac_shift; - return float16_pack_raw(&p); + return pack_raw64(&p, &float16_params); } =20 float32 float32_silence_nan(float32 a, float_status *status) --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507849; cv=none; d=zohomail.com; s=zohoarc; b=Xz4tkmuQbo9s8hCRzZz2eozw+85kvVuNS/lxngzl83G3oAUA3j4Lfhy5y9mYfK+hMYCeVj8GjdSwSIvYKzHpnu6QUHK0+rLYpRZnXCGnXuBhoeqJW7GK0wd08ICrTzMyYqsOmpGVwkw/vuAq1ZyQi6tX39nWXhC+ztw3r1Cc3GE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507849; 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=S6PeVyr8q3AKOmBPv+t3uSdl0yB4glMGXowE42GNDyE=; b=I5N4G7Jh3W7jJpppH7rN4QuMyDTnu39ZRtdwy6WixlrMgMYKS/K+BgAEeimyIT1FS2JkRDYB0zA6NmSQskRfYyfgtpxje5jZK3qfk/+f9NvVzxJ5bPRmTVzJFnZAosEn8jnTJdE5zpPv2F9bGJN9YtHoew8YFrGNYLhlQjYoidg= 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 1777507849100579.4593547320239; Wed, 29 Apr 2026 17:10:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEuV-00068T-6K; Wed, 29 Apr 2026 20:05: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 1wIEuT-000684-Cu for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:41 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuR-0001iv-Sk for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:41 -0400 Received: by mail-pg1-x529.google.com with SMTP id 41be03b00d2f7-c797d5ad36bso100664a12.2 for ; Wed, 29 Apr 2026 17:05:39 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.05.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:05:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507538; x=1778112338; 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=S6PeVyr8q3AKOmBPv+t3uSdl0yB4glMGXowE42GNDyE=; b=FjDt0TFhvTvKMjjqD9a9/fmmTtBR/ZE3jkE+brD6dryLiCDqQJ+mHHxM82U4jwODhV cfcvu/uso6lFm+Dm/vuHxj1Q5w2yJ63zX9O0uiJuoJQbDyKrvkr6ofhT5B+FYNJOqE2p eXgKIgKJH3QqgLX1P6WgdsqL4nFzgviw7i6UAwiTN1NTXswQw09oxQvmKFLCtA1o1EhO 0rxcCmRWoudGem+s7juLrqemZpnO094BmNkw8PLx/L2Pisg9BayhhpEU7GOWYQmIUB7e 7rx4HEHWwIHjpyoPlWwQCyAc6xNcAH8w1Abo9ERlD+xPZwUM662m3t5L1DmjJ8kgEgBz ScgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507538; x=1778112338; 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=S6PeVyr8q3AKOmBPv+t3uSdl0yB4glMGXowE42GNDyE=; b=SSJ+HeWTwtKTHLe0iMCatrr/oesC0JlM+mDF171ioY+cLur1wofk8ch+Tdvjr/S8yc cHFAxp10oA0b/wuTqWD4FPy482vLfCm44VxYuidTdHfoNXSieGh80b8/QqLoPX6l2B3N 1VsGzhq4WO+hJiDKoojbR2CQaXm9HmNRk1/DEOzpKxtxoia0iehAxqsFhVtfBGTSFVmG A63A3frd2KvuYHrJXObemyM9PBwngK4biT3vXbRATxOevBCUg45ixKQcArpQzig+cakB kHZ6p5T+szDFxUVaviLGf7JmcbCpeJKReMtgEA44PNzou2PH71bzVc+LfzuGftn/9P8W smJA== X-Gm-Message-State: AOJu0YyTo53Fe06VyOP12jYPhvK0HiEeHfsGdjn1NQYQMMyZrsmUEKZ0 tjp01fcrtu6Uk2XN2YjE1PLtAW1xJgBzx+I3OurQEI3lqaatp8+tNNkK9m0wrbR5PBndWIRSs6h 3bYDMCMY= X-Gm-Gg: AeBDieu+Wt9BbJWBWzkS5i89enitr1zIIiQ3A0MhoSdQmwEjb3OLaR7M1R8+G0DPVwM MUkyuYZvriSqVVnVrKL2Mvgu8/k9wMr5YqUa3w40TtdBukCEBoIuwLkNpUIR5gPbHNu96Zor3Fz WWDp9MKAamqOm4Nl9WqFHlP+XbeONQFh7hiD2YTrsFFR3PtXtCK9O5KwUVxYqvVpvcUUFEG8M+P yw4WqFu++LBcJaG+ORJJFyDDsexIw22J6HYAV2fQRqeAHI2tVJfuBdREgaXf/0E1PMKJsfKKUDT 0ssmI1/BcJolNXqTl63CEyaxIMaS797/C0MFJXPAtGbaEX5Gtbc24LQabhNJes77hEcq6J1Qvxc LtHUTwx5ArkuBeYPEjq/Bqu41ldKXv2ap1jqVVbAxNODno280ccc6u0/WPxo3GKmyTVUobwsZHS /X+cGpIADOFwDE7jze89dMJwj3ziPYbVEjCP11oR1/ X-Received: by 2002:a05:6a20:6a0b:b0:3a2:c683:fa84 with SMTP id adf61e73a8af0-3a3cf77ba41mr532145637.27.1777507538122; Wed, 29 Apr 2026 17:05:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 04/40] fpu: Inline bfloat16_pack_raw into callers Date: Thu, 30 Apr 2026 10:04:47 +1000 Message-ID: <20260430000524.56046-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1777507849447158501 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- fpu/softfloat.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 8cfe7f8f4b..6d5125eb1b 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -673,11 +673,6 @@ static uint64_t pack_raw64(const FloatParts64 *p, cons= t FloatFmt *fmt) return ret; } =20 -static bfloat16 QEMU_FLATTEN bfloat16_pack_raw(const FloatParts64 *p) -{ - return pack_raw64(p, &bfloat16_params); -} - static float32 QEMU_FLATTEN float32_pack_raw(const FloatParts64 *p) { return make_float32(pack_raw64(p, &float32_params)); @@ -1488,7 +1483,7 @@ static bfloat16 bfloat16_round_pack_canonical(FloatPa= rts64 *p, float_status *s) { parts64_uncanon(p, s, &bfloat16_params, false); - return bfloat16_pack_raw(p); + return pack_raw64(p, &bfloat16_params); } =20 static FloatParts64 float32_unpack_canonical(float32 f, float_status *s) @@ -2230,7 +2225,7 @@ bfloat16 QEMU_FLATTEN bfloat16_muladd(bfloat16 a, bfl= oat16 b, bfloat16 c, if ((flags & float_muladd_negate_result) && !is_nan(pr->cls)) { pr->sign ^=3D 1; } - return bfloat16_pack_raw(pr); + return pack_raw64(pr, &bfloat16_params); } =20 float128 QEMU_FLATTEN float128_muladd(float128 a, float128 b, float128 c, @@ -4753,7 +4748,7 @@ bfloat16 bfloat16_default_nan(float_status *status) =20 parts64_default_nan(&p, status); p.frac >>=3D bfloat16_params.frac_shift; - return bfloat16_pack_raw(&p); + return pack_raw64(&p, &bfloat16_params); } =20 /*------------------------------------------------------------------------= ---- @@ -4797,7 +4792,7 @@ bfloat16 bfloat16_silence_nan(bfloat16 a, float_statu= s *status) p.frac <<=3D bfloat16_params.frac_shift; parts64_silence_nan(&p, status); p.frac >>=3D bfloat16_params.frac_shift; - return bfloat16_pack_raw(&p); + return pack_raw64(&p, &bfloat16_params); } =20 float128 float128_silence_nan(float128 a, float_status *status) --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507564; cv=none; d=zohomail.com; s=zohoarc; b=edcTWaqk2xRk5dQsefYpPV9V2jr6hpnVgcnt+EWiscQadxq4Kur26vg9mlSMI8XBSgJ3Ub3CTCC+Svt3rogGSmF2lyZwnrcTesmr8AQiuy5ccaw8eaXfqftJRqAR///c4ANTlQTEQgfneuU4y5lWZ/VFqA9yiT1r3QOi5hKyt5c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507564; 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=4Mxa4m32oeXlXCbYEih/Wgv7PsGE1aRsWYB+Y9zn5Ik=; b=AiD5R4q7b2f4P33qPV95XEnCCXMLtVORmu+XBvRGK+dzQoYemIPTmS86C1yJ/pKNmg8pXJpqagxyC/2AAdV4/KpvDxdITwXOpW6U4j/ufTDPmsCy0/SZh5KQCcL6SdMVOvEXsblmsGfmJI1lNeFJov0RIdvDhmpu6Z72Lf5jMO4= 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 1777507564837718.104626818459; Wed, 29 Apr 2026 17:06:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEuW-00068p-S9; Wed, 29 Apr 2026 20:05: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 1wIEuV-00068f-H6 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:43 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuT-0001jH-VB for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:43 -0400 Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-82d0b68837aso184615b3a.2 for ; Wed, 29 Apr 2026 17:05:41 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.05.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:05:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507540; x=1778112340; 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=4Mxa4m32oeXlXCbYEih/Wgv7PsGE1aRsWYB+Y9zn5Ik=; b=L1gWHhcSKu/JLtrNSgUjB6ejBSloxXX63tpxR9mCkYbkpTPwlAin59pla+jOKvTj0G GTGThGDlxZOmdojhME/n9oYgluKbm845gyDnUCZLPI5xo58n8s9OE77JPSfxwxjfAjqy E+KqYjgdGhPVFuuMKMn4Fd/hiBeNf7kTwKASoxdVEo8vNMqLed0ZIPS2GRwDrnFORkYM 1Otkb6UN6WDGndc+1NMy1e+tA9pxy5V3wGJBwNVBfqXfnEJuaJe4ZXMMDsaGxf22wb6k ocY/EIn8aVrDRJRklPOARga3Amip7s+9Oqf368AnEHz0mXlIEo6M529rt0t/FTN8vncx ayrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507540; x=1778112340; 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=4Mxa4m32oeXlXCbYEih/Wgv7PsGE1aRsWYB+Y9zn5Ik=; b=fEj3PTI4K85c/AbOJ35NM3yTiDcr4zlPYPGP5gHGMduHb6nGHPH2qwyPkJRClMp5tY 0nqeYuRmXHRBHJNcP6abTZFpJmTJAhS3wCFmsvKFG/Z7JHtX/LR4U05S/olUJoSfYy5t /yBQZORhcDOpWixBh5HfidVmZ0+t4YPrjZThOsia0aUymo4KM2qCcgTnHLIBpSrZ2Pcy xPvfkOX1g6MbVSTqWbdkXP1RDgOCgQhpUZNc/MhVJSYL4+1CppQDi3t2vm/mF6Vvmnmr LEmsnz4xdsSRPSG7rGaPsJiEB6HuZg0xdQvC+pw0zhLtCYofG9pVP3OAeoPWKWdSlVLe bkKA== X-Gm-Message-State: AOJu0YyC4nn5h3I+2ya/16EzMaoru/jfKhIA4y+SVeikKFgOcW9EF9wL lGQRQEHTqS91rTy5kUJeAAbaVIISFZvK5pHUPkNTcF2EfNLf5FAj0yJC6xxSyhhcP04L+FkPe/v 0/+BKtac= X-Gm-Gg: AeBDieu52DU+jzwGXgWo1vJil8mZwPklRPOPReziYlto7zm+mHi3ULGIvNE9DJKwQbp xFuQ60wjkPvQAP2r/6Ur/KYgIeDjYVaquETvZKbgrqRJ9G2n1e+UK7fCpUKcYyomvun9sziwRY6 +vlO9vWxN6VlznXOPkcv1y1thpYwV1ELmJSYkT0dSu0cr7XXyThsmuZhSzT+zRF+dc0vmj1T5mS VABhZWLJgGw53ZJi8TbN6zLFTUMxjsDKn/tDJJsKjR0FmoaBTbyZ3AlccH5asXSGcesqOkR+xl1 bmwlxt/kGodnlVbLS9yV2QUFPSc+Zi7XJxSE17r+6lvkFejk9gKx9iotuTPmSpctbQH9mN1UWmW wPjhyfPYc8eGIh3/hm/r3ql8ul44peBaVl90h58OujrC5TSVgCkOShoRTEJmqtVvCGZanhm3xDP XZ6YUEZSBQbcBsh5iAzcIjZ/VNCu+eO87iLAAHvCgtM2yeOawOEho= X-Received: by 2002:a05:6a00:bc93:b0:82f:abc8:ae0 with SMTP id d2e1a72fcca58-834fdb32471mr801882b3a.17.1777507540350; Wed, 29 Apr 2026 17:05:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 05/40] fpu: Inline float32_pack_raw into callers Date: Thu, 30 Apr 2026 10:04:48 +1000 Message-ID: <20260430000524.56046-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42a; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42a.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: 1777507567114158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- fpu/softfloat.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 6d5125eb1b..d1acf383e9 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -673,11 +673,6 @@ static uint64_t pack_raw64(const FloatParts64 *p, cons= t FloatFmt *fmt) return ret; } =20 -static float32 QEMU_FLATTEN float32_pack_raw(const FloatParts64 *p) -{ - return make_float32(pack_raw64(p, &float32_params)); -} - static float64 QEMU_FLATTEN float64_pack_raw(const FloatParts64 *p) { return make_float64(pack_raw64(p, &float64_params)); @@ -1497,7 +1492,7 @@ static float32 float32_round_pack_canonical(FloatPart= s64 *p, float_status *s) { parts64_uncanon(p, s, &float32_params, false); - return float32_pack_raw(p); + return pack_raw64(p, &float32_params); } =20 static FloatParts64 float64_unpack_canonical(float64 f, float_status *s) @@ -2035,7 +2030,7 @@ float32_muladd_scalbn(float32 a, float32 b, float32 c, if ((flags & float_muladd_negate_result) && !is_nan(pr->cls)) { pr->sign ^=3D 1; } - return float32_pack_raw(pr); + return pack_raw64(pr, &float32_params); } =20 float64 QEMU_SOFTFLOAT_ATTR @@ -4721,7 +4716,7 @@ float32 float32_default_nan(float_status *status) =20 parts64_default_nan(&p, status); p.frac >>=3D float32_params.frac_shift; - return float32_pack_raw(&p); + return pack_raw64(&p, &float32_params); } =20 float64 float64_default_nan(float_status *status) @@ -4772,7 +4767,7 @@ float32 float32_silence_nan(float32 a, float_status *= status) p.frac <<=3D float32_params.frac_shift; parts64_silence_nan(&p, status); p.frac >>=3D float32_params.frac_shift; - return float32_pack_raw(&p); + return pack_raw64(&p, &float32_params); } =20 float64 float64_silence_nan(float64 a, float_status *status) --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507579; cv=none; d=zohomail.com; s=zohoarc; b=e8kRextSvJcPkQ11EtS78MX8ad6o6XFTSpI22yaVzCi/2ftvspTCLUu/KD0y8gsl381qV3TdTrveNSEJwPE5nZfU0+xHgBh7Aea2Rnv+K6YnKugZ+ARvojx2EGKKXYmv4RBC7LWSOQc7WnuVBXc8jpcTRGG4YaaADXf0m5jR5yM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507579; 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=L/ftQiotywHoX9E8XzX0XwrkoezWs1gu+rPw1xNgooc=; b=HNKOYfiSllXtTaIJWPgs2cAFpb6uJLIRdDHZmZEsQ/tbQ34Xgujkd2yBskNf5czThOFPYQo48uK09Tn5aInNuWneuQnzjIdPYyiZNONuQjSOFD3s6Np9Hk2dM1oxF+IpTuqOnWUzlej/dYPn/Uw3IHe5YOey90h9JHWTU2f3+FA= 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 1777507579665409.9971627884919; Wed, 29 Apr 2026 17:06:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEuY-00069P-Jk; Wed, 29 Apr 2026 20:05: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 1wIEuX-00069C-Gc for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:45 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuV-0001jb-W9 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:45 -0400 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-82cf636dac8so171715b3a.3 for ; Wed, 29 Apr 2026 17:05:43 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.05.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:05:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507543; x=1778112343; 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=L/ftQiotywHoX9E8XzX0XwrkoezWs1gu+rPw1xNgooc=; b=EuyiLonfd9YTgilrV9BUgCPzVNug8CyDv46UlzI8EYNZHtJJ0DWnes+xvxDpJ7wv6p t2Ni8bmIdidYPyJKy+qH5TmR6MKowCVkOPYfAAI3ke6HSmh3tX6fCMNdohgg6cWnKqk9 iq5yeWsAGx34UklvKYy+Enms8Vgzv1UAK6idinr4EQeijOMkilPcpW7afj/LC+76A4CT eeiQQvRmVJ465e9zM5lTW1uyCY70VJcg2SexjjVAzGXT3L+lsg0VcZycpUqv7PxKy2Bg E3ZZySJOzL0Ei2zSTt4IfcbZnb880a+WCU82J+rO7lHeW26rgu/dQPVR1JXDvYn3QCag Ta3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507543; x=1778112343; 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=L/ftQiotywHoX9E8XzX0XwrkoezWs1gu+rPw1xNgooc=; b=N1aOdbT5AyhHPXGxexMptVgnNGhzqKcAdNTWqwa459yJkvl+rGns9qEyLb/scJMtXp EAsXi85SuCdTxPGz3m1ATM4OJ5QfWbuKFcfF8NB8TXKSYnmOh9O4FXX/7AVf0Gu5bkgb pIQB1R5tjXqSztzjooP0No7zcSYLyESMgOiqIg735yZ6sblJEXFGdRpXIUD8t/rg+I5F pWLBNSEcXnq7sWcG4qO7Yv8iyt6Psh00o2ZbA+YEj0Mf0IzwN0ed+Kk4Ctl9JQkrNFWP ugNkKqMk2BCV1ay2YBLAZ6j9g3NF6lQ56NBodMAPOg0sFJCg46+YTsezVQ/BQKhyBpR6 d9Jg== X-Gm-Message-State: AOJu0YyemZWg3jiQRNf4VtZLoTL5Kq3TZ1DPUXQrZuUf+EW1SWthWlZ0 J+9XlxyCQ3i+osqDOGqal//8vk2EzV54sckybMblGsjcS7kB/yoyP2feusxiVAnxFpXCBQhKVW9 9buEWumA= X-Gm-Gg: AeBDieu/HiPfdpQZMsHVyDQN0fDS9j2NQA/zaPBxxeqp19bTlJh4NPNNlo3qFh5h2On +Olb9HdEfZmIlaUqdV93OjTFuqZHFrS60ouT7F4mnJagiFhlGkvD5FIzsV9PV6SPRzMexMrNmm7 HJZL5/U/i0i4vDsoMyQ5aOMS0Qhh6ccAKMJq3cR1N0TDo92LcyICksFf5ddnKzuW3ZPdQAwK7XK H4DVupVbxV29jFnTHB978yRlHERJk8z8OFsqkiZ2P2a5RwHuNCoTGdGYY0iuGCDNXKx+eYi3R1x YjwRmzBIfH/nrECnOl4tXWyMOXg3vuzHdoklDVQOxQxXjN4OTJQZFp54/iSyZupjEc9e8E3a/us qkAN/XnsKX6ltUuSYOcdwxgI9r6u318nY0dVQja6emsKyO0AxfInJX4BXYCzt1HC3kun3I4OxJ7 vzHnNamTes4c7JJF4BEny9Y5bcCJfvjcEn3uf3TUZQ X-Received: by 2002:a05:6a00:230b:b0:82f:b519:a5d0 with SMTP id d2e1a72fcca58-834fdc49eb8mr765127b3a.39.1777507542580; Wed, 29 Apr 2026 17:05:42 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 06/40] fpu: Inline float64_pack_raw into callers Date: Thu, 30 Apr 2026 10:04:49 +1000 Message-ID: <20260430000524.56046-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::433; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.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: 1777507580446158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- fpu/softfloat.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index d1acf383e9..302612fe42 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -673,11 +673,6 @@ static uint64_t pack_raw64(const FloatParts64 *p, cons= t FloatFmt *fmt) return ret; } =20 -static float64 QEMU_FLATTEN float64_pack_raw(const FloatParts64 *p) -{ - return make_float64(pack_raw64(p, &float64_params)); -} - static float128 QEMU_FLATTEN float128_pack_raw(const FloatParts128 *p) { const int f_size =3D float128_params.frac_size - 64; @@ -1506,7 +1501,7 @@ static float64 float64_round_pack_canonical(FloatPart= s64 *p, float_status *s) { parts64_uncanon(p, s, &float64_params, false); - return float64_pack_raw(p); + return pack_raw64(p, &float64_params); } =20 static float64 float64r32_pack_raw(FloatParts64 *p) @@ -1548,7 +1543,7 @@ static float64 float64r32_pack_raw(FloatParts64 *p) g_assert_not_reached(); } =20 - return float64_pack_raw(p); + return pack_raw64(p, &float64_params); } =20 static float64 float64r32_round_pack_canonical(FloatParts64 *p, @@ -2047,7 +2042,7 @@ float64_muladd_scalbn(float64 a, float64 b, float64 c, if ((flags & float_muladd_negate_result) && !is_nan(pr->cls)) { pr->sign ^=3D 1; } - return float64_pack_raw(pr); + return pack_raw64(pr, &float64_params); } =20 static bool force_soft_fma; @@ -4725,7 +4720,7 @@ float64 float64_default_nan(float_status *status) =20 parts64_default_nan(&p, status); p.frac >>=3D float64_params.frac_shift; - return float64_pack_raw(&p); + return pack_raw64(&p, &float64_params); } =20 float128 float128_default_nan(float_status *status) @@ -4777,7 +4772,7 @@ float64 float64_silence_nan(float64 a, float_status *= status) p.frac <<=3D float64_params.frac_shift; parts64_silence_nan(&p, status); p.frac >>=3D float64_params.frac_shift; - return float64_pack_raw(&p); + return pack_raw64(&p, &float64_params); } =20 bfloat16 bfloat16_silence_nan(bfloat16 a, float_status *status) --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507575; cv=none; d=zohomail.com; s=zohoarc; b=GRX/0PPDjccwWrg/sLy98jPHwqRSjGxT/E44TG2jQiKziKGkomvvKH554a4K5ItjgV9aNJEioTNFJMpK++2nCIjK8uyFNo7lXSMIAfeCtJDlhgPLZ/qD9nAEHO72P1CKjHk2UEHdHRQbr3mClrRHnnUDDz1vzxIJjokTZNEyJCw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507575; 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=ITXVWTswHK0ITcm+gabq4ujW8XFmcTy1jBekq3ZfSNY=; b=eWFHZ/knJwZVQM2PsPN5XOWemhf4UVfOCoaZP94ljga9w1CsAHuE90xOzI2fHc0yztGr9WoQZfua6P1hRGVDk4LNiBVf3Ks0M1nEEL4h4e29lSMg1Yzq45jLdJgjr71r1rgd8Cn/wMpr/qXtPSZnSVLjvObLW7OcD+7OE6mlJSk= 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 1777507575510427.29119420949985; Wed, 29 Apr 2026 17:06:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEub-00069z-3s; Wed, 29 Apr 2026 20:05: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 1wIEuZ-00069l-Ir for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:47 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuY-0001k9-9S for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:47 -0400 Received: by mail-pg1-x52f.google.com with SMTP id 41be03b00d2f7-c70f91776fcso107960a12.0 for ; Wed, 29 Apr 2026 17:05:45 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.05.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:05:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507545; x=1778112345; 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=ITXVWTswHK0ITcm+gabq4ujW8XFmcTy1jBekq3ZfSNY=; b=fsORKUknINLJRbYkmwUDBFIpLDGAkcaS0VzNgfoUCaUnJ87KdotPBxg9WUe7270o3l YsESCuo0VA3f8Gv+MllEJdjjiJykdyeaHugr6mZkl4wDOW9FfPQM8lUe6J912hrwlvpT 6lpWZzfAogEC+oEb/i1/DBttTvRKDNjaaggM4mGhsAYx0fLTMTsizSocpezYwmuw1Vx+ mhhQoo2Beu5HB7dTuLs4dXYyUooryFiYvIYWCv4mclqGeIpVJeJZAwuayYw5rujL09gs 7JhiPdrFYv1mjdkdPmZfLl+hy51qlz+a5Y4f/yVpiSYpAo9kYNakPLVHAk0ud/ocXTJM Q9SA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507545; x=1778112345; 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=ITXVWTswHK0ITcm+gabq4ujW8XFmcTy1jBekq3ZfSNY=; b=CFS7KM0ubs6pgrd0D090SXdMsMFN03fe9D58qQIqHWxwvJempxAVs7DCWHKSW+r+qB xWF6zxZ11sCzJPV2WBENRoTgDLMiR7mdoGlA7TlG7kqRN0h1IwvgdvEs5SaR38QCJakS cbNJ/Xkj8sUmiaDUVgPhF4wbeeogCltby5z0kAwWqjxISCyXqo87SIJwUp2UbFvjgh/t dK9KS1FvjEVBin15Z0NP0brpU2ChZZ2IMk51mE0yhThuA4Tbce2uMSHKrUIewy3zd4/Q SNEnZY13mvA0pXDHi46tklIoFZ6oQP4fjytKTnCsEpJS2/HIKL+hxFmZooAyOwjCs8kE p8MQ== X-Gm-Message-State: AOJu0YzJymzvrYE/yRm4a9n9nZ+lrICUq6IKOFszYnIF4ahn2l/fItuJ uTnWe4APJBHVz2rAux6Sb7yO+rJ6hI6nelw7kzdBZWkpM9mxutD2VeuT7CUtnIurnzb5IXv4Ftw VnVwJHWc= X-Gm-Gg: AeBDietLAY7pyvQRR3znF7H+r9CUFkwyWlvRmT3/JET5F2mIFXPXFsUXo+UMcaYJ4gw T+iQ+sneM8XoRwHJmur9wVHEzQnBrTSwewYC2V9o7XM74LByL7lpIbxLb3gpz5FBSko4zi7Nzmo UCqaj0ncM5ZrSTNGOFFSpqcF3QTwWEHkbw2BqNMuC3dz7vM/Q/K8Sb8DmfjfeGPVrsU39H1mDUa E1NDuBX48luAfUkBEpA4oh0kQFti5TQZXV1yjo+ibYRFdXR7l4+qFwSdvN4soXtyqrTCIiovh/T XanS4KXh86puK9eJzepXLl54qjKyqY0IjBIh0Mv1x7TNjBsW9Jh0BhdTDAF29aESyOxovWCOYmZ qkIaJyhWOhsKd4vnoNB7IK3QGJdi/ouFTlSwwp5KcqWBH1xnHAX89Jj4PEvB4DZ7rIuMywswIjc 0NaPsFqnLCY0kF2mZkfgl9mQd9288kkKNYAR0RX/3o X-Received: by 2002:a05:6a00:a809:b0:82c:e83d:a9a3 with SMTP id d2e1a72fcca58-834fdb6f1c2mr758322b3a.22.1777507544769; Wed, 29 Apr 2026 17:05:44 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 07/40] fpu: Mark unpack_raw64 QEMU_ALWAYS_INLINE Date: Thu, 30 Apr 2026 10:04:50 +1000 Message-ID: <20260430000524.56046-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::52f; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52f.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: 1777507576450158500 Content-Type: text/plain; charset="utf-8" This is almost always used with a constant FloatFmt, so inlining pulls the constants into the shifts. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- fpu/softfloat.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 302612fe42..63697ab3db 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -633,7 +633,8 @@ static const FloatFmt floatx80_params[3] =3D { }; =20 /* Unpack a float to parts, but do not canonicalize. */ -static FloatParts64 unpack_raw64(const FloatFmt *fmt, uint64_t raw) +static inline QEMU_ALWAYS_INLINE +FloatParts64 unpack_raw64(const FloatFmt *fmt, uint64_t raw) { const int f_size =3D fmt->frac_size; const int e_size =3D fmt->exp_size; --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507620; cv=none; d=zohomail.com; s=zohoarc; b=ew90LfyZObK3PCZ3GVrgL7UZrJQOYz71jdl5UGxt0XvhgRAIY/yiG6y0Od6poLuxAWBZTXdiG+1ECCsFvIJF9Kd/VTSgUbAWZE664V2HQisJfzxOCXYolOovzrwJlvEmD3pO69x2b2tgntqS6uJUZOWRDJx/7OclLF6KTbD70Q0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507620; 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=naCDYMEynTNqx6TFzJKNSAiBh0vvryTyWBIKKZOB+4U=; b=H86CRWaYr1tsklvfXHrtVT1LkAOCObUjkWY1UtV0meINrc1Oac0Szi22Bkar4cj0tqR590DBQbh0lnTORcnBWzi3tn46Sam8tzCp9WK4yG3i8IHqNfHAO6LCSWV5hDNPWN/TsK97ztY7eYMXcUUlV8W7on4o1jf5+2MChZp5Thg= 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 1777507620438401.25864121369546; Wed, 29 Apr 2026 17:07:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEue-0006Ac-EP; Wed, 29 Apr 2026 20:05:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wIEub-0006AH-U7 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:50 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEua-0001ka-E1 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:49 -0400 Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-82f1f6103afso164804b3a.1 for ; Wed, 29 Apr 2026 17:05:47 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.05.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:05:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507547; x=1778112347; 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=naCDYMEynTNqx6TFzJKNSAiBh0vvryTyWBIKKZOB+4U=; b=N+JMrXtjz3QAGDI5YHDgW+4p9DE2h0AnpzZroaXrZoNp9u38ljmwBW+OONnTWVz25v xdmthQVo1/Qul9rAbB9bj0Ne3Q8tnQC1eq/ZXyGC1qhTNmPQMy/+6ikiz1iB+SZsFctj /d8CCWCZWO+3vABtUcCo1Yjw6BS7WYe9fN/6QIApYcHhRVcO9khaQ+wFiOqqienJg+6i +Wk63MS3Atkh8avkKYW9eXfObaFlTXMKnl8JvkEXZqflWqMp7usnIW4/oAmT1jFb+Ov7 gtXYip6D5QxsQhe6TEuEe5p1T0R1AczOwvzxG2bXwEOT1VDg34FIwpW+T9mi4MD+couD r5sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507547; x=1778112347; 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=naCDYMEynTNqx6TFzJKNSAiBh0vvryTyWBIKKZOB+4U=; b=XWaIda6QvzWa/piYAjXCeHlCHI+WDacIibk2XtD40boNaSIKwl4/f3SSz0M9t8Xgl/ D4tf4HR4yhyRIKPjbChBcCjPfjhqHIAoLsWJlbvIbLWWzrlMJMfaQhcY/wzO2599kht6 eSgINnt0D9VuM1ra0tqp7V6WUkrzlfjBOBkNkaMZeKOBsbPh8DVYiNyncMecZtfXds+3 LIqiiico4lUZd622ve8Elnq8SADsR5E2Dvh7MlmEUWv94ijPzpu3uO3gspEtaLfUqZqA n7VCqtM7dgvKqV0z53cE89+PDerOIMG0YTyfc4l/5WB7SV6XNDc5A6i5jYwm9kc1pY7I +rlg== X-Gm-Message-State: AOJu0YxjJ8a7LXLjWa3cxyuWKFgwV+VO2M9TEnMuRGCubmi6LlVHLNxB SxCJxL9KVCWEqysFXhjQSJ4r4FD34fYnj86HkYgiVGJg14p32HhNIgpT3L7W1aGsV4cBtRMljyb BV+KEXjk= X-Gm-Gg: AeBDievz4O+iX1DWkk+qsAHpoOAtVjMlhhLxNaz+5PQJBOmuJrFDOy7LrjRyuCtdzxH V+zLdRqStBnlEY1nArs51Lajw0qThs/3kR96U7v/jMIlE56jJgPGeZDqtik+H177LGlc0GwPZE9 SrXNtIkPrGrDhZqLapTrhuWTxABZ8OeDrg9dvk+IelcUmVJHego3Vm2VIn20H5em96lQ9/G6aKA Njm+TWuARB3z1o/xdWgzW5p1a7iiG+1OgWz0NdW3Bl9nvQAAV5d2sx/s3jWtbic3YmQ4yk5Gcdp TAWbqH9ru+MdRreM+jBcfdkQSPsUAaa92ZAYMwtYYu9pdCNzyKg/IcA9ESh7kxqTK8Ms/nSTI+f u+jboHbBDUWrOQWjdcp0GM1jQvX9uIDkUy0sL5ZuLwCCT3ABaHu2yvXf95k4N3jQHmvUYykk+Cs wRlc7MX2bfIOzBg7+a3UH5prSy0SzlgMdkhPV/9S6u X-Received: by 2002:a05:6a00:4fcc:b0:82c:db50:ef77 with SMTP id d2e1a72fcca58-834fdca283cmr750883b3a.49.1777507547015; Wed, 29 Apr 2026 17:05:47 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 08/40] fpu: Mark pack_raw64 QEMU_ALWAYS_INLINE Date: Thu, 30 Apr 2026 10:04:51 +1000 Message-ID: <20260430000524.56046-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42f; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42f.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: 1777507620570158500 Content-Type: text/plain; charset="utf-8" This is almost always used with a constant FloatFmt, so inlining pulls the constants into the shifts. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- fpu/softfloat.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 63697ab3db..8c4263bfe6 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -662,7 +662,8 @@ static FloatParts128 float128_unpack_raw(float128 f) } =20 /* Pack a float from parts, but do not canonicalize. */ -static uint64_t pack_raw64(const FloatParts64 *p, const FloatFmt *fmt) +static inline uint64_t QEMU_ALWAYS_INLINE +pack_raw64(const FloatParts64 *p, const FloatFmt *fmt) { const int f_size =3D fmt->frac_size; const int e_size =3D fmt->exp_size; --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507689; cv=none; d=zohomail.com; s=zohoarc; b=Y00QDZFaI1iEJ1mP0Sp10aGoKEQzgL6XNiM7aIkKPV4f3Faqc+wpTmVB80QCIF7StGQy7VwJYP/naS0wqU39i80UthZm0Ipp1rH4GmcTym9eLEc+viqXN9Jqydws+8TjBQL5OqNfTIHSIe/Kj6FMcuR0+VMbbHH4XfuV+kXMvT4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507689; 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=t/DtA0bTg/+qbb2xEBeyZd976Nwj4hvFStm5Q31fGd4=; b=JqeMgZa4QVkLvsuFYL8hgflGHCA9iPfSANlK/x/YYadgu8mKQWsZv2Vk30R1Vsn9Zb9wMmobf0w+haiBw2rgzF6u7vqZytG7RS2TjR+D22zxEMkCM8DsR3P07m38Q6BxErpZ5ubOx4oCzckpQya/fRtWRx5IlVTeJeql3kGpr5o= 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 1777507689215704.5250127318677; Wed, 29 Apr 2026 17:08:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEui-0006IQ-HY; Wed, 29 Apr 2026 20:05:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wIEue-0006Ao-Ng for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:52 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuc-0001ku-MR for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:52 -0400 Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-82748257f5fso1056320b3a.1 for ; Wed, 29 Apr 2026 17:05:50 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.05.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:05:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507549; x=1778112349; 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=t/DtA0bTg/+qbb2xEBeyZd976Nwj4hvFStm5Q31fGd4=; b=EgCZU4FSWwcLYgT+oO9Vhqf16VO+gXKMlpsYPLYeF5NbzagBU2tfTZMEIdGFEJK+Ga k/zUpf4uZ4gp42KbbRKa6QH/wZ6XFKZNOWF10vq1R0QqYH1oQwHatJ3yhceh90QlJV+C uGtNP4+8lWPh0RHKJvnqVUZ3Qeip/nin6cC9q5JKyzAP46Q6r833/pp1ooHCL0j8R5LE IXT+nYSild7JRgM3kGxpq62MEg8xiV40xGA7PtWGW0RuV/cCr84eUr4Rn9hDQOWzJTfX HxOTxsjTz6fmG3hdFz6g0chEQuR/I/qCoF/GSynMldK4TvTULyfmHJRebnxF7XqraNgC gp+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507549; x=1778112349; 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=t/DtA0bTg/+qbb2xEBeyZd976Nwj4hvFStm5Q31fGd4=; b=CAB2wMHbafoJDG3zKv3m+1C7cW4eXh3fcZgQywnKIaKnsTlbmSQwye162UUQu8gtqp qgT7rsORALXvq+P8GDJNpPKo8mZMKs0fOt6fUOiX2bPsp1gOT2tK0AVGpme7IMA1vDqu 6PBU3QgM0SqrkLceG2/DlfqCesgoAcrDDU7qRD3ZVgBe/TOO7Qvm/YAepmpMGZGtqvmY S1DkpvfIO3QYD87SW6RRuLNGIAMc6TBfG32g8TQruxktyfUnE2A6qPz6IxxkulF46Io3 V8K81mqVNH8HU74V6CIInS3V/0Wonh7yhu9C72UYHMSmepqIhZpuAfSrOt2FEJH0E2Je Yszw== X-Gm-Message-State: AOJu0Yy8kievVNhlKhhUTepL7mueysKPdLeey6K/qgQe84CARPgBqfAk 5/2/6AUKBRl6eWosMsWbrsDk82DgYDVklUd2tqKZrvguw1Twyo+T5gKRK3O9GT6ivr03DWEy8Pz vuLyUus8= X-Gm-Gg: AeBDieskDmcDV7DcGEVc0vtBK9xf3H0u1S2QdinK4ublOrblC6KKM27+omjdq2pNnty 88T8UILwpc0M87lOl0kzkf2bBr9zFEqMjSkF0b4q88PnX8KkzaINyyuSQPtungtoPr8Zkb/Yqk/ YWWK5cswZz3wPUCNcXL1+Y3hj8S3HhnLL0UFxZfgol6aT52Kbtp/QYCnpLgz4mJWu1R3ghMRuWd 919h7nXqeqlVXvXtXxToY2prF+hQulDAxK9tO/tJtqiz4SdHuZYABGGk6/C86J6vLe61XApPru/ njWyuKlVLMRSTpkEQvCVu2LZbutcs0Gry2IRlCwnsgVH5tF9BKhWriDZZXGeWyZWP8ODysL6jsV K3whfZ1r+kVIJ5oi/YijFK48I+Ado2LQmEu059GQpD7D5tC2ELME4Z59kRAPCbJ33F+uMvcrVpA rGiQweesCwOyah5LOnEFsUeiBfRpsTfaJ8JQMzoWAS X-Received: by 2002:a05:6a00:893:b0:829:b08f:7353 with SMTP id d2e1a72fcca58-834fffb17d0mr262660b3a.7.1777507549208; Wed, 29 Apr 2026 17:05:49 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 09/40] fpu: Split FloatParts{64,128} to softfloat-parts.h Date: Thu, 30 Apr 2026 10:04:52 +1000 Message-ID: <20260430000524.56046-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42a; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42a.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: 1777507691488154100 Begin exposing the intermediate representation of softfloat. Start with just the representation structures. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/fpu/softfloat-parts.h | 88 +++++++++++++++++++++++++++++++++++ fpu/softfloat.c | 69 +-------------------------- 2 files changed, 90 insertions(+), 67 deletions(-) create mode 100644 include/fpu/softfloat-parts.h diff --git a/include/fpu/softfloat-parts.h b/include/fpu/softfloat-parts.h new file mode 100644 index 0000000000..13c1f3d2d6 --- /dev/null +++ b/include/fpu/softfloat-parts.h @@ -0,0 +1,88 @@ +/* + * Floating point intermediate representation + * + * The code in this source file is derived from release 2a of the SoftFloat + * IEC/IEEE Floating-point Arithmetic Package. Those parts of the code (and + * some later contributions) are provided under that license, as detailed = below. + * It has subsequently been modified by contributors to the QEMU Project, + * so some portions are provided under: + * the SoftFloat-2a license + * the BSD license + * GPL-v2-or-later + * + * Any future contributions to this file after December 1st 2014 will be + * taken to be licensed under the Softfloat-2a license unless specifically + * indicated otherwise. + */ + +#ifndef SOFTFLOAT_PARTS_H +#define SOFTFLOAT_PARTS_H + +/* + * Classify a floating point number. Everything above float_class_qnan + * is a NaN so cls >=3D float_class_qnan is any NaN. + * + * Note that we canonicalize denormals, so most code should treat + * class_normal and class_denormal identically. + */ + +typedef enum __attribute__ ((__packed__)) { + float_class_unclassified, + float_class_zero, + float_class_normal, + float_class_denormal, /* input was a non-squashed denormal */ + float_class_inf, + float_class_qnan, /* all NaNs from here */ + float_class_snan, +} FloatClass; + +#define float_cmask(bit) (1u << (bit)) + +enum { + float_cmask_zero =3D float_cmask(float_class_zero), + float_cmask_normal =3D float_cmask(float_class_normal), + float_cmask_denormal =3D float_cmask(float_class_denormal), + float_cmask_inf =3D float_cmask(float_class_inf), + float_cmask_qnan =3D float_cmask(float_class_qnan), + float_cmask_snan =3D float_cmask(float_class_snan), + + float_cmask_infzero =3D float_cmask_zero | float_cmask_inf, + float_cmask_anynan =3D float_cmask_qnan | float_cmask_snan, + float_cmask_anynorm =3D float_cmask_normal | float_cmask_denormal, +}; + +/* + * Structure holding all of the decomposed parts of a float. + * The exponent is unbiased and the fraction is normalized. + * + * The fraction words are stored in big-endian word ordering, + * so that truncation from a larger format to a smaller format + * can be done simply by ignoring subsequent elements. + */ + +typedef struct { + FloatClass cls; + bool sign; + int32_t exp; + union { + /* Routines that know the structure may reference the singular nam= e. */ + uint64_t frac; + /* + * Routines expanded with multiple structures reference "hi" and "= lo" + * depending on the operation. In FloatParts64, "hi" and "lo" are + * both the same word and aliased here. + */ + uint64_t frac_hi; + uint64_t frac_lo; + }; +} FloatParts64; + +typedef struct { + FloatClass cls; + bool sign; + int32_t exp; + uint64_t frac_hi; + uint64_t frac_lo; +} FloatParts128; + +#endif diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 8c4263bfe6..cd75df3160 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -83,6 +83,7 @@ this code that are retained. #include #include "qemu/bitops.h" #include "fpu/softfloat.h" +#include "fpu/softfloat-parts.h" =20 /* We only need stdlib for abort() */ =20 @@ -396,39 +397,6 @@ float64_gen2(float64 xa, float64 xb, float_status *s, return soft(ua.s, ub.s, s); } =20 -/* - * Classify a floating point number. Everything above float_class_qnan - * is a NaN so cls >=3D float_class_qnan is any NaN. - * - * Note that we canonicalize denormals, so most code should treat - * class_normal and class_denormal identically. - */ - -typedef enum __attribute__ ((__packed__)) { - float_class_unclassified, - float_class_zero, - float_class_normal, - float_class_denormal, /* input was a non-squashed denormal */ - float_class_inf, - float_class_qnan, /* all NaNs from here */ - float_class_snan, -} FloatClass; - -#define float_cmask(bit) (1u << (bit)) - -enum { - float_cmask_zero =3D float_cmask(float_class_zero), - float_cmask_normal =3D float_cmask(float_class_normal), - float_cmask_denormal =3D float_cmask(float_class_denormal), - float_cmask_inf =3D float_cmask(float_class_inf), - float_cmask_qnan =3D float_cmask(float_class_qnan), - float_cmask_snan =3D float_cmask(float_class_snan), - - float_cmask_infzero =3D float_cmask_zero | float_cmask_inf, - float_cmask_anynan =3D float_cmask_qnan | float_cmask_snan, - float_cmask_anynorm =3D float_cmask_normal | float_cmask_denormal, -}; - /* Flags for parts_minmax. */ enum { /* Set for minimum; clear for maximum. */ @@ -474,40 +442,7 @@ static inline bool is_anynorm(FloatClass c) return float_cmask(c) & float_cmask_anynorm; } =20 -/* - * Structure holding all of the decomposed parts of a float. - * The exponent is unbiased and the fraction is normalized. - * - * The fraction words are stored in big-endian word ordering, - * so that truncation from a larger format to a smaller format - * can be done simply by ignoring subsequent elements. - */ - -typedef struct { - FloatClass cls; - bool sign; - int32_t exp; - union { - /* Routines that know the structure may reference the singular nam= e. */ - uint64_t frac; - /* - * Routines expanded with multiple structures reference "hi" and "= lo" - * depending on the operation. In FloatParts64, "hi" and "lo" are - * both the same word and aliased here. - */ - uint64_t frac_hi; - uint64_t frac_lo; - }; -} FloatParts64; - -typedef struct { - FloatClass cls; - bool sign; - int32_t exp; - uint64_t frac_hi; - uint64_t frac_lo; -} FloatParts128; - +/* FloatParts256 is entirely internal, for parts128_mul* */ typedef struct { FloatClass cls; bool sign; --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507569; cv=none; d=zohomail.com; s=zohoarc; b=BDnKkafBUZ9VTkpEeYA63xJZNq4dLwuMFq2w0+LKem88xCatYA8RjeIiPBH0M8+Cc30b6kjUCr94fD63H/CaHXzeaMJPrGUz2lNHi5K1h+RSy90HRw8qreaD5F7ZGPuAfZt3cRSlXWtSMU43CFJkGxNhXJZhAP3kB0kmegSUfVo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507569; 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=s95gOsMYgi/f4zhiYit5ShyHyWR6YE2CuPY1Rv/+Q0w=; b=E8X+d1enyvAAHfDXF9NSkFOyZcKbb+zG62ViWOlArtuy+ygTP8Tdn5KopeDER9uN+u9XzDSoV273htotd/WjmLKs/T7yRQTQSMWE3bNyfkvpLTntk4KAS3DcEf+U0uCDHqD+ZIrtCA0QpwCFF4wg8BclPkOxX9RPAZmLzSkc39g= 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 1777507569654901.4885070705625; Wed, 29 Apr 2026 17:06:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEuk-0006RJ-Jn; Wed, 29 Apr 2026 20:05:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wIEuh-0006GJ-DM for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:55 -0400 Received: from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuf-0001lR-3B for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:55 -0400 Received: by mail-pf1-x436.google.com with SMTP id d2e1a72fcca58-824c9da9928so149271b3a.3 for ; Wed, 29 Apr 2026 17:05:52 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.05.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:05:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507552; x=1778112352; 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=s95gOsMYgi/f4zhiYit5ShyHyWR6YE2CuPY1Rv/+Q0w=; b=lEcO4nFgVlg+amvS8SOhRB39eMdkTgvoKzZi7etINZPsMScsF5ZCwVhjLpzyvI81yL DO8NiLvJtbCexJIHdZFklCCAXQD+HF7o1RT+kYPf8C9hkn12YMvXcTWNwzgt8Ga2sCFb TLjIUAtGhzZ4fAoai2ysIbGLlMUZWXHNilJfk2hqxYaDKLvHtNIDtDw21cbm9bMLztpd CRycssZs9x1sVUGvF9rh4UcQUV3zj9gD3x8BNYQ04H2Afsy06XZjnu5sTNOHRIKUD76q 02CINe40LrZa946Q7LsQ0qvJvaIWgGBSqwbm0Om6girnMrWfHc4fpC91V3QFuZeVbxw0 RFwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507552; x=1778112352; 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=s95gOsMYgi/f4zhiYit5ShyHyWR6YE2CuPY1Rv/+Q0w=; b=Uq0MFYfOfG89TAIuQCjmtxUb1qdGAhBDs9Wo9W9cxZDMBA7iv1nHo6K5AgcQOIFIXZ K9k+dEMdyYAKTPTdUVKo2yd1PZML7B6pkyvoMarDvfk1PJI3uWFFaPSczZQZzyF+zc9J gvDnKPYozbwG+q7/DFvsmHahTR8nYgl/+acIE2X2brFvWwnjKi+oYjzlJ0EYmE5s96pG pGXodgy7GY8SNGS9N35tT1YmIphe4b87psJLwlwKu/gxc0KNeEAgfcLzhCJwWJBJ0GLL v43KeVVslbkX8KahJ95mC+fF6GbqOQikc4LgA3KPU/rQSHalDKk8gKpEzWwv1RJSVRa9 J3Xg== X-Gm-Message-State: AOJu0Yy7+o6hops143xKCT9j3rXbCfcNyOnhu7beZP/4mRVmonSuYbXO BPaA+ah27TRqScD/PoVzl1wr05mW9fL/yWL0Im7pQuDgEnMrUsltNdllnPkj7dLnS1oZ1iFOTj4 nH/aOsVQ= X-Gm-Gg: AeBDievKYoX/rUtx8NY9XhgDO4QOIw2aWzlnf8qtUFk2o295vJbtZtq59Xt/BvRl1z/ VWm74chdvt+ip2eddMdhOO49dqppE0l+lr8e8wi2Cn1X1fkmCj053hoLsqt06gvkNJBWHcM6mvK ZPQf41bDFu6dKVRr9F8VuG1E2IboHusyH/F/hn+RpKFs/ERkQ//JP8REkHsWLyRU9VNftmOO/JZ yh/6XH93Swulj8+BRKTrNNW8bKwoge9PIj5qBPA2GIG5yt4YoMaV48edP7uvbfzeu4YeFsmN0WZ bxwTO/ref0DI5lqI8wLjo1nZIHIhrAw8IOnBk8UTtIAY1629297AeS1uQq0qSY63L/YUeRs0NKr Uiuq3Xi8w4F3R6DPX4LzWbCXn6nB//cXFelOS40kBlsboiUSvG9wzmn/mPOmgBMwKvzt2obDION zU3KhkHDq4/cIF8giTsTkF0AGZbtaTk7QzoDDwoi/e X-Received: by 2002:a05:6a00:1d94:b0:82d:556b:7a01 with SMTP id d2e1a72fcca58-834fe0aa898mr652715b3a.16.1777507551438; Wed, 29 Apr 2026 17:05:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 10/40] fpu: Export FloatFmt structures Date: Thu, 30 Apr 2026 10:04:53 +1000 Message-ID: <20260430000524.56046-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::436; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x436.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: 1777507570629158500 Content-Type: text/plain; charset="utf-8" Export most of the FloatFmt structures. Skip float16_params_ahp and the floatx80 precisions. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- include/fpu/softfloat-parts.h | 48 ++++++++++++++++++++++++++++++ fpu/softfloat.c | 55 +++++------------------------------ 2 files changed, 56 insertions(+), 47 deletions(-) diff --git a/include/fpu/softfloat-parts.h b/include/fpu/softfloat-parts.h index 13c1f3d2d6..a3ae12bb45 100644 --- a/include/fpu/softfloat-parts.h +++ b/include/fpu/softfloat-parts.h @@ -18,6 +18,54 @@ #ifndef SOFTFLOAT_PARTS_H #define SOFTFLOAT_PARTS_H =20 +/* Format-specific handling of exp =3D=3D exp_max */ +typedef enum __attribute__((__packed__)) { + /* exp=3D=3Dmax, frac=3D=3D0 ? infinity : nan; this is ieee standard. = */ + float_expmax_ieee, + /* exp=3D=3Dmax is a normal number; no infinity or nan representation.= */ + float_expmax_normal, + /* exp=3D=3Dmax, frac=3D=3Dmax ? nan : normal; no infinity representat= ion. */ + float_expmax_e4m3, +} FloatFmtExpMaxKind; + +/* + * Structure holding all of the relevant parameters for a format. + * exp_size: the size of the exponent field + * exp_bias: the offset applied to the exponent field + * exp_max: the maximum normalised exponent + * frac_size: the size of the fraction field + * frac_shift: shift to normalise the fraction with DECOMPOSED_BINARY_PO= INT + * The following are computed based the size of fraction + * round_mask: bits below lsb which must be rounded + * The following optional modifiers are available: + * exp_max_kind: affects how exp =3D=3D exp_max is interpreted + * has_explicit_bit: has an explicit integer bit; this affects whether + * the float_status floatx80_behaviour handling applies + * overflow_raises_invalid: for float_expmax_normal, raise invalid + * instead of overflow. + */ +typedef struct { + int exp_size; + int exp_bias; + int exp_re_bias; + int exp_max; + int frac_size; + int frac_shift; + FloatFmtExpMaxKind exp_max_kind; + bool has_explicit_bit; + bool overflow_raises_invalid; + uint64_t round_mask; +} FloatFmt; + +extern const FloatFmt float4_e2m1_params; +extern const FloatFmt float8_e4m3_params; +extern const FloatFmt float8_e5m2_params; +extern const FloatFmt float16_params; +extern const FloatFmt bfloat16_params; +extern const FloatFmt float32_params; +extern const FloatFmt float64_params; +extern const FloatFmt float128_params; + /* * Classify a floating point number. Everything above float_class_qnan * is a NaN so cls >=3D float_class_qnan is any NaN. diff --git a/fpu/softfloat.c b/fpu/softfloat.c index cd75df3160..d3277e3f60 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -457,45 +457,6 @@ typedef struct { #define DECOMPOSED_BINARY_POINT 63 #define DECOMPOSED_IMPLICIT_BIT (1ull << DECOMPOSED_BINARY_POINT) =20 -/* Format-specific handling of exp =3D=3D exp_max */ -typedef enum __attribute__((__packed__)) { - /* exp=3D=3Dmax, frac=3D=3D0 ? infinity : nan; this is ieee standard. = */ - float_expmax_ieee, - /* exp=3D=3Dmax is a normal number; no infinity or nan representation.= */ - float_expmax_normal, - /* exp=3D=3Dmax, frac=3D=3Dmax ? nan : normal; no infinity representat= ion. */ - float_expmax_e4m3, -} FloatFmtExpMaxKind; - -/* - * Structure holding all of the relevant parameters for a format. - * exp_size: the size of the exponent field - * exp_bias: the offset applied to the exponent field - * exp_max: the maximum normalised exponent - * frac_size: the size of the fraction field - * frac_shift: shift to normalise the fraction with DECOMPOSED_BINARY_PO= INT - * The following are computed based the size of fraction - * round_mask: bits below lsb which must be rounded - * The following optional modifiers are available: - * exp_max_kind: affects how exp =3D=3D exp_max is interpreted - * has_explicit_bit: has an explicit integer bit; this affects whether - * the float_status floatx80_behaviour handling applies - * overflow_raises_invalid: for float_expmax_normal, raise invalid - * instead of overflow. - */ -typedef struct { - int exp_size; - int exp_bias; - int exp_re_bias; - int exp_max; - int frac_size; - int frac_shift; - FloatFmtExpMaxKind exp_max_kind; - bool has_explicit_bit; - bool overflow_raises_invalid; - uint64_t round_mask; -} FloatFmt; - /* Expand fields based on the size of exponent and fraction */ #define FLOAT_PARAMS_(E) \ .exp_size =3D E, \ @@ -509,12 +470,12 @@ typedef struct { .frac_shift =3D (-F - 1) & 63, \ .round_mask =3D (1ull << ((-F - 1) & 63)) - 1 =20 -static const FloatFmt float4_e2m1_params =3D { +const FloatFmt float4_e2m1_params =3D { FLOAT_PARAMS(2, 1), .exp_max_kind =3D float_expmax_normal, }; =20 -static const FloatFmt float8_e4m3_params =3D { +const FloatFmt float8_e4m3_params =3D { FLOAT_PARAMS(4, 3), .exp_max_kind =3D float_expmax_e4m3 }; @@ -522,11 +483,11 @@ static const FloatFmt float8_e4m3_params =3D { /* 110 << frac_shift, with the implicit bit set */ #define E4M3_NORMAL_FRAC_MAX 0xe000000000000000ull =20 -static const FloatFmt float8_e5m2_params =3D { +const FloatFmt float8_e5m2_params =3D { FLOAT_PARAMS(5, 2) }; =20 -static const FloatFmt float16_params =3D { +const FloatFmt float16_params =3D { FLOAT_PARAMS(5, 10) }; =20 @@ -536,19 +497,19 @@ static const FloatFmt float16_params_ahp =3D { .overflow_raises_invalid =3D true, }; =20 -static const FloatFmt bfloat16_params =3D { +const FloatFmt bfloat16_params =3D { FLOAT_PARAMS(8, 7) }; =20 -static const FloatFmt float32_params =3D { +const FloatFmt float32_params =3D { FLOAT_PARAMS(8, 23) }; =20 -static const FloatFmt float64_params =3D { +const FloatFmt float64_params =3D { FLOAT_PARAMS(11, 52) }; =20 -static const FloatFmt float128_params =3D { +const FloatFmt float128_params =3D { FLOAT_PARAMS(15, 112) }; =20 --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507680; cv=none; d=zohomail.com; s=zohoarc; b=P9FFeLC4qdc4qyI0ErjMMDyrse8pl5vm361hABmcX7YtcvuXL+31b5/aqS9KmIN7+8SYInyE7hIQOmGUcA2py8whFpxNn7aKXLr6WcRJ7JzcPsB8jl2QMicsArJZZEuaKLlSmZy4S8MImEQMhSr4apojxti1z/SIBVJpAuAIdwk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507680; 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=8NNGGFXJ7ObWl7bIfWdwNZWMHdVi1ldGDKtY92ZvWpw=; b=A4J0UAJK+WnswCHvCjtEtLOeT7tpVHe2z7YwdIE4ErvN0MoY4Zitdk5EZJtSgJOvHtqR6GAi89cAVmV+JDNd9TKVaUn7ITq7dOi5yGIQZDCwx72xtpTkldMSLycHHKHS/0u0Swwrdqbrh6kBmIxkrVC7B2X7n7fz/xebYPpQrx8= 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 1777507680855119.06923813806497; Wed, 29 Apr 2026 17:08:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEum-0006Th-Ii; Wed, 29 Apr 2026 20:06:00 -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 1wIEuj-0006No-Fh for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:57 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuh-0001lh-FU for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:57 -0400 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-82418b0178cso193073b3a.1 for ; Wed, 29 Apr 2026 17:05:55 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.05.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:05:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507554; x=1778112354; 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=8NNGGFXJ7ObWl7bIfWdwNZWMHdVi1ldGDKtY92ZvWpw=; b=qFxIt1shAElGAybW9dlenejbPZNNrc1wrYBJGy1DAiaJemL2LUa7KgVyODTsdxBHgj fT+AzHB++wmzdlOXxVfcFfu5AeF479OkHZ/J3nsNq0TZyQEa1+dHi+uE1L66cCx+5yzn yHC+klcS17USsJVQ+D3PM/tqllYAvdkindJIHQ3WBP+xQfyQZN1VyVsQA4oFqpUU9ZoJ itnNzLBlT2Ht6WfXXfer9ZsgQYT/x2546L1vgmhQSLMlC4ZGIqmOJJOb9J4sy07nn7Uf BqK2Ll6c1QM5LoeMahMt4IFt7e/v7sNMIZX7DY9+t3U5jpvTY2GarKwVJfa3RuZJuMDd 3zLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507554; x=1778112354; 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=8NNGGFXJ7ObWl7bIfWdwNZWMHdVi1ldGDKtY92ZvWpw=; b=FaTeDFBtYNX9e3kRlXiDA57FBdviFWHRpw53w179Fk/m5AvVmpPIVdG5srlXJAXFoK fVspcbOw2h1z/SGFWAMxEPCr7Imge7eh+GAJ9us7UFlUJJgt9ZAuLwL7ZaZwW+aZPEW/ WuCpvBGnaGtL5s5fupiUoIuqZx1z0Teav0x6UEmQDJKOFVgiVIiaZ7L8K3V14WWqaZVg m/CPUYmxF4YSazC3II7Cgq/2/z0YzypEg3g4SRwDLRNtqyRWLas1ioVU6UgJmLC1Ngal g37Ki6GJKZTvjCrNBsKTGdJykAfJlGF6jxQMtKPbm3qZW2jmirT+saGHWyGIwOr9oKRy VowA== X-Gm-Message-State: AOJu0Yy7kYMwOfITJ+OIAtAkZytx1i2DtBqSddOTDljt5jNoYKSF4NNa 7nhnXlSsi+31UMYsDXKhmxyvOQsJse1ztR5p3+0BVYrnyN9SaYJetII4iQv09PoonE8gFoy3dhi qZPEyRS8= X-Gm-Gg: AeBDiesxiRw8KCOaMppCVKtERoJY2Q452uo54W+s1gJ05/LtXnunX7MJ6Vx+fPPLuqF 8gaHbzk2PHTYvxoJIXhjQD+R3IbqVl/H5W3EF1lYKn8M70aKMc17Zg+T7UsA1Xy5tS8LwjK3pZb Oai03oKXxQiAqjP7sYqniU4UsV5YfPALaCDbBQqKhB55UyqjpIUs+AcejHds6yYIcl5MhvKjJ5S 70J3aBWKDDnILWbhqU9/iPt3TGOyBM2oCczJvTH3f0G6ml8GLP4UyIVwYa/VJsUiSezhRz4ZASf O69VG354DoGaWfIkUBN3uDTroJf3Ayv0DXFJ6D6E+Carc8oN2ZMSRuJP7AKvYrwmwz48i+4wLtV UCjmWuNmIjnPDdQ/cXH/H0hrFWP1ALI5LvMI06n0fiv9e8DZeGT6e8MDCBKGk4rJHY8VOabyAOA rB2SjFjIeJhSzkprCLmTO7smO6ujt9D2g2bzdeWERa X-Received: by 2002:a05:6a00:2e88:b0:82c:9126:31f1 with SMTP id d2e1a72fcca58-834fdb5bdd3mr794215b3a.14.1777507553852; Wed, 29 Apr 2026 17:05:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 11/40] fpu: Export unpack_canonical and round_pack_canonical routines Date: Thu, 30 Apr 2026 10:04:54 +1000 Message-ID: <20260430000524.56046-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.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: 1777507683365154100 Content-Type: text/plain; charset="utf-8" Export the unpacking and repacking into the various formats. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- include/fpu/softfloat-parts.h | 30 ++++++++++++++++++++++ fpu/softfloat.c | 47 ++++++++++++++--------------------- 2 files changed, 49 insertions(+), 28 deletions(-) diff --git a/include/fpu/softfloat-parts.h b/include/fpu/softfloat-parts.h index a3ae12bb45..f631c38c79 100644 --- a/include/fpu/softfloat-parts.h +++ b/include/fpu/softfloat-parts.h @@ -133,4 +133,34 @@ typedef struct { uint64_t frac_lo; } FloatParts128; =20 +/* + * Unpack routines from a specific floating-point format. + */ + +FloatParts64 float4_e2m1_unpack_canonical(float4_e2m1 f, float_status *s); +FloatParts64 float8_e4m3_unpack_canonical(float8_e4m3 f, float_status *s); +FloatParts64 float8_e5m2_unpack_canonical(float8_e5m2 f, float_status *s); +FloatParts64 float16_unpack_canonical(float16 f, float_status *s); +FloatParts64 bfloat16_unpack_canonical(bfloat16 f, float_status *s); +FloatParts64 float32_unpack_canonical(float32 f, float_status *s); +FloatParts64 float64_unpack_canonical(float64 f, float_status *s); +FloatParts128 float128_unpack_canonical(float128 f, float_status *s); +/* Returns false if the encoding is invalid. */ +bool floatx80_unpack_canonical(FloatParts128 *p, floatx80 f, float_status = *s); + +/* + * Pack routines to a specific floating-point format. + */ + +float8_e4m3 float8_e4m3_round_pack_canonical(FloatParts64 *p, float_status= *s, + bool saturate); +float8_e5m2 float8_e5m2_round_pack_canonical(FloatParts64 *p, float_status= *s, + bool saturate); +float16 float16_round_pack_canonical(FloatParts64 *p, float_status *s); +bfloat16 bfloat16_round_pack_canonical(FloatParts64 *p, float_status *s); +float32 float32_round_pack_canonical(FloatParts64 *p, float_status *s); +float64 float64_round_pack_canonical(FloatParts64 *p, float_status *s); +float128 float128_round_pack_canonical(FloatParts128 *p, float_status *s); +floatx80 floatx80_round_pack_canonical(FloatParts128 *p, float_status *s); + #endif diff --git a/fpu/softfloat.c b/fpu/softfloat.c index d3277e3f60..b857c13d91 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1296,21 +1296,21 @@ static const uint16_t rsqrt_tab[128] =3D { * Pack/unpack routines with a specific FloatFmt. */ =20 -static FloatParts64 float4_e2m1_unpack_canonical(float4_e2m1 f, float_stat= us *s) +FloatParts64 float4_e2m1_unpack_canonical(float4_e2m1 f, float_status *s) { FloatParts64 p =3D unpack_raw64(&float4_e2m1_params, f); parts64_canonicalize(&p, s, &float4_e2m1_params); return p; } =20 -static FloatParts64 float8_e4m3_unpack_canonical(float8_e4m3 f, float_stat= us *s) +FloatParts64 float8_e4m3_unpack_canonical(float8_e4m3 f, float_status *s) { FloatParts64 p =3D unpack_raw64(&float8_e4m3_params, f); parts64_canonicalize(&p, s, &float8_e4m3_params); return p; } =20 -static FloatParts64 float8_e5m2_unpack_canonical(float8_e5m2 f, float_stat= us *s) +FloatParts64 float8_e5m2_unpack_canonical(float8_e5m2 f, float_status *s) { FloatParts64 p =3D unpack_raw64(&float8_e5m2_params, f); parts64_canonicalize(&p, s, &float8_e5m2_params); @@ -1325,29 +1325,27 @@ static FloatParts64 float16a_unpack_canonical(float= 16 f, float_status *s, return p; } =20 -static FloatParts64 float16_unpack_canonical(float16 f, float_status *s) +FloatParts64 float16_unpack_canonical(float16 f, float_status *s) { return float16a_unpack_canonical(f, s, &float16_params); } =20 -static FloatParts64 bfloat16_unpack_canonical(bfloat16 f, float_status *s) +FloatParts64 bfloat16_unpack_canonical(bfloat16 f, float_status *s) { FloatParts64 p =3D unpack_raw64(&bfloat16_params, f); parts64_canonicalize(&p, s, &bfloat16_params); return p; } =20 -static float8_e4m3 float8_e4m3_round_pack_canonical(FloatParts64 *p, - float_status *s, - bool saturate) +float8_e4m3 float8_e4m3_round_pack_canonical(FloatParts64 *p, float_status= *s, + bool saturate) { parts64_uncanon(p, s, &float8_e4m3_params, saturate); return pack_raw64(p, &float8_e4m3_params); } =20 -static float8_e5m2 float8_e5m2_round_pack_canonical(FloatParts64 *p, - float_status *s, - bool saturate) +float8_e5m2 float8_e5m2_round_pack_canonical(FloatParts64 *p, float_status= *s, + bool saturate) { parts64_uncanon(p, s, &float8_e5m2_params, saturate); return pack_raw64(p, &float8_e5m2_params); @@ -1361,42 +1359,38 @@ static float16 float16a_round_pack_canonical(FloatP= arts64 *p, return pack_raw64(p, &float16_params); } =20 -static float16 float16_round_pack_canonical(FloatParts64 *p, - float_status *s) +float16 float16_round_pack_canonical(FloatParts64 *p, float_status *s) { return float16a_round_pack_canonical(p, s, &float16_params); } =20 -static bfloat16 bfloat16_round_pack_canonical(FloatParts64 *p, - float_status *s) +bfloat16 bfloat16_round_pack_canonical(FloatParts64 *p, float_status *s) { parts64_uncanon(p, s, &bfloat16_params, false); return pack_raw64(p, &bfloat16_params); } =20 -static FloatParts64 float32_unpack_canonical(float32 f, float_status *s) +FloatParts64 float32_unpack_canonical(float32 f, float_status *s) { FloatParts64 p =3D unpack_raw64(&float32_params, f); parts64_canonicalize(&p, s, &float32_params); return p; } =20 -static float32 float32_round_pack_canonical(FloatParts64 *p, - float_status *s) +float32 float32_round_pack_canonical(FloatParts64 *p, float_status *s) { parts64_uncanon(p, s, &float32_params, false); return pack_raw64(p, &float32_params); } =20 -static FloatParts64 float64_unpack_canonical(float64 f, float_status *s) +FloatParts64 float64_unpack_canonical(float64 f, float_status *s) { FloatParts64 p =3D unpack_raw64(&float64_params, f); parts64_canonicalize(&p, s, &float64_params); return p; } =20 -static float64 float64_round_pack_canonical(FloatParts64 *p, - float_status *s) +float64 float64_round_pack_canonical(FloatParts64 *p, float_status *s) { parts64_uncanon(p, s, &float64_params, false); return pack_raw64(p, &float64_params); @@ -1451,23 +1445,21 @@ static float64 float64r32_round_pack_canonical(Floa= tParts64 *p, return float64r32_pack_raw(p); } =20 -static FloatParts128 float128_unpack_canonical(float128 f, float_status *s) +FloatParts128 float128_unpack_canonical(float128 f, float_status *s) { FloatParts128 p =3D float128_unpack_raw(f); parts128_canonicalize(&p, s, &float128_params); return p; } =20 -static float128 float128_round_pack_canonical(FloatParts128 *p, - float_status *s) +float128 float128_round_pack_canonical(FloatParts128 *p, float_status *s) { parts128_uncanon(p, s, &float128_params, false); return float128_pack_raw(p); } =20 /* Returns false if the encoding is invalid. */ -static bool floatx80_unpack_canonical(FloatParts128 *p, floatx80 f, - 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) { @@ -1503,8 +1495,7 @@ static bool floatx80_unpack_canonical(FloatParts128 *= p, floatx80 f, return true; } =20 -static floatx80 floatx80_round_pack_canonical(FloatParts128 *p, - float_status *s) +floatx80 floatx80_round_pack_canonical(FloatParts128 *p, float_status *s) { const FloatFmt *fmt =3D &floatx80_params[s->floatx80_rounding_precisio= n]; uint64_t frac; --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507842; cv=none; d=zohomail.com; s=zohoarc; b=Ib71dhgWYN07qQ9e8qrFUNA7VQVtHfYq/P1zBzEaqA+oZ5yj05UdC+gfvvCkcmROux/n2eWpso3m4NgUPsDK8wa5Jo/LqIO+bzsNgW6hv9vKVaz8ha/b+NxnTJGuJ6oyDlBLdB4tIRQAo+NxfWlMhZQT/NPgMlZV/KUqLcWGMSY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507842; 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=TnxSC/joRQiFHOM0JVKPwA6B6Eb0DecPwNp7R0mi00U=; b=Ov2O8xYp08iqLXWJ7eZmRkSJ+cGwFNHi4ZUKgZ10f96YOiOGQ1ibepZ8VlkjNksrq/4QoqEQ5aLL5ubr4E5uoihxh3SmUlG4AEHnak6I0jfl8LgojsXPXZrObNNRxvz3Lf44TBVflJ6S5WuXxdDEz/Y/t+4FCjL7NCzdE5Vcc4c= 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 1777507842614735.0166880920058; Wed, 29 Apr 2026 17:10:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEun-0006Vm-5s; Wed, 29 Apr 2026 20:06: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 1wIEul-0006Sr-VR for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:00 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuk-0001lx-07 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:05:59 -0400 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-827270d50d4so324369b3a.3 for ; Wed, 29 Apr 2026 17:05:57 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.05.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:05:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507556; x=1778112356; 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=TnxSC/joRQiFHOM0JVKPwA6B6Eb0DecPwNp7R0mi00U=; b=ULTka1rlgHIcVPPgcDa1WoVHm6R7pwK9pCYh9FJq3rzL+mo6XUBJL8rRafNStC5ejv Xsurgb0x81ainz5saSXZsFpAsUSfiLSMR5S/hNy4abn79zrroeCCR6icEFF8ZVJR4a8V pt2K/MqeIG0xzkPTtF64I/oAwNphGusX9C7B4S7frdLxHpf3FKZBIxHsm2pluCWPNig5 IHU5X4caR4hj6qVy+uhIvZFFoc+m+xYwVMxpE7zFSHJD5kSkNXcAGHlrqSbQNGwl06cQ kk7j804OUcF3DMiHzPCVExQtzH84NMCN5DCdqGbRXOfvkOJNuCRIgv2+Zczwa4UqZDWi zQtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507556; x=1778112356; 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=TnxSC/joRQiFHOM0JVKPwA6B6Eb0DecPwNp7R0mi00U=; b=NJilWhyRliZZ9L9tlAXu1gteCeFgjhyK+N89BNdNm195fYkDmC4Wx6dSop3+YU+FMU Fr2s3AWHdaXsX0WlaJQhnDnaXzRJEV1r/g6XgKRFkFHwR1OvtwDiDtlJQOkqZzGTCJvj IQCeSLizTI00qmBxRA42bTjAamTTUusHLSMM7dVlUOULV+uRkt/jn08SY7fPHN8PoCX9 P29hoLVOE5LVaH95MGdwXrAIlJLQXb+eynujy0Em++z0SL2bPFICJ3DesazG+5NnTRL8 GBe15xkNJCE/3W2qqJxYc0bj/DkfZQwBNJB+QEkKi3A6VFNjPw4SNUuuNau1lk/UojIQ xmdQ== X-Gm-Message-State: AOJu0Yx9tXVDbNzSAwK8jvWtNq6FRWlzHRkft/HV26PduqVw0U1H0+SW mgW/jJyf8WMhN61qjIQnYwMjcV8ffvHjwnzo7Q2dUI18FaRzM1+1Lx+BIFofo7ECis/LTYRp3Xn JtFToaQs= X-Gm-Gg: AeBDiesYmpqNMtC4oIK00kw2J9GaXjQXwaNE1HHoSo6RIaUthMV7DgdBDGWte7JQT3j TG/3ia9fm7siUbamgosOOuFphds9VUzEO6b0hSvD2fzcy8UPhb14KClxc6RN4+Q0hwMyboVt4Gj UZ0quqxAfD7doa9ebfT8OZ6KI2BuqUj5D9X8CJYw6neFg5xUGzwQ/m0TBLrtCIOTMiCr2qz/yCS 6Z4tjh8bbFTjbj1AUoyfSzsg6LZHd5w4n++Ug0OXca7D62anOMFLuC0t+Ftw45XalhV9CLnwo0x zHgbhk69KraugNIP5CTJW57EBFA3WbjkCqxIK1h+Q/GOLnkvseJUIYZgb42OtGWWb+5ZpfhCjup ZSkHClWNQEeqimBDHGpGqDKiBz1wHIHQS+HFFrmZ1pnCb3IqvJn45BtKZr4fTCbngtg39EDSs9v WjDAAzKCcSs121ulZT12butc17BtjwzGq4x48BMECh X-Received: by 2002:aa7:88c8:0:b0:82f:2243:e445 with SMTP id d2e1a72fcca58-834fdbe6804mr797395b3a.32.1777507556414; Wed, 29 Apr 2026 17:05:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 12/40] fpu: Return struct from parts{64,128}_default_nan Date: Thu, 30 Apr 2026 10:04:55 +1000 Message-ID: <20260430000524.56046-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.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: 1777507843864154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- fpu/softfloat.c | 29 ++++++++++++----------------- fpu/softfloat-parts.c.inc | 22 +++++++++++----------- fpu/softfloat-specialize.c.inc | 22 ++++++++++------------ 3 files changed, 33 insertions(+), 40 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index b857c13d91..fa8913a288 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -2678,7 +2678,7 @@ float32 floatx80_to_float32(floatx80 a, float_status = *s) if (floatx80_unpack_canonical(&p128, a, s)) { p64 =3D parts128_to_parts64(&p128, s); } else { - parts64_default_nan(&p64, s); + p64 =3D parts64_default_nan(s); } return float32_round_pack_canonical(&p64, s); } @@ -2691,7 +2691,7 @@ float64 floatx80_to_float64(floatx80 a, float_status = *s) if (floatx80_unpack_canonical(&p128, a, s)) { p64 =3D parts128_to_parts64(&p128, s); } else { - parts64_default_nan(&p64, s); + p64 =3D parts64_default_nan(s); } return float64_round_pack_canonical(&p64, s); } @@ -2703,7 +2703,7 @@ float128 floatx80_to_float128(floatx80 a, float_statu= s *s) if (floatx80_unpack_canonical(&p, a, s)) { parts128_float_to_float(&p, s); } else { - parts128_default_nan(&p, s); + p =3D parts128_default_nan(s); } return float128_round_pack_canonical(&p, s); } @@ -2964,7 +2964,7 @@ static int32_t floatx80_to_int32_scalbn(floatx80 a, F= loatRoundMode rmode, FloatParts128 p; =20 if (!floatx80_unpack_canonical(&p, a, s)) { - parts128_default_nan(&p, s); + p =3D parts128_default_nan(s); } return parts128_float_to_sint(&p, rmode, scale, INT32_MIN, INT32_MAX, = s); } @@ -2975,7 +2975,7 @@ static int64_t floatx80_to_int64_scalbn(floatx80 a, F= loatRoundMode rmode, FloatParts128 p; =20 if (!floatx80_unpack_canonical(&p, a, s)) { - parts128_default_nan(&p, s); + p =3D parts128_default_nan(s); } return parts128_float_to_sint(&p, rmode, scale, INT64_MIN, INT64_MAX, = s); } @@ -4562,7 +4562,7 @@ static void parts64_log2(FloatParts64 *a, float_statu= s *s, const FloatFmt *fmt) =20 d_nan: float_raise(float_flag_invalid, s); - parts64_default_nan(a, s); + *a =3D parts64_default_nan(s); } =20 float32 float32_log2(float32 a, float_status *status) @@ -4587,45 +4587,40 @@ float64 float64_log2(float64 a, float_status *statu= s) =20 float16 float16_default_nan(float_status *status) { - FloatParts64 p; + FloatParts64 p =3D parts64_default_nan(status); =20 - parts64_default_nan(&p, status); p.frac >>=3D float16_params.frac_shift; return pack_raw64(&p, &float16_params); } =20 float32 float32_default_nan(float_status *status) { - FloatParts64 p; + FloatParts64 p =3D parts64_default_nan(status); =20 - parts64_default_nan(&p, status); p.frac >>=3D float32_params.frac_shift; return pack_raw64(&p, &float32_params); } =20 float64 float64_default_nan(float_status *status) { - FloatParts64 p; + FloatParts64 p =3D parts64_default_nan(status); =20 - parts64_default_nan(&p, status); p.frac >>=3D float64_params.frac_shift; return pack_raw64(&p, &float64_params); } =20 float128 float128_default_nan(float_status *status) { - FloatParts128 p; + FloatParts128 p =3D parts128_default_nan(status); =20 - parts128_default_nan(&p, status); frac128_shr(&p, float128_params.frac_shift); return float128_pack_raw(&p); } =20 bfloat16 bfloat16_default_nan(float_status *status) { - FloatParts64 p; + FloatParts64 p =3D parts64_default_nan(status); =20 - parts64_default_nan(&p, status); p.frac >>=3D bfloat16_params.frac_shift; return pack_raw64(&p, &bfloat16_params); } @@ -5131,7 +5126,7 @@ static void parts_s390_divide_to_integer(FloatParts64= *a, FloatParts64 *b, *n =3D *r; *cc =3D 1; } else if (a->cls =3D=3D float_class_inf || b->cls =3D=3D float_class_= zero) { - parts64_default_nan(r, status); + *r =3D parts64_default_nan(status); *n =3D *r; *cc =3D 1; status->float_exception_flags |=3D float_flag_invalid; diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 5d344f9afe..ed7080d886 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -21,14 +21,14 @@ static void partsN(return_nan)(FloatPartsN *a, float_st= atus *s) case float_class_snan: float_raise(float_flag_invalid | float_flag_invalid_snan, s); if (s->default_nan_mode) { - partsN(default_nan)(a, s); + *a =3D partsN(default_nan)(s); } else { partsN(silence_nan)(a, s); } break; case float_class_qnan: if (s->default_nan_mode) { - partsN(default_nan)(a, s); + *a =3D partsN(default_nan)(s); } break; default: @@ -49,7 +49,7 @@ static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, Floa= tPartsN *b, } =20 if (s->default_nan_mode) { - partsN(default_nan)(a, s); + *a =3D partsN(default_nan)(s); return a; } =20 @@ -184,7 +184,7 @@ static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN= *a, FloatPartsN *b, return ret; =20 default_nan: - partsN(default_nan)(a, s); + *a =3D partsN(default_nan)(s); return a; } =20 @@ -281,7 +281,7 @@ static void partsN(uncanon_e4m3_overflow)(FloatPartsN *= p, float_status *s, p->exp =3D fmt->exp_max; p->frac_hi =3D E4M3_NORMAL_FRAC_MAX; } else { - partsN(default_nan)(p, s); + *p =3D partsN(default_nan)(s); } } =20 @@ -568,7 +568,7 @@ static FloatPartsN *partsN(addsub)(FloatPartsN *a, Floa= tPartsN *b, } /* Inf - Inf */ float_raise(float_flag_invalid | float_flag_invalid_isi, s); - partsN(default_nan)(a, s); + *a =3D partsN(default_nan)(s); return a; } } else { @@ -641,7 +641,7 @@ static FloatPartsN *partsN(mul)(FloatPartsN *a, FloatPa= rtsN *b, /* Inf * Zero =3D=3D NaN */ if (unlikely(ab_mask =3D=3D float_cmask_infzero)) { float_raise(float_flag_invalid | float_flag_invalid_imz, s); - partsN(default_nan)(a, s); + *a =3D partsN(default_nan)(s); return a; } =20 @@ -796,7 +796,7 @@ static FloatPartsN *partsN(muladd_scalbn)(FloatPartsN *= a, FloatPartsN *b, goto finish_sign; =20 d_nan: - partsN(default_nan)(a, s); + *a =3D partsN(default_nan)(s); return a; } =20 @@ -864,7 +864,7 @@ static FloatPartsN *partsN(div)(FloatPartsN *a, FloatPa= rtsN *b, return a; =20 d_nan: - partsN(default_nan)(a, s); + *a =3D partsN(default_nan)(s); return a; } =20 @@ -896,7 +896,7 @@ static FloatPartsN *partsN(modrem)(FloatPartsN *a, Floa= tPartsN *b, /* Inf % N; N % 0 */ if (a->cls =3D=3D float_class_inf || b->cls =3D=3D float_class_zero) { float_raise(float_flag_invalid, s); - partsN(default_nan)(a, s); + *a =3D partsN(default_nan)(s); return a; } =20 @@ -1118,7 +1118,7 @@ static void partsN(sqrt)(FloatPartsN *a, float_status= *status, =20 d_nan: float_raise(float_flag_invalid | float_flag_invalid_sqrt, status); - partsN(default_nan)(a, status); + *a =3D partsN(default_nan)(status); } =20 /* diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc index 9ed968c79b..dd65432813 100644 --- a/fpu/softfloat-specialize.c.inc +++ b/fpu/softfloat-specialize.c.inc @@ -118,7 +118,7 @@ static bool parts_is_snan_frac(uint64_t frac, float_sta= tus *status) | The pattern for a default generated deconstructed floating-point NaN. *-------------------------------------------------------------------------= ---*/ =20 -static void parts64_default_nan(FloatParts64 *p, float_status *status) +static FloatParts64 parts64_default_nan(float_status *status) { bool sign =3D 0; uint64_t frac; @@ -134,7 +134,7 @@ static void parts64_default_nan(FloatParts64 *p, float_= status *status) frac =3D deposit64(0, DECOMPOSED_BINARY_POINT - 7, 7, dnan_pattern); frac =3D deposit64(frac, 0, DECOMPOSED_BINARY_POINT - 7, -(dnan_patter= n & 1)); =20 - *p =3D (FloatParts64) { + return (FloatParts64) { .cls =3D float_class_qnan, .sign =3D sign, .exp =3D INT_MAX, @@ -142,17 +142,16 @@ static void parts64_default_nan(FloatParts64 *p, floa= t_status *status) }; } =20 -static void parts128_default_nan(FloatParts128 *p, float_status *status) +static FloatParts128 parts128_default_nan(float_status *status) { /* * Extrapolate from the choices made by parts64_default_nan to fill * in the quad-floating format. If the low bit is set, assume we * want to set all non-snan bits. */ - FloatParts64 p64; - parts64_default_nan(&p64, status); + FloatParts64 p64 =3D parts64_default_nan(status); =20 - *p =3D (FloatParts128) { + return (FloatParts128) { .cls =3D float_class_qnan, .sign =3D p64.sign, .exp =3D INT_MAX, @@ -197,19 +196,18 @@ static void parts128_silence_nan(FloatParts128 *p, fl= oat_status *status) *-------------------------------------------------------------------------= ---*/ floatx80 floatx80_default_nan(float_status *status) { - floatx80 r; /* * Extrapolate from the choices made by parts64_default_nan to fill * in the floatx80 format. We assume that floatx80's explicit * integer bit is always set (this is true for i386 and m68k, * which are the only real users of this format). */ - FloatParts64 p64; - parts64_default_nan(&p64, status); + FloatParts64 p64 =3D parts64_default_nan(status); =20 - r.high =3D 0x7FFF | (p64.sign << 15); - r.low =3D (1ULL << DECOMPOSED_BINARY_POINT) | p64.frac; - return r; + return (floatx80) { + .high =3D 0x7FFF | (p64.sign << 15), + .low =3D (1ULL << DECOMPOSED_BINARY_POINT) | p64.frac, + }; } =20 /*------------------------------------------------------------------------= ---- --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507606; cv=none; d=zohomail.com; s=zohoarc; b=ncT8qoETgf0DqrdmGXWM/yC68slA+aS9AJDEZhMgXp8c0Ys8eFUgxqO2PdvQ7M4vFTYMzZpgmtX536x7ti0sgxG3T9MlgpT+iqScfp2cdFEIAbiDXVeKe/54Y3CbxKOsbhYD/lPUu3k7UVhzrBREvs6Itd6RkE8edAZMzVApP8I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507606; 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=wWJrfKmeP7SU5fQs6ar9lmfrjUnpO5JxKfUBv73woWo=; b=dShYlpaVBYRfKYbVuXQH/2L7GiQUEPNOY9GBlxnVxbN6UWeDHawP1QNANzo3PDvzQRLcn24HZ08spigKksbjv/yyfMepCWJ2yRtMojSIvn1uugPH2bOTutL2R0XOUu5XBnlEdOu++FjzZntHJek0pdfoodSS9ZvG+quSDiDT8NI= 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 1777507606443633.664425886496; Wed, 29 Apr 2026 17:06:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEur-0006h3-3i; Wed, 29 Apr 2026 20:06:05 -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 1wIEun-0006Zr-RH for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:01 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEum-0001mP-6l for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:01 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-83177129e28so158489b3a.1 for ; Wed, 29 Apr 2026 17:05:59 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.05.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:05:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507559; x=1778112359; 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=wWJrfKmeP7SU5fQs6ar9lmfrjUnpO5JxKfUBv73woWo=; b=kok9QKUYCty4WSAnnlToL1tgECkUvtkYo8c5jYwlZKLNdrj0slteMxaQO90971MryH VRd2g49iQiFcqnpM+jX3xF1SkVe5bSRPBHu6WtikgmMoxgnHvbja9gqr8ej+M0/zGxdM 2E2TIsInrHMpVBvcaQmECJdPm7FRgV05Crl2MXtOQJZ8BxFddvDFfLrNR509U/lEvJAG TSf9y9ZknlDzNMIBjr6e9Xz+TsqlBEptjwsFtxIiQRSXryhSsl/616XP/UYw5RKe7HLI r/nBvOZtctDgXitduC/qKURU9GrcoALRN/Q0tG42jZsotZEXGErGsYGLXQp71GMpM1DN Jztw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507559; x=1778112359; 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=wWJrfKmeP7SU5fQs6ar9lmfrjUnpO5JxKfUBv73woWo=; b=kl9oV0hWrZ/9eUmdhUgMSS2oevVYyEEQOiZkLrAK5spNJ5vmANgmlhG5bAqHpbrCJY ioJ4mw6Pk9/KIWD51LhCXVpu177nr+Hq1Cuqmvq4zIZbsjCLmsy4KC0/eVo9pvWx+J/p 9Gn9Kp2/iP6DMPMGUVGBLAQmUQNVH1pU++p8RZjW7gI6Ijdpak0NPMJJEEa+xtYUTFRt 1wzQYmUG0FRAHBWSWELj1kswB6NSckmv35k7MSJMzJ3JNZINHEgA8MWBxj2TBgb5pXnf KYvZR9UOMSzL9cgsK71+iy9Ta6ifwHwPtc+HrglzUd+rkHs09QpFSoG/j2CT2+OsqPcW lXsw== X-Gm-Message-State: AOJu0Yw7Jndq6tMf1h0b6RTWLwOTIPY7L5TgIl0Cjn3elN8soPHivhuI JL/6OV4lSlM8d07KohzvH5Tp0B1RvoIAbQgxGGXYn82KAv9FMEMWODzp3aC8JdULGYhlWUM7MpG 6l/2zTN8= X-Gm-Gg: AeBDietDzcZDGgsT8RNfQCgym/YlZH/XxYmZYAmyA00AzHRTvJ3ZcTf6TuJKbA15La0 tIF8T1+1PBRk+Pmk92REoc7PSObfNbeRX3HyUSOA1Q2ohlP3po2+BNQP0nKseeGYvKIM+/inOQs w/VwE+ByhaTBeSFUgvtoQ0VZyWFjaf3bHe2qJyg6NTgjQP5XL0mt41RZbpvh3WB4LFlG+TuPZNn soF7Rx5CAMi0uh/QV4JOkQogVJ4N1pkVZ/rNveGmbclAYY94l6/412oZoI0btvT5C51iiVZ7OiX H5NLchWeOw+KKTy6m5oQuYib6UTZ2n678K06IbLG/oJFN6wI9OzU7LZUV9nfA9BRConVxkf7OCn WfFN5IES2qbM8/9/dnqi7aHFsomUHn3jOVK7jVOboe7LQC982wdOeEujHVhENgHqDbVL37cdZh6 Q0dAHy3dd0XOJMTEMBUhKL4PyoGODpJLKZNwinwLWp X-Received: by 2002:a05:6a00:4503:b0:82d:5da9:adbf with SMTP id d2e1a72fcca58-834fdccc01fmr870255b3a.41.1777507558546; Wed, 29 Apr 2026 17:05:58 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 13/40] fpu: Return struct from parts{64,128}_silence_nan Date: Thu, 30 Apr 2026 10:04:56 +1000 Message-ID: <20260430000524.56046-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.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: 1777507608592158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- fpu/softfloat.c | 10 +++++----- fpu/softfloat-parts.c.inc | 6 +++--- fpu/softfloat-specialize.c.inc | 20 ++++++++++++++------ 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index fa8913a288..9c1e6fdce4 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -4634,7 +4634,7 @@ float16 float16_silence_nan(float16 a, float_status *= status) FloatParts64 p =3D unpack_raw64(&float16_params, a); =20 p.frac <<=3D float16_params.frac_shift; - parts64_silence_nan(&p, status); + p =3D parts64_silence_nan(&p, status); p.frac >>=3D float16_params.frac_shift; return pack_raw64(&p, &float16_params); } @@ -4644,7 +4644,7 @@ float32 float32_silence_nan(float32 a, float_status *= status) FloatParts64 p =3D unpack_raw64(&float32_params, a); =20 p.frac <<=3D float32_params.frac_shift; - parts64_silence_nan(&p, status); + p =3D parts64_silence_nan(&p, status); p.frac >>=3D float32_params.frac_shift; return pack_raw64(&p, &float32_params); } @@ -4654,7 +4654,7 @@ float64 float64_silence_nan(float64 a, float_status *= status) FloatParts64 p =3D unpack_raw64(&float64_params, a); =20 p.frac <<=3D float64_params.frac_shift; - parts64_silence_nan(&p, status); + p =3D parts64_silence_nan(&p, status); p.frac >>=3D float64_params.frac_shift; return pack_raw64(&p, &float64_params); } @@ -4664,7 +4664,7 @@ bfloat16 bfloat16_silence_nan(bfloat16 a, float_statu= s *status) FloatParts64 p =3D unpack_raw64(&bfloat16_params, a); =20 p.frac <<=3D bfloat16_params.frac_shift; - parts64_silence_nan(&p, status); + p =3D parts64_silence_nan(&p, status); p.frac >>=3D bfloat16_params.frac_shift; return pack_raw64(&p, &bfloat16_params); } @@ -4674,7 +4674,7 @@ float128 float128_silence_nan(float128 a, float_statu= s *status) FloatParts128 p =3D float128_unpack_raw(a); =20 frac128_shl(&p, float128_params.frac_shift); - parts128_silence_nan(&p, status); + p =3D parts128_silence_nan(&p, status); frac128_shr(&p, float128_params.frac_shift); return float128_pack_raw(&p); } diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index ed7080d886..4733755f35 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -23,7 +23,7 @@ static void partsN(return_nan)(FloatPartsN *a, float_stat= us *s) if (s->default_nan_mode) { *a =3D partsN(default_nan)(s); } else { - partsN(silence_nan)(a, s); + *a =3D partsN(silence_nan)(a, s); } break; case float_class_qnan: @@ -109,7 +109,7 @@ static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, Fl= oatPartsN *b, } =20 if (is_snan(ret->cls)) { - partsN(silence_nan)(ret, s); + *ret =3D partsN(silence_nan)(ret, s); } return ret; } @@ -179,7 +179,7 @@ static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN= *a, FloatPartsN *b, } =20 if (is_snan(ret->cls)) { - partsN(silence_nan)(ret, s); + *ret =3D partsN(silence_nan)(ret, s); } return ret; =20 diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc index dd65432813..2723bf5e61 100644 --- a/fpu/softfloat-specialize.c.inc +++ b/fpu/softfloat-specialize.c.inc @@ -179,16 +179,24 @@ static uint64_t parts_silence_nan_frac(uint64_t frac,= float_status *status) return frac; } =20 -static void parts64_silence_nan(FloatParts64 *p, float_status *status) +static FloatParts64 parts64_silence_nan(const FloatParts64 *p, + float_status *status) { - p->frac =3D parts_silence_nan_frac(p->frac, status); - p->cls =3D float_class_qnan; + FloatParts64 r =3D *p; + + r.frac =3D parts_silence_nan_frac(r.frac, status); + r.cls =3D float_class_qnan; + return r; } =20 -static void parts128_silence_nan(FloatParts128 *p, float_status *status) +static FloatParts128 parts128_silence_nan(const FloatParts128 *p, + float_status *status) { - p->frac_hi =3D parts_silence_nan_frac(p->frac_hi, status); - p->cls =3D float_class_qnan; + FloatParts128 r =3D *p; + + r.frac_hi =3D parts_silence_nan_frac(r.frac_hi, status); + r.cls =3D float_class_qnan; + return r; } =20 /*------------------------------------------------------------------------= ---- --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507761; cv=none; d=zohomail.com; s=zohoarc; b=b4tE7CFlRX8RJTWoGQ0CpIDSoDbd+PlYupvtOlmx8sYOo2nu/tVdFGAbl5SlRKi5n1HIzcbAdEWcp8NtOg0kNx6C02VoKcJ+u1zuKhjVLKKNnz0pO4wl6KqP10OZI3TaZQBSJIRoFrvMukvsl+uNqjllFCkBYqV7wIVicdi3FxU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507761; 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=RcYkneR9Skc297NkyUYU49GZmHwypHS79RqQoM9N3gU=; b=jcMrYtsZTFRWu/ozeOZvEa+/VQgNVLdNSz4RHkFIx6dRQf7ocYh6nm8fzjn4AuhsQQ+ltfvPpfQbDTy2PblkQgkchqj1saCBxuJmLyawoXBF1QRYnqdEbUjFNWHDTuevQ87QI8LZKViXHn+dmbOP3Uw3dBTCh1Al0qZoz8Ez3AE= 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 1777507761543914.6082036002103; Wed, 29 Apr 2026 17:09:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEur-0006hT-9p; Wed, 29 Apr 2026 20:06:05 -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 1wIEup-0006dt-Qn for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:03 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuo-0001mn-2L for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:03 -0400 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-82f4a53ae20so240947b3a.3 for ; Wed, 29 Apr 2026 17:06:01 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.05.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507561; x=1778112361; 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=RcYkneR9Skc297NkyUYU49GZmHwypHS79RqQoM9N3gU=; b=lsVT37T6IBC4kPJsujXz2ZiSFjyC/8Vdg0O+ULel3A4S8E9Ev9pgHTMoCPHT3hWkaP sdcXLqay+mKUQ7iuSXoZXpPXLoAEHlJ8+jeYcvejd6A/EzFvJ/36izO+s9mh2q3MZ0cJ YmlK0TsYLypFFxjTwKICF6xLliyc61IJEyuCCAUPuRrw+tYt/HTcY3rUn1c/4nzimfaD Za8m9JKNOhicib0kqugyFfwaQ6S6s+krB/kwbZ2/++dUB+0UvYGa/1FKXCEeqO1wrr7n qaKskrlMGzvyb5wtPkCuljKG3j6sLze4H7+WUfs2tnAYwe1mHdohh+cQrmjna8wlW8F3 to/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507561; x=1778112361; 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=RcYkneR9Skc297NkyUYU49GZmHwypHS79RqQoM9N3gU=; b=W3MZhdXdAm8qTROFDNieqblFoKt9zCUt42LQzLKBbrPXhQQO7qxBkL8eRMthECDGXz HuQMpXgVnIMH8KHDcNh2b6kSkEtDI0jNCtTSFHLWRupgGifR6chIyJYOdGgprH8XGv4f oagydnXdbRDSR6uPrUIm0zDUAwZrgXIplcuQ74O0hBMT0v1u4lKhYnUjwqUmeZtQ94EZ SE71TJbHqUQ7pZlWNgQRqa9gQzsRH63oh0nXqFqoZAXPNX5Ain2IVfAdzLD7UsEGt6PR PLXwwYMwPp25YfoQsCj7/FjU8Mabd7K7ZqcOR3yA/hRmPS4ebJ/JpY9ha2Fi5btj1sQd j8Tw== X-Gm-Message-State: AOJu0YwoVdhPhKZz+S6m3O6ytf3YaS0gPFwkQdoCTnxoZXrvrpHbfd/q WFH9dl6U2zLj4bGEOZVE+aMSXk7GpZ30Q9YFD+yzIqkxcbhSAsJMAqaGhkjXpdkNZ7VoMAVOK5f 4IfE5kMQ= X-Gm-Gg: AeBDievI49gDunFkGdQvxUt8/R6any45M+pDrApHcO3Xuv2dL3Fyi3iX4NxUCFV2vGP xvKGiGrXrj92vzO60dyWi6OYz1xLOT4M5hRlSMQtl217fA5YH5vxog3BvPXaioLVz4z+dDRRCd2 UTl72GTFW0WXWDcoBeFP0O5eH5DsCtzN7zkY5HVgrRS9Nk7gye1IUogFDbjg/LKqBUNlPa5+lRu m8FmBfJoj9/8pcFHt1jQARIbRka/IGDIJd2LR1mCUThfx2w88o9FHmvmufPPsXR7AO6b89rIMLN XhHl47Kwd/JIZdXEcHFCb9z+JHkQW05XITGK4r8nJeYds60H0SMVV1OrvJ5CZ+xUb92+kWP4Bwl IZLMIHRevkrGjHX8jSMR+zww1+Caw6wy2tcPTr0s0rRxrTU/EQ1fpZwfHTbEGe3+Ff7kPR7HCfx NsxNbRd0OXF4dGmF/p1imoLoHPwvOQWnwc0BbIUyk6 X-Received: by 2002:a05:6a00:2d1a:b0:82f:5571:1a92 with SMTP id d2e1a72fcca58-834fdb0e9b3mr802351b3a.7.1777507560727; Wed, 29 Apr 2026 17:06:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 14/40] fpu: Return struct from parts{64,128}_return_nan Date: Thu, 30 Apr 2026 10:04:57 +1000 Message-ID: <20260430000524.56046-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.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: 1777507762499154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- fpu/softfloat.c | 14 +++++++------- fpu/softfloat-parts.c.inc | 15 ++++++++------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 9c1e6fdce4..7d67e25c17 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -2378,7 +2378,7 @@ static void parts_float_to_e5m2(FloatParts64 *a, floa= t_status *s, bool saturate) switch (a->cls) { case float_class_snan: case float_class_qnan: - parts64_return_nan(a, s); + *a =3D parts64_return_nan(a, s); break; =20 case float_class_inf: @@ -2405,7 +2405,7 @@ static void parts_float_to_e5m2(FloatParts64 *a, floa= t_status *s, bool saturate) static void parts64_float_to_float(FloatParts64 *a, float_status *s) { if (is_nan(a->cls)) { - parts64_return_nan(a, s); + *a =3D parts64_return_nan(a, s); } if (a->cls =3D=3D float_class_denormal) { float_raise(float_flag_input_denormal_used, s); @@ -2415,7 +2415,7 @@ static void parts64_float_to_float(FloatParts64 *a, f= loat_status *s) static void parts128_float_to_float(FloatParts128 *a, float_status *s) { if (is_nan(a->cls)) { - parts128_return_nan(a, s); + *a =3D parts128_return_nan(a, s); } if (a->cls =3D=3D float_class_denormal) { float_raise(float_flag_input_denormal_used, s); @@ -2441,7 +2441,7 @@ static FloatParts64 parts128_to_parts64(FloatParts128= *b, float_status *s) case float_class_qnan: /* Discard the low bits of the NaN. */ r.frac =3D b->frac_hi; - parts64_return_nan(&r, s); + r =3D parts64_return_nan(&r, s); break; default: break; @@ -2461,7 +2461,7 @@ static FloatParts128 parts64_to_parts128(FloatParts64= *b, float_status *s) switch (r.cls) { case float_class_qnan: case float_class_snan: - parts128_return_nan(&r, s); + r =3D parts128_return_nan(&r, s); break; case float_class_denormal: float_raise(float_flag_input_denormal_used, s); @@ -4458,7 +4458,7 @@ static void parts64_log2(FloatParts64 *a, float_statu= s *s, const FloatFmt *fmt) break; case float_class_snan: case float_class_qnan: - parts64_return_nan(a, s); + *a =3D parts64_return_nan(a, s); return; case float_class_zero: float_raise(float_flag_divbyzero, s); @@ -5067,7 +5067,7 @@ float32 float32_exp2(float32 a, float_status *status) break; case float_class_snan: case float_class_qnan: - parts64_return_nan(&xp, status); + xp =3D parts64_return_nan(&xp, status); return float32_round_pack_canonical(&xp, status); case float_class_inf: return xp.sign ? float32_zero : a; diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 4733755f35..ef46dd740c 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -15,25 +15,26 @@ * indicated otherwise. */ =20 -static void partsN(return_nan)(FloatPartsN *a, float_status *s) +static FloatPartsN partsN(return_nan)(const FloatPartsN *a, float_status *= s) { switch (a->cls) { case float_class_snan: float_raise(float_flag_invalid | float_flag_invalid_snan, s); if (s->default_nan_mode) { - *a =3D partsN(default_nan)(s); + return partsN(default_nan)(s); } else { - *a =3D partsN(silence_nan)(a, s); + return partsN(silence_nan)(a, s); } break; case float_class_qnan: if (s->default_nan_mode) { - *a =3D partsN(default_nan)(s); + return partsN(default_nan)(s); } break; default: g_assert_not_reached(); } + return *a; } =20 static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, FloatPartsN *b, @@ -941,7 +942,7 @@ static void partsN(sqrt)(FloatPartsN *a, float_status *= status, break; case float_class_snan: case float_class_qnan: - partsN(return_nan)(a, status); + *a =3D partsN(return_nan)(a, status); return; case float_class_zero: return; @@ -1263,7 +1264,7 @@ static void partsN(round_to_int)(FloatPartsN *a, Floa= tRoundMode rmode, switch (a->cls) { case float_class_qnan: case float_class_snan: - partsN(return_nan)(a, s); + *a =3D partsN(return_nan)(a, s); break; case float_class_zero: case float_class_inf: @@ -1656,7 +1657,7 @@ static void partsN(scalbn)(FloatPartsN *a, int n, flo= at_status *s) switch (a->cls) { case float_class_snan: case float_class_qnan: - partsN(return_nan)(a, s); + *a =3D partsN(return_nan)(a, s); break; case float_class_zero: case float_class_inf: --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507630; cv=none; d=zohomail.com; s=zohoarc; b=XBwn16PqhxYg2v8l/5zzYDam3I3UhdRruDsF31xFQ3OeiRFXQk/Xc84ftU+j56sT9oQQSjGf4mv0VnXmuXdrKlJEzpxCnRHm4TWits6f4JqlHfkEZtR7g15mLzyEPLBZZ7Gh5ghmZ59OPGunxMU0p3tkqjC9MFoeFL8TnWbBJIQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507630; 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=JqpUFWXlE+yNso214pVWpAnT/3t/2kgkwE5/W87FM+U=; b=bl6/uuzOWD1SHJcRZGQznMdUTPVEAF1HHwEWWNjDw/V6OzEXkbBNkHMXQCeJPXyHSbXJVXl/1jzVgQqRwtqSS1PUBGIckbPVfOht5Osxzc13I++baPXBAFtqagjRRDVN2ENwSwHw7U7LSkDWFpp09q2USe24ygcJjzn90OVL/Ts= 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 1777507630806348.12828096217277; Wed, 29 Apr 2026 17:07:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEuu-0006uV-8Y; Wed, 29 Apr 2026 20:06: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 1wIEus-0006nO-1b for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:06 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuq-0001n9-Fp for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:05 -0400 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-82f943870baso166774b3a.1 for ; Wed, 29 Apr 2026 17:06:04 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507563; x=1778112363; 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=JqpUFWXlE+yNso214pVWpAnT/3t/2kgkwE5/W87FM+U=; b=ojXqJWS/X78eqGUK6zcPd11AK60DLmhN0gexHm0A2I0Oh3it5a2zKtRpCOYAzWFGl9 ymzaPRwCTLwkZe+JTq/6xwCWelvP+iFoZDE7muSjkH3c1omlA0tQF2S1zS2PIloCCf1j OTvB1B3tIbA4Oo5VDnhqlGuuT5mXdXrVDaM+xH74gJfKp7mBIBci1GNgonAlJ8V5iNvu +Md+TvUa7YqaoJm20ys/xFXAZ+oQM/YmTIa9yjMW5SE41Fr8Xa6owCmKrH4RECGdcdvG j3ceHND9/KkI4tLz7ht6Bsge1PfWHaaJR0fKdm5cxWfinLXB8M5hu1Cu5wf6cIdjoINw EgCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507563; x=1778112363; 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=JqpUFWXlE+yNso214pVWpAnT/3t/2kgkwE5/W87FM+U=; b=FszHVX9XV7dSgT/wb/APUOPUslxbmz1GalH8CWr65Xr3QWbkWGKWeozeF1sqPZZbZ9 chrzWVwoTWt4WOIVeGk2ALyssWcfbUTCpQ93lg/OtAyheA+UURSbnckOfA9JawA+O1F4 CQKUma1wXhXJEgsvqNiOHcpNHTuNiPmUdwFPgEF3Ix/DMw4OJp81RXQpiFBdVwknu+Ur TMa3wkijmQVi0olCAX2T0PkhwmrejHh1ec17+TloWassPUfbGPLCJGAb79keMwq/MslA YDxpfyipNIdCV9qiSjE0ieDJ47XwDVHpyrUPIkmnAAuk+zq8C3DIdOArgDN0pMlgB78L Ki3w== X-Gm-Message-State: AOJu0Yw4f4qlJVUaZF5wmtgQn9DOSAwcWkFHMkfUYYYjophqaeQQpzJR oByckXgVRQTJMdNA5aAl64kKC2eY8rdGagK1C4HGl+n3gxMvVpuBfGu+WoSM8nFQGxKicujQORJ BHC7Bk7I= X-Gm-Gg: AeBDievyRiyhBweK1bQaCslN5bfsYf9KSB//qtl+Fw4ZlTDUQ9VEsN2zc8Wt1ZeCiyu MWnKqCrFslWk1IH1aTPObTiYnCaJwbeSl0VXpFF9fsyqxk6o+iRdL5Wdz2p2jJSRvA54NWtfWYQ kAlxOg+IrEUhyuNcRsbiEbLeqq+6buTX1jtak+wa52LkGZ8CEj8hS+sRtcRQ8jzsxL/BCGyvbEW DmAYvHdQCEi2uaEEcQJFZZgiqFuH+xlfkFa3agalGC9JvaVwNY0SU9mlrE4XY1bYwn6wcyLOxAG eJg/+dACgJhoMkjtdlq/l9UDHhzJJ5EQBsKaaXb7U4oLxkaC3HqKTYuLEcpEXdHwgWEPkHd1xIj Z+PdePQL93Tnk35630UeLB1GaGSJ9SXX8ffI5NyvfqQbdk6l0qmWduHhnD806SY4LW9Ilh92TMY M6qXo3aN+6rLj9aOWiTh9GbQSaQ6kLcQ0fZWDZuHpk X-Received: by 2002:a05:6a00:94cf:b0:82f:4191:da10 with SMTP id d2e1a72fcca58-834fdb902c2mr909953b3a.6.1777507562919; Wed, 29 Apr 2026 17:06:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 15/40] fpu: Sink exp_bias adjustment in float64r32_pack_raw Date: Thu, 30 Apr 2026 10:04:58 +1000 Message-ID: <20260430000524.56046-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::433; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.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: 1777507632587154100 Content-Type: text/plain; charset="utf-8" Share the float32->float64 bias adjustment from both the normal and denormal paths. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- fpu/softfloat.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 7d67e25c17..b7d461bca4 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1412,14 +1412,12 @@ static float64 float64r32_pack_raw(FloatParts64 *p) * in normalized form for float64. Adjust, per canonicalize. */ int shift =3D frac64_normalize(p); - p->exp =3D (float32_params.frac_shift - - float32_params.exp_bias - shift + 1 + - float64_params.exp_bias); frac64_shr(p, float64_params.frac_shift); + p->exp =3D float32_params.frac_shift - shift + 1; } else { frac64_shl(p, float32_params.frac_shift - float64_params.frac_= shift); - p->exp +=3D float64_params.exp_bias - float32_params.exp_bias; } + p->exp +=3D float64_params.exp_bias - float32_params.exp_bias; break; case float_class_snan: case float_class_qnan: --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507575; cv=none; d=zohomail.com; s=zohoarc; b=Mh/ku92l0ZH09phCJSOhUC/RoIelc7602vxaVt+kJFOsT9E6NN1Nli5U/p0CErI8zb+hEJsLA2AyhzsZ62SuyJKsprXzGZWtweZkdvwu0z0RGdsDk+uZsg9fHgip7iZRQPbCvfpg5yExUTn5ImHgUQQlNIqLeP6eYaguRaZKm/0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507575; 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=jbVuK9RdGSnecOOwaf1HA58zPz8tW1paOnqbUnPnZMw=; b=VeQOudKtKnmUpicvP/qtidqXUhA4otV5lvGy739t7ZXKHxdNZ8qLJAhQoG2LLaMpokbQcDFcVkWpWDRbbKTy3tuUVIhsKewm21XpGDEVUKvnogu0Cvd+os6jIUwUnDnddZhh1rPZeOV4p7ARz/DcanzyC6WT/aQbWcbaD0dy/3c= 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 1777507575800638.6909424208392; Wed, 29 Apr 2026 17:06:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEuw-00074G-80; Wed, 29 Apr 2026 20:06:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wIEuu-0006wZ-9i for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:08 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEus-0001nl-I2 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:07 -0400 Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-82f8cebc935so153831b3a.0 for ; Wed, 29 Apr 2026 17:06:06 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507565; x=1778112365; 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=jbVuK9RdGSnecOOwaf1HA58zPz8tW1paOnqbUnPnZMw=; b=QhgYJ8ySWzlaDuNumqw4Y00MjyE4t8hissvEZeG6Qq+X1PILOTS/gQuV+7VxAD55wO zysmK5jL0kZCWCHijRdWoi92Kp+/Lk/NmMspkMaBobiabA6yducdsBYIIvus+iHo6IWo JZDUU9vUCiltNS2J29EOMVRdJLushF5NEs8z1llY3RG2GnVqEqVqmh22OM6FgEYZXIDS QmtVJjFuutcut6A8IDYu12yivYyG/yR3EBOGNoMYalhtrcpgDUyWXBlOE4b1JaXXghVf YqW0WOWzjgd4N2o0RLWC8OJPcRFtRoOY2kR8Qvpseubk9OhBvcK47dTj3qRn5fs0HDYZ Y1CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507565; x=1778112365; 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=jbVuK9RdGSnecOOwaf1HA58zPz8tW1paOnqbUnPnZMw=; b=tVRznJgyXy7oGF5kfGEhNFntFVS3jd/BJvY+Z2TE6JgSmv8gjH5xlIhM5LI9hXweAE Q/QxT9UVyOpXRxOnyUNF4khLs+HLkkPGx4kB6+IuoZs8a1y+av0g9g1mKwDVYhYF/M+H xFjP4jfaTGjyYPYDz/I1mh0prgrwoe0KAVH8mc4jaYUBuTHk72gkNQEWD8wVESYhRPPg ykbs41JB+ezpW3fW0Pqh58vNZPb0DSnjFYcVwaHMachxV/KpPq/pyB5KbkQukdmMroCK h9Tg8R+D2SHCZYAvf9XwN7WrCEXE8cqaFpfB1TF1C+N8F1kgR8sJB2Kbm744v95LdNKo NRgA== X-Gm-Message-State: AOJu0YztnNLIRWXdY9BVJGzcSnqz9uEHUTWqyVmxbt/a2LTH5CoUwws7 IZxodcP7QsWtSZ2tNuAkJxldPw115yk7nikwuF7zr1u/aIRatzSDG8mWc2E8kLqxRoGyGlMdooc VAqnWbIk= X-Gm-Gg: AeBDieuswZTicDS5e4na0HbPC5Fa1jGO5RFQTY9mjy/W+Q0INRp2Y+3nELPtOoJMOTb J9JY3A1CY2deNpcmYV7OA7nb+OQ25aKJSNcB9Jug1mpPYWX/dfniN/HMhxfouEEX3WkcGRFT2RZ MFQD8vT3rOPVgdyGwlDOd9b6fMq8xpV8V0uinM0L4CAZNAF9G/okNJSxXLxpbwRyRT6l6HQc0Mn jbQSaUlfELfvUWoNQo7PIvLe+y67kg3/I5bIuQeIemo7X7gFJiF+JWE0gIaLAh4sMbj8ZJZaMVK U3dz6fkQZBcLMVXUyFjeeRGcCRigUXaVfSl/eTDQWom20X42RMNPymNX3jMVeqIrAWXrI2E7iIo 2f98XbUxEblHf1X/wuiNm2ruJJEVg1Hl5eimWi3a4USSeAAYK2fnua3NrRELlJt3TvHiyDC6V0S IxZWeFEHovksy96gBJony0HjpfYiWvSWSiaie2b0Kg X-Received: by 2002:a05:6a00:27a4:b0:82c:7767:5ba9 with SMTP id d2e1a72fcca58-834fdc5be18mr757173b3a.26.1777507565141; Wed, 29 Apr 2026 17:06:05 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 16/40] fpu: Return struct from parts{64,128}_pick_nan Date: Thu, 30 Apr 2026 10:04:59 +1000 Message-ID: <20260430000524.56046-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42f; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42f.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: 1777507577925154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- fpu/softfloat.c | 8 ++++---- fpu/softfloat-parts.c.inc | 28 ++++++++++++++++------------ 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index b7d461bca4..246209072e 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -4765,15 +4765,15 @@ void normalizeFloatx80Subnormal(uint64_t aSig, int3= 2_t *zExpPtr, =20 floatx80 propagateFloatx80NaN(floatx80 a, floatx80 b, float_status *status) { - FloatParts128 pa, pb, *pr; + FloatParts128 pa, pb; =20 if (!floatx80_unpack_canonical(&pa, a, status) || !floatx80_unpack_canonical(&pb, b, status)) { return floatx80_default_nan(status); } =20 - pr =3D parts128_pick_nan(&pa, &pb, status); - return floatx80_round_pack_canonical(pr, status); + pa =3D parts128_pick_nan(&pa, &pb, status); + return floatx80_round_pack_canonical(&pa, status); } =20 /*------------------------------------------------------------------------= ---- @@ -5120,7 +5120,7 @@ static void parts_s390_divide_to_integer(FloatParts64= *a, FloatParts64 *b, { /* 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); + *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) { diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index ef46dd740c..40ea7e3a39 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -37,11 +37,11 @@ static FloatPartsN partsN(return_nan)(const FloatPartsN= *a, float_status *s) return *a; } =20 -static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, FloatPartsN *b, - float_status *s) +static FloatPartsN partsN(pick_nan)(const FloatPartsN *a, const FloatParts= N *b, + float_status *s) { bool have_snan =3D false; - FloatPartsN *ret; + const FloatPartsN *ret; int cmp; =20 if (is_snan(a->cls) || is_snan(b->cls)) { @@ -50,8 +50,7 @@ static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, Floa= tPartsN *b, } =20 if (s->default_nan_mode) { - *a =3D partsN(default_nan)(s); - return a; + return partsN(default_nan)(s); } =20 switch (s->float_2nan_prop_rule) { @@ -110,9 +109,9 @@ static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, Fl= oatPartsN *b, } =20 if (is_snan(ret->cls)) { - *ret =3D partsN(silence_nan)(ret, s); + return partsN(silence_nan)(ret, s); } - return ret; + return *ret; } =20 static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN *a, FloatPartsN *b, @@ -605,7 +604,8 @@ static FloatPartsN *partsN(addsub)(FloatPartsN *a, Floa= tPartsN *b, return b; =20 p_nan: - return partsN(pick_nan)(a, b, s); + *a =3D partsN(pick_nan)(a, b, s); + return a; } =20 /* @@ -647,7 +647,8 @@ static FloatPartsN *partsN(mul)(FloatPartsN *a, FloatPa= rtsN *b, } =20 if (unlikely(ab_mask & float_cmask_anynan)) { - return partsN(pick_nan)(a, b, s); + *a =3D partsN(pick_nan)(a, b, s); + return a; } =20 /* Multiply by 0 or Inf */ @@ -833,7 +834,8 @@ static FloatPartsN *partsN(div)(FloatPartsN *a, FloatPa= rtsN *b, =20 /* All the NaN cases */ if (unlikely(ab_mask & float_cmask_anynan)) { - return partsN(pick_nan)(a, b, s); + *a =3D partsN(pick_nan)(a, b, s); + return a; } =20 if ((ab_mask & float_cmask_denormal) && b->cls !=3D float_class_zero) { @@ -891,7 +893,8 @@ static FloatPartsN *partsN(modrem)(FloatPartsN *a, Floa= tPartsN *b, =20 /* All the NaN cases */ if (unlikely(ab_mask & float_cmask_anynan)) { - return partsN(pick_nan)(a, b, s); + *a =3D partsN(pick_nan)(a, b, s); + return a; } =20 /* Inf % N; N % 0 */ @@ -1514,7 +1517,8 @@ static FloatPartsN *partsN(minmax)(FloatPartsN *a, Fl= oatPartsN *b, return is_nan(a->cls) ? b : a; } =20 - return partsN(pick_nan)(a, b, s); + *a =3D partsN(pick_nan)(a, b, s); + return a; } =20 if (ab_mask & float_cmask_denormal) { --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507631; cv=none; d=zohomail.com; s=zohoarc; b=F4+JzzvB/tm86qhaB9yLuyg+FKwQ8RS+S1e7+2yKS92Ae/UmCEKGV74XTppEg9Q4rbNErb15SWODptb8TWoAo7NEEWeD1xyhA+90pI005R6ddzG0zRoWa5yVOBJlMpmdWQETxWQFr7KEk1ri6H0ShOC9w4YXC0GA8lTYJS9+50M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507631; 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=eIOFTPro+SOLOQqbXG6r2uPJi9VHiMAgvHUNkPJdlow=; b=Ps0JgExxlTjZcZzHCWlTQGU8OO1fdEWwftzKRd5ZfFcDY8Cm2r1v31WInsGjYrB28UxtxFNMRQ0+RFHU8C/K0qiNlsEg7H5CbfVhtKwrWyXbxsu1v3iMVw2Wa6UnbYBW4DRfU+WQmTgEB9CfLJ1K6tOeNHiPc51+Av8aenRuO1A= 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 177750763099711.306631980594034; Wed, 29 Apr 2026 17:07:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEuz-0007Cj-Si; Wed, 29 Apr 2026 20:06:13 -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 1wIEux-000778-1n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:11 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuv-0001oD-2k for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:10 -0400 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-82f0884bcfaso251085b3a.1 for ; Wed, 29 Apr 2026 17:06:08 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507568; x=1778112368; 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=eIOFTPro+SOLOQqbXG6r2uPJi9VHiMAgvHUNkPJdlow=; b=fv0Pty4//lMNIQZV2zhk9x938E37LCxPtmWgXD7O9apNSDPDTz7TrLzWAe1pUvd95x ZubnLnv/xrOODp1vpPptVr1wFnF30q5UplZ3bp1drkE32mfKu7EhkNxsjj5TuTAgSKC3 84+4mVDH/OBhL01bycsEQLE4wG4rsPaZ9GCyo5fNBU8+Me9Vbz+XY/WbhN7EwFXygOjr WgtBnUAEUPQCxNuzlA3h3u4g4gFaKs7SxnuWJMa5vxOSHU3u+l0c+hzYqbeVUwBvfaPU FCt9PHpYngOoHwAOHbLFO5RGjPQkUdgrIhGd7E/yzMXmE+QuUh/+Ek/X6vAtZ3dXbJsB v0VA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507568; x=1778112368; 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=eIOFTPro+SOLOQqbXG6r2uPJi9VHiMAgvHUNkPJdlow=; b=Uf/lNlsWxwGzk3qtMVrj5hzKw/rLIk38FG2FALDnr0FlDZwDj+4FCqTpA+4Z8zBma0 +d0LNvlK3GgozaD4G0mg4Rc4/TqEIG9i4nQShhS/Oe8lyz/Q0ARGAX+n4CMa7tQT/LsB 5zIPa5/kQnfdVfwlgp8WeqerVPWML1EHN7JJa3DGv8LJ80hvLrPkEGByGJCcjSa5srKl Q42AnzVWpEGXmR+ghduHFNG9J3Qm4eLq2dmrwi74pj3Z+p2yINAkedobFNtEK/ZADNw5 XrD8jIIKt6bqC4Mtf2yyCjzlfzZ0ABmdBAnaMtYB8JOtirQ8uSaJEGNblXNrdVBefsTZ YmjQ== X-Gm-Message-State: AOJu0YzqTK/YyzpD9/4PWgVesZ3FyXkHGitVitAqdEqeVGX9RL+1UHU0 dD2+T0/gk0e+KHRDi3YDllMxUXNvkkENjojSmVe8ecKXgQLWpc+XfKGSTcwoyWh42zOa4/2KgYe 9oxrcv0w= X-Gm-Gg: AeBDieu9uFf1i7sjWE68NOjMx03FdRm97B2pAQVtqFmx/gJrfA5JcRgnXoTdzFLFqqK QZdRJR8f9BjCEQgNgHHuKvEO483MxPhhx9vCVPoR7ic/iJ50ahUtz9rgS8IyyMEbtppZYFII2XE QkTJWRF0iSnZrHTyxuNUE8oiWgJ38JqOZoMh01ZMnaBswdafGqxENAe9etO9FJUVuH7wzcuJ1HO y03z3fsF6ub0ej2gdWpeiFDPwCo5o80vketB6UMR43tkbY1b2fG9g7YBVWBzlGbqrqf6GwJffXt QE6uouxnujU0vPOXzkezRrwUN/7ohUHKvrAH3GYGa8gRV661KkUMhXMIdu2MmM3VH0X4aHImmse 3EfiJJ8X8S1uBvu1D+6Aka/c4idsq+eSerzDarj+N8J568n7P3WQfGk5GQwhQwQ26cTZoKMD/ua NQqPJbt8Qct7e53Ww9zEnjJt7awNRtDB1lNYZoV6DO X-Received: by 2002:a05:6a00:174c:b0:82a:6461:6d15 with SMTP id d2e1a72fcca58-834fdc94278mr822985b3a.46.1777507567428; Wed, 29 Apr 2026 17:06:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 17/40] fpu: Return struct from parts{64,128}_div Date: Thu, 30 Apr 2026 10:05:00 +1000 Message-ID: <20260430000524.56046-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.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: 1777507634702154100 Content-Type: text/plain; charset="utf-8" At the same time, export. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- include/fpu/softfloat-parts.h | 9 +++++++ fpu/softfloat.c | 34 +++++++++++++------------- fpu/softfloat-parts.c.inc | 45 ++++++++++++++++------------------- 3 files changed, 46 insertions(+), 42 deletions(-) diff --git a/include/fpu/softfloat-parts.h b/include/fpu/softfloat-parts.h index f631c38c79..44e0cb7d05 100644 --- a/include/fpu/softfloat-parts.h +++ b/include/fpu/softfloat-parts.h @@ -163,4 +163,13 @@ float64 float64_round_pack_canonical(FloatParts64 *p, = float_status *s); float128 float128_round_pack_canonical(FloatParts128 *p, float_status *s); floatx80 floatx80_round_pack_canonical(FloatParts128 *p, float_status *s); =20 +/* + * Operations + */ + +FloatParts64 parts64_div(const FloatParts64 *a, const FloatParts64 *b, + float_status *s); +FloatParts128 parts128_div(const FloatParts128 *a, const FloatParts128 *b, + float_status *s); + #endif diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 246209072e..6d69b61c7f 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -2129,9 +2129,9 @@ float16 float16_div(float16 a, float16 b, float_statu= s *status) { FloatParts64 pa =3D float16_unpack_canonical(a, status); FloatParts64 pb =3D float16_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_div(&pa, &pb, status); + FloatParts64 pr =3D parts64_div(&pa, &pb, status); =20 - return float16_round_pack_canonical(pr, status); + return float16_round_pack_canonical(&pr, status); } =20 static float32 QEMU_SOFTFLOAT_ATTR @@ -2139,9 +2139,9 @@ soft_f32_div(float32 a, float32 b, float_status *stat= us) { FloatParts64 pa =3D float32_unpack_canonical(a, status); FloatParts64 pb =3D float32_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_div(&pa, &pb, status); + FloatParts64 pr =3D parts64_div(&pa, &pb, status); =20 - return float32_round_pack_canonical(pr, status); + return float32_round_pack_canonical(&pr, status); } =20 static float64 QEMU_SOFTFLOAT_ATTR @@ -2149,9 +2149,9 @@ soft_f64_div(float64 a, float64 b, float_status *stat= us) { FloatParts64 pa =3D float64_unpack_canonical(a, status); FloatParts64 pb =3D float64_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_div(&pa, &pb, status); + FloatParts64 pr =3D parts64_div(&pa, &pb, status); =20 - return float64_round_pack_canonical(pr, status); + return float64_round_pack_canonical(&pr, status); } =20 static float hard_f32_div(float a, float b) @@ -2216,9 +2216,9 @@ float64 float64r32_div(float64 a, float64 b, float_st= atus *status) { FloatParts64 pa =3D float64_unpack_canonical(a, status); FloatParts64 pb =3D float64_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_div(&pa, &pb, status); + FloatParts64 pr =3D parts64_div(&pa, &pb, status); =20 - return float64r32_round_pack_canonical(pr, status); + return float64r32_round_pack_canonical(&pr, status); } =20 bfloat16 QEMU_FLATTEN @@ -2226,9 +2226,9 @@ bfloat16_div(bfloat16 a, bfloat16 b, float_status *st= atus) { FloatParts64 pa =3D bfloat16_unpack_canonical(a, status); FloatParts64 pb =3D bfloat16_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_div(&pa, &pb, status); + FloatParts64 pr =3D parts64_div(&pa, &pb, status); =20 - return bfloat16_round_pack_canonical(pr, status); + return bfloat16_round_pack_canonical(&pr, status); } =20 float128 QEMU_FLATTEN @@ -2236,22 +2236,22 @@ float128_div(float128 a, float128 b, float_status *= status) { FloatParts128 pa =3D float128_unpack_canonical(a, status); FloatParts128 pb =3D float128_unpack_canonical(b, status); - FloatParts128 *pr =3D parts128_div(&pa, &pb, status); + FloatParts128 pr =3D parts128_div(&pa, &pb, status); =20 - return float128_round_pack_canonical(pr, status); + return float128_round_pack_canonical(&pr, status); } =20 floatx80 floatx80_div(floatx80 a, floatx80 b, float_status *status) { - FloatParts128 pa, pb, *pr; + FloatParts128 pa, pb; =20 if (!floatx80_unpack_canonical(&pa, a, status) || !floatx80_unpack_canonical(&pb, b, status)) { return floatx80_default_nan(status); } =20 - pr =3D parts128_div(&pa, &pb, status); - return floatx80_round_pack_canonical(pr, status); + pa =3D parts128_div(&pa, &pb, status); + return floatx80_round_pack_canonical(&pa, status); } =20 /* @@ -5140,8 +5140,8 @@ static void parts_s390_divide_to_integer(FloatParts64= *a, FloatParts64 *b, uint32_t r_flags; =20 /* Compute precise quotient */ - q_buf =3D *a; - q =3D parts64_div(&q_buf, b, status); + q_buf =3D parts64_div(a, b, status); + q =3D &q_buf; =20 /* * Check whether two closest integers can be precisely represented, diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 40ea7e3a39..1634160728 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -807,68 +807,63 @@ static FloatPartsN *partsN(muladd_scalbn)(FloatPartsN= *a, FloatPartsN *b, * corresponding value `b'. The operation is performed according to * the IEC/IEEE Standard for Binary Floating-Point Arithmetic. */ -static FloatPartsN *partsN(div)(FloatPartsN *a, FloatPartsN *b, - float_status *s) +FloatPartsN partsN(div)(const FloatPartsN *a, const FloatPartsN *b, + float_status *s) { int ab_mask =3D float_cmask(a->cls) | float_cmask(b->cls); - bool sign =3D a->sign ^ b->sign; + FloatPartsN r =3D *a; + + r.sign ^=3D b->sign; + r.exp -=3D b->exp; =20 if (likely(cmask_is_only_normals(ab_mask))) { if (ab_mask & float_cmask_denormal) { float_raise(float_flag_input_denormal_used, s); } - a->sign =3D sign; - a->exp -=3D b->exp + fracN(div)(a, b); - return a; + r.exp -=3D fracN(div)(&r, b); + return r; } =20 /* 0/0 or Inf/Inf =3D> NaN */ if (unlikely(ab_mask =3D=3D float_cmask_zero)) { float_raise(float_flag_invalid | float_flag_invalid_zdz, s); - goto d_nan; + return partsN(default_nan)(s); } if (unlikely(ab_mask =3D=3D float_cmask_inf)) { float_raise(float_flag_invalid | float_flag_invalid_idi, s); - goto d_nan; + return partsN(default_nan)(s); } =20 /* All the NaN cases */ if (unlikely(ab_mask & float_cmask_anynan)) { - *a =3D partsN(pick_nan)(a, b, s); - return a; + return partsN(pick_nan)(a, b, s); } =20 if ((ab_mask & float_cmask_denormal) && b->cls !=3D float_class_zero) { float_raise(float_flag_input_denormal_used, s); } =20 - a->sign =3D sign; - /* Inf / X */ - if (a->cls =3D=3D float_class_inf) { - return a; + if (r.cls =3D=3D float_class_inf) { + return r; } =20 /* 0 / X */ - if (a->cls =3D=3D float_class_zero) { - return a; + if (r.cls =3D=3D float_class_zero) { + return r; } =20 /* X / Inf */ if (b->cls =3D=3D float_class_inf) { - a->cls =3D float_class_zero; - return a; + r.cls =3D float_class_zero; + return r; } =20 /* X / 0 =3D> Inf */ - g_assert(b->cls =3D=3D float_class_zero); + assert(b->cls =3D=3D float_class_zero); float_raise(float_flag_divbyzero, s); - a->cls =3D float_class_inf; - return a; - - d_nan: - *a =3D partsN(default_nan)(s); - return a; + r.cls =3D float_class_inf; + return r; } =20 /* --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507658; cv=none; d=zohomail.com; s=zohoarc; b=m/LxA1yVhs6IH3Y70dlLj27bOxlbPCAcvNsqmL0bUDinMRgp+MNLqDf6wktj4AbfoWjkEIihqbs0k5SZJPDpZXwr3BLAFmip4YAcx471X/eQUq08sDUe207s6t9OjxkRzfSdw3d1IErE3blGXC57VFDmmlKmkExfk7ryqDGhdaE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507658; 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=JSvlZGQiAWrIdEA2H7tknqWIVgUz9Yz+IiSwcs8ZnIo=; b=RCCCFInlCDy7SNTvuF6GXdZ+zruafNM0JSbsVMImtB6L332NIE8cdl8NHLx9FYWYmcVAo7PDwMQOp7qhaRxftTNe2aZVX/u6Y8sUzP4VifXftfzNcccZmxFuk6aTsCFLRYfrJzhY3yEYQqukh6fV31Qkft+LowmcT6XeIGzF9TE= 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 1777507658460271.3944447200572; Wed, 29 Apr 2026 17:07:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEv0-0007LT-Ul; Wed, 29 Apr 2026 20:06:15 -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 1wIEuy-0007CK-U3 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:13 -0400 Received: from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEux-0001oe-62 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:12 -0400 Received: by mail-pf1-x436.google.com with SMTP id d2e1a72fcca58-82fbf5d4dc2so266168b3a.1 for ; Wed, 29 Apr 2026 17:06:10 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507570; x=1778112370; 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=JSvlZGQiAWrIdEA2H7tknqWIVgUz9Yz+IiSwcs8ZnIo=; b=GCmEJrR5saq4z5qctCvVpafH10OUl7LCeDxXcUU75GFY62VoGw5mfj+yHHIEK6hU8q f9sEam3KBYgFFJSpe/i4lIPMMDgUcCrzvse+XvdWpV+OjoT/j68sInmorSIzqZjrcIUq YSmWWIJnwBPDy0UiOUmdWhfGwsaYssvugTsYMgSr+RjoGU9mUS0JHxBCbbxVbP3MRrAj 4lLqlSaG3TZiUeGvdKxMul7LuoI58fLOooccy5Rq517+sI/9Yb9wWV7gwk0j1rGraSZa AWfV0UQRxMA12icXqjTRY4kaVVBbMv1g9q2W2VdADjaEJQ3UWHSWXoH1Z1B4UPrBAs79 uoDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507570; x=1778112370; 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=JSvlZGQiAWrIdEA2H7tknqWIVgUz9Yz+IiSwcs8ZnIo=; b=tVn8U5+Dz+u/bqyK209wFhZREmFZcnqSSRBAmxEw4wiCYd3685eRTlfG2PI0SZ1AAh NealsmA2l0QKZTJCJllDjFRAtidS5fj46876J0yXy4dVGx8q7H2FmQtk1tLd2kDif2S2 J0BbNZWzw+/VQYOeRKos/ekpAbAzW9WdBEFISA1WEYLiRftDofvRYygd2/i1HlaS7ysq lSDVx340D8HLPxYsci3XOw7FLpwSjP03k2/WKCuAm1ciT5gnTTULb5q0rn3XCcAFr9Vg MuqYll0yIirfMIAjHxVjWrEmgZ777CHabH4p1vZBCFWv8h2kL4LxY63BioPA9+llJaOJ 3MxQ== X-Gm-Message-State: AOJu0YzVYSLQRDyTSNI2/lGJUqgYH2X42x8z9sGPSHyBIO5qC6OI4yWP mhpynUiX5mVKhL8gU3dUb/PSaDLO4cSmxb9g5PH5Idr9i5VpaPuxv+DwrtqOryVF2kdu0aYQ/FC l0wtiSZ0= X-Gm-Gg: AeBDieuVjRs6+oJrVNvmXr0g4TEIKR3J+eYXfLhbRwJxNMTSu3OkfRhBPeNPkf2C6iC DfFWuAspxBE801o+BWuwmQrIVSseZgS5ERidRCNUATd+YALl+Er9NxMVt2bp/spPy/fSNErUK7Y 9QIFPPMIs44wBhaRovV12Y9JOyrTnjVYmuql9smGbOn7lC4TAno2xAeOShPpVrGQEwdV+KO4i6s 9TqaWfFBD8QdImR50iNjlDz0wjGSOkjBsx1ZwA8mlEM14i8VTBJI2IFibuiTRndZ1qh3XB40yki Wik4lZzl27ct3efMDYb2zK/1LCgR+y625tJxz0Vkzigsxa565lx5inlwxJpFNijARcVWUJj82SA JoQBumKAE/NJ4TTePqOaLCupgHjSpDkomzR11FUqPfBHHbzydNSxv2LRJw7nBWAMYRgYNhsErH0 vLRwQEHxKG5EYWgL1p6M8gMotEIhLbUlEvUsTcAn6A X-Received: by 2002:a05:6a00:a113:b0:827:2a07:231d with SMTP id d2e1a72fcca58-834fdb4058cmr800006b3a.17.1777507569784; Wed, 29 Apr 2026 17:06:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 18/40] fpu: Return struct from parts{64,128}_round_to_int Date: Thu, 30 Apr 2026 10:05:01 +1000 Message-ID: <20260430000524.56046-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::436; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x436.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: 1777507658764158500 Content-Type: text/plain; charset="utf-8" At the same time, export. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- include/fpu/softfloat-parts.h | 9 +++++++++ fpu/softfloat.c | 19 ++++++++++++------- fpu/softfloat-parts.c.inc | 17 ++++++++++------- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/include/fpu/softfloat-parts.h b/include/fpu/softfloat-parts.h index 44e0cb7d05..1329bc4d2f 100644 --- a/include/fpu/softfloat-parts.h +++ b/include/fpu/softfloat-parts.h @@ -172,4 +172,13 @@ FloatParts64 parts64_div(const FloatParts64 *a, const = FloatParts64 *b, FloatParts128 parts128_div(const FloatParts128 *a, const FloatParts128 *b, float_status *s); =20 +FloatParts64 parts64_round_to_int(const FloatParts64 *a, + FloatRoundMode rmode, + int scale, float_status *s, + const FloatFmt *fmt); +FloatParts128 parts128_round_to_int(const FloatParts128 *a, + FloatRoundMode rmode, + int scale, float_status *s, + const FloatFmt *fmt); + #endif diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 6d69b61c7f..b71bd49483 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -2738,7 +2738,8 @@ float16 float16_round_to_int(float16 a, float_status = *s) { FloatParts64 p =3D float16_unpack_canonical(a, s); =20 - parts64_round_to_int(&p, s->float_rounding_mode, 0, s, &float16_params= ); + p =3D parts64_round_to_int(&p, s->float_rounding_mode, 0, s, + &float16_params); return float16_round_pack_canonical(&p, s); } =20 @@ -2746,7 +2747,8 @@ float32 float32_round_to_int(float32 a, float_status = *s) { FloatParts64 p =3D float32_unpack_canonical(a, s); =20 - parts64_round_to_int(&p, s->float_rounding_mode, 0, s, &float32_params= ); + p =3D parts64_round_to_int(&p, s->float_rounding_mode, 0, s, + &float32_params); return float32_round_pack_canonical(&p, s); } =20 @@ -2754,7 +2756,8 @@ float64 float64_round_to_int(float64 a, float_status = *s) { FloatParts64 p =3D float64_unpack_canonical(a, s); =20 - parts64_round_to_int(&p, s->float_rounding_mode, 0, s, &float64_params= ); + p =3D parts64_round_to_int(&p, s->float_rounding_mode, 0, s, + &float64_params); return float64_round_pack_canonical(&p, s); } =20 @@ -2762,7 +2765,8 @@ bfloat16 bfloat16_round_to_int(bfloat16 a, float_stat= us *s) { FloatParts64 p =3D bfloat16_unpack_canonical(a, s); =20 - parts64_round_to_int(&p, s->float_rounding_mode, 0, s, &bfloat16_param= s); + p =3D parts64_round_to_int(&p, s->float_rounding_mode, 0, s, + &bfloat16_params); return bfloat16_round_pack_canonical(&p, s); } =20 @@ -2770,7 +2774,8 @@ float128 float128_round_to_int(float128 a, float_stat= us *s) { FloatParts128 p =3D float128_unpack_canonical(a, s); =20 - parts128_round_to_int(&p, s->float_rounding_mode, 0, s, &float128_para= ms); + p =3D parts128_round_to_int(&p, s->float_rounding_mode, 0, s, + &float128_params); return float128_round_pack_canonical(&p, s); } =20 @@ -2782,8 +2787,8 @@ floatx80 floatx80_round_to_int(floatx80 a, float_stat= us *status) return floatx80_default_nan(status); } =20 - parts128_round_to_int(&p, status->float_rounding_mode, 0, status, - &floatx80_params[status->floatx80_rounding_precisio= n]); + p =3D parts128_round_to_int(&p, status->float_rounding_mode, 0, status, + &floatx80_params[status->floatx80_rounding_p= recision]); return floatx80_round_pack_canonical(&p, status); } =20 diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 1634160728..1cd0df4159 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -1255,24 +1255,27 @@ static bool partsN(round_to_int_normal)(FloatPartsN= *a, FloatRoundMode rmode, return true; } =20 -static void partsN(round_to_int)(FloatPartsN *a, FloatRoundMode rmode, +FloatPartsN partsN(round_to_int)(const FloatPartsN *a, + FloatRoundMode rmode, int scale, float_status *s, const FloatFmt *fmt) { switch (a->cls) { case float_class_qnan: case float_class_snan: - *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_normal: case float_class_denormal: - if (partsN(round_to_int_normal)(a, rmode, scale, fmt->frac_size)) { - float_raise(float_flag_inexact, s); + { + FloatPartsN r =3D *a; + if (partsN(round_to_int_normal)(&r, rmode, scale, fmt->frac_si= ze)) { + float_raise(float_flag_inexact, s); + } + return r; } - break; default: g_assert_not_reached(); } --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507657; cv=none; d=zohomail.com; s=zohoarc; b=OpQAYMiEAdrFthNUYB0e+VVSs40Z3JxplXmVPcX9IGm/egBEmbvuRBumu8VYHTam97/qNV61DFvW0PZfdC8iR4Tsir8bG9vjEknuu1/PZbCZNvPwWU+D+s97+iLJUvzcM0orWC6cX6Wqp/pdI/6Go28/a5XWQmJD6NCY9hovmow= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507657; 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=t8q92mP0WsVg7jShnJO3IJxQ7Z8BkHGBrtVLkPQnGUU=; b=PlKxvAcMuI0ueRkr4BuXo4qth8ZrR0RcaLjz2NeFz6+0Nt141/0RwXiOHzn8ckrnHkkFqB5LKkjCHFiASXbtpWm0ULhAQrSbUAa4NYKFOeS3Vga/W4+u5ACbv3tcLaJseTbsH+KP6F3k7wrIeEXF6hNFNb/tzJ7T5b5RKlhEcCw= 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 177750765782014.50796991844095; Wed, 29 Apr 2026 17:07:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEv4-0007ap-Jq; Wed, 29 Apr 2026 20:06:20 -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 1wIEv1-0007Md-3T for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:15 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEuz-0001p0-J3 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:14 -0400 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-82cebbdbdccso224764b3a.1 for ; Wed, 29 Apr 2026 17:06:13 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507572; x=1778112372; 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=t8q92mP0WsVg7jShnJO3IJxQ7Z8BkHGBrtVLkPQnGUU=; b=cMz2GRKxpXPCt5gWCqtI8lHt+wdibTHrjbkvh/r1suU5YK6LZJ2LNSGovTX+HZ85nL y9EtHPA56EjdFM9xYtz+C7d2PzWwinPfr2YkvFY9eev16tN/qT9YW05Df4H6COykweCJ oKbmFSuuqhOqqDjpSBwR94qz0EK9BKy9pgws+KmollgSgoEZe+2rwiG0PyuqHDrDuXl7 YRO/lTKXF2rjuyOdTBOKrkB6AZBUqJMkBKTzwsLMJ1UZAbCbnVSuBFVYHElNEOhd+YJO DW1v6L9YFh1J4eMe5I6s6pbaoqbFLUsxYcft9+6iQqRgWxNG5kg/53d/0KxDfd2wMerM Bqzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507572; x=1778112372; 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=t8q92mP0WsVg7jShnJO3IJxQ7Z8BkHGBrtVLkPQnGUU=; b=VjzaMfW4imG/9DHMzp0wgbSf0rQ7pcwkG4z7hi1BfG1vAKCc1LosJO+L3ao5jgUIM/ aR/XzpAZsnI9bdCigiRkGETHNc2sFpqw/1YhIfrmsTXJ9WJCwWFESmTy0XTfvpQbD3t9 fWcRqk9iYsl5PhYHB41HJSB7gNoijm/23KmlfuvDzobniBWqOd8R4hLwoRtTbvfNqJkO 8rFci+HFAvVHP+3HhJdio+6f0H62JsC257AXWLWdof8U3nTTF3XgJG4ox7AL1ncHe2rq EJdT2IvYGzEcY7NWJoIV3ghynxSlE7IS25lrg5+sQhoCDzPjNqfeaLT0Bz+7BBuyqTwC ut2A== X-Gm-Message-State: AOJu0YwJJXq+vAO+sDLuf0fHoNE0N2bRPvsCKRHCku/3lxrJ3Vdt0Xyk QQJjt7zB2gxiXTilubJ/fsPVaZkHVQzNJQEy7ofNoTqEQaJWTVEe7s2q4wPuh4kS9uzJgR27v/X pTpzNkvw= X-Gm-Gg: AeBDievmeQqFfTdKqA2Cj/XZ6tOcphqcn2oJwumjqsJzsD4am4BvxtFL8C7BG3Z4O/Q 3QqQUpeFgq6J1XUvzC6gEHnMZujH0K1pl5TmbEyCs18wXPJ0xKw7bMLcNzlUbBMZNhfhK5NIdzR +JOyBnQOoM2JTyqz59PVEXPVFx0P5BaOmadXUc+pXTrAJ3h7YS09ZeMvnsnOYpUCTFqlbHbiEjV yN58kD4iZ3M7lMs24fDarH/kowLMOWUmzh8BeNzt5mv3vPn367qy5fWM5r8v2nWEhzd27RsCY1F gU36qyYz/aEHDrZECQyRc2khnfxjcCQRAfzAe6orNd14OrgMTnGGzj7I6e+GuMe7eIjhX1vpqCe n7npQUVi6V/2+TCiKw4jGKWtXhpeddV/Xo/L60oiH+joF99o1C8PzdC9zOYSr2zJ1CZu5Nr0A7Z SZgGWAoZaQltnv3jkNr7O2WI4PKnlNIaoYtcZrDFS6 X-Received: by 2002:a05:6a00:9284:b0:834:e24c:3f9c with SMTP id d2e1a72fcca58-8350000ec86mr216657b3a.22.1777507571986; Wed, 29 Apr 2026 17:06:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 19/40] fpu: Use parts64_round_to_int in parts_s390_divide_to_integer Date: Thu, 30 Apr 2026 10:05:02 +1000 Message-ID: <20260430000524.56046-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.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: 1777507659592158500 Content-Type: text/plain; charset="utf-8" We will not expose parts_round_to_int_normal. Signed-off-by: Richard Henderson --- fpu/softfloat.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index b71bd49483..e42782c656 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -5161,12 +5161,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_buf =3D *b; --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507619; cv=none; d=zohomail.com; s=zohoarc; b=UiBOHlOhVeXIhEAHgcAmb/ivNnyXkXQN7cCzpbBTk9MdFHMktiYF/NARW/WWMGPzA6LHEtdXxkUT5X6FcL4+6y1bzMAfxW7h0liCnt77xLFSs9pl0Y+2muKZO33vz7fSfYUcKqCaqoxlIHVhUbnVXvMoI9haBzLrHPIbY4EUJzo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507619; 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=0Rzg+4hO4nAbZubUAP6kBF42CtlaKGG45/YI7C1MQn0=; b=l+RJ45cqNfrnxFfJwCYuzyKefkXRcai7Y/2YKiY1e40WGGt5u5EU3MYA57k0ueZKKwb67b3f7G3vQYeF5XjtfBDyQMzabl6iQOAiswRnCcmZv+L1eximXnkDLVijTkTnuYKTUEyfvFLt+BDb99XRpDJZ1XMeT9F56Kb7aZfXsV8= 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 1777507619906158.8655151610509; Wed, 29 Apr 2026 17:06:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEvC-0007mT-Ta; Wed, 29 Apr 2026 20:06:29 -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 1wIEv3-0007YP-O5 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:18 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEv1-0001pR-Vj for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:17 -0400 Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-82cebbdbdccso224774b3a.1 for ; Wed, 29 Apr 2026 17:06:15 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507574; x=1778112374; 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=0Rzg+4hO4nAbZubUAP6kBF42CtlaKGG45/YI7C1MQn0=; b=AvbR1FddT6YoZE4EnOLAJY44h/2z2yHskzoof+VX1d0cHiirV6C2a3KClhtYNjvWEW c9FZktmnuyYyUAZ/zqiUsMoUKjGb7W2c+cEgJKSXhDsWuaJCiPbVTNrA6KeAL9PBgdaz 5pvvLFQx3jXH/46fT+g0OhgI8j55a8SJkVSXhF0P7J9fkv604vT3EK3m0R1UfZDzO27l FYThrySx2wa2l1c80CEPZjmGM+qJMWeH4zfW69sWA70QmJ6jy4CAzB4X10wPr9baocZn IOR5bzJJ7Brgsx+jjdQ79hmblzN14ZFEc6xFsR5IodZ/Q58l91iXNMTR1y0BA/WHhmfe oroA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507574; x=1778112374; 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=0Rzg+4hO4nAbZubUAP6kBF42CtlaKGG45/YI7C1MQn0=; b=IID1tqcnDxkT9NEnnbhQ14bpnI6Jq+nDbfpF1fWdUPaE0wdLmy4PjEc2A0bmDZ3YkP vIjmFy6QEBDkGQ8QHuvqZElaXpoRI21VqJBWfjCqA0O4SSxrz2C+fZIGwJIL1GFGBES8 12It80JJ8qKLpVIWB8bQzDsbm79dpi1iGnao9XhFmDVoyu5pi5705VTQFaZc7q72XBMi CoHOSZ/JEUA/exX3kbRnaN9hmIujP5HxEKIjmxeHkjf0ta00ja+PPVcCzuEi+LrV+gjS wgANA8NN7ppVCJNopJhfZkD15i5A7JoxdFmGAl6/0K2ovHE8/91mmfYyNzcPvSKwUAqV JDRQ== X-Gm-Message-State: AOJu0YyflGjNiEONB5U/SyIm3TTWaeDsC+VhDJsLJK52QuX1+aWdvdKG +RbgV4FjLWQuCkt6KK76l7lSJYlgr30V2JZ4mbIZhj6ixWFq/JZIg3YqBKnBkkNWf5v4hK/vNls ZXxARI3k= X-Gm-Gg: AeBDiesA/i6ChmE4MboenUF+vUaIpwcS7DHuWsAvb9l+nRptKDX+6vewb3Db56UtPWo 917tWnopmwGnl3PFCWK7UFTi9tQAWMiPJ6BZ8FSyjmj+rmlfP26tL5XSToxEPw2Liux/8ajVcPx /XRaGVF3FBpS2bZ3wl9F7YLKetrBBUeCnw2mC2Gp8Dxbt36I6w+CCASBbyo2S2I5YWZVZ/BigrL NXZN7WjJ2ladCDA0Lks9VwMFjnnY+O7rhZrS+Fj1y45kEYPbyT2Rp0StLOJLBblSTZdmaw5SN4p gOyad9GuEIlFkoIekxTIPVBHbEdkkHdnrQ6E6Tvp83RDbluAtAN5zErLPFPwejalQ0vdqUyajZu SwhXEtaLlfILnAXyZfaB3kXtwncyRKFF5YEqOnYu+reRtHZoPHjHz2gWcGYdsXbgNyL4Y73gXRm SvNZB7ttMk/qZp7UkeaJq/BP8KmGPtWuB66s40dR9h X-Received: by 2002:a05:6a00:3021:b0:81f:5acb:55fc with SMTP id d2e1a72fcca58-834fffc165cmr216071b3a.10.1777507574316; Wed, 29 Apr 2026 17:06:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 20/40] fpu: Export default_nan, pick_nan, return_nan routines Date: Thu, 30 Apr 2026 10:05:03 +1000 Message-ID: <20260430000524.56046-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::430; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x430.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: 1777507620618158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- include/fpu/softfloat-parts.h | 15 +++++++++++++++ fpu/softfloat-parts.c.inc | 6 +++--- fpu/softfloat-specialize.c.inc | 4 ++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/include/fpu/softfloat-parts.h b/include/fpu/softfloat-parts.h index 1329bc4d2f..8c3a94bbbc 100644 --- a/include/fpu/softfloat-parts.h +++ b/include/fpu/softfloat-parts.h @@ -163,6 +163,21 @@ float64 float64_round_pack_canonical(FloatParts64 *p, = float_status *s); float128 float128_round_pack_canonical(FloatParts128 *p, float_status *s); floatx80 floatx80_round_pack_canonical(FloatParts128 *p, float_status *s); =20 +/* + * NaN handling + */ + +FloatParts64 parts64_default_nan(float_status *status); +FloatParts128 parts128_default_nan(float_status *status); + +FloatParts64 parts64_pick_nan(const FloatParts64 *, const FloatParts64 *, + float_status *); +FloatParts128 parts128_pick_nan(const FloatParts128 *, const FloatParts128= *, + float_status *); + +FloatParts64 parts64_return_nan(const FloatParts64 *a, float_status *s); +FloatParts128 parts128_return_nan(const FloatParts128 *a, float_status *s); + /* * Operations */ diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 1cd0df4159..7d4b40022b 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -15,7 +15,7 @@ * indicated otherwise. */ =20 -static FloatPartsN partsN(return_nan)(const FloatPartsN *a, float_status *= s) +FloatPartsN partsN(return_nan)(const FloatPartsN *a, float_status *s) { switch (a->cls) { case float_class_snan: @@ -37,8 +37,8 @@ static FloatPartsN partsN(return_nan)(const FloatPartsN *= a, float_status *s) return *a; } =20 -static FloatPartsN partsN(pick_nan)(const FloatPartsN *a, const FloatParts= N *b, - float_status *s) +FloatPartsN partsN(pick_nan)(const FloatPartsN *a, const FloatPartsN *b, + float_status *s) { bool have_snan =3D false; const FloatPartsN *ret; diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc index 2723bf5e61..485f082cf8 100644 --- a/fpu/softfloat-specialize.c.inc +++ b/fpu/softfloat-specialize.c.inc @@ -118,7 +118,7 @@ static bool parts_is_snan_frac(uint64_t frac, float_sta= tus *status) | The pattern for a default generated deconstructed floating-point NaN. *-------------------------------------------------------------------------= ---*/ =20 -static FloatParts64 parts64_default_nan(float_status *status) +FloatParts64 parts64_default_nan(float_status *status) { bool sign =3D 0; uint64_t frac; @@ -142,7 +142,7 @@ static FloatParts64 parts64_default_nan(float_status *s= tatus) }; } =20 -static FloatParts128 parts128_default_nan(float_status *status) +FloatParts128 parts128_default_nan(float_status *status) { /* * Extrapolate from the choices made by parts64_default_nan to fill --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507658; cv=none; d=zohomail.com; s=zohoarc; b=N1G940zml2FdCYfG7sEMpBTVjdSJVU3XRBLbeamWd6x+lexLOYcfiAklM4LfQTTCC0QfvKuAzgvAbImH76vWVNhgI5tJVX0DLIW/Naqyu7pQT63Itw+WQ5AX/SrSU6kKng2CqRKJ18IdcOaUqcrcEDUKEPzKhXwx5genEj1V6+k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507658; 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=P36S9oF3hhIawVjz64/S26T69xm/jo805Qcqz+Wuw4E=; b=esIdy7OZKVOBsp5MCiSymK9uCi9vScr+STF0FL9oLAjieKTTAVlABguVpHm4A81cstPvkANdrYLfrahay2Q1ST34AoJ4RBjC6byWp7M+74Qrl3EvUxzoLzfqnJOVXOXNyh+fSqBbh6HcaXNa/6MIjy5trkHJtyXFeoMaz9fhXEg= 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 1777507658857540.5722352495736; Wed, 29 Apr 2026 17:07:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEvR-000807-LB; Wed, 29 Apr 2026 20:06: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 1wIEv6-0007ij-VS for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:24 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEv4-0001pf-34 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:19 -0400 Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-82fbf5d4dc2so266230b3a.1 for ; Wed, 29 Apr 2026 17:06:17 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507577; x=1778112377; 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=P36S9oF3hhIawVjz64/S26T69xm/jo805Qcqz+Wuw4E=; b=NU5NACyd/E4ij8DgZOqBpAW2Ka9xb7L4KnztNG3C4DJodsKFm3lBxkuHPX432JToZ1 +mZMnGjEmY+By+nf9qo90nc3szLHd3NradSejWyGljxpu8r+hYEL2x0yLQKaZ4QPeA3d QcGEuHQUj14Y30CReDx+Ok+dOAOr2Z72HK/Ldv3dj31hgmqdQ+w3jv3qTIXHAuhbKZ8B YGTgCD05FilN4UQjxT4ww9XpPLHRn5xk2qzuHRh/z+cmqaxEdG/uvB9jAOggiOxgwAJF fCR93gG4+isVEvimE877mlVR6KqBuisGEwL26yxEP3JQ47QvnLYCPy+tOTVSiSPecSbz k/NA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507577; x=1778112377; 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=P36S9oF3hhIawVjz64/S26T69xm/jo805Qcqz+Wuw4E=; b=SxMNrFuSeOEjLXPLuJm0SI/MwW/EXjOSgIwkEyQI74G5add9vD188S96f/XzdO24Gm JM1X6QNSnJzRwwwUK1SccHZKFxbv2T0hHiB3I2yX2dGkWlmelVY8iNCWDmEn3teSwuww F5B8qHugLcCWCCKmkCuclnCJA+TNKXHnHoByMbFrvM2p9p9HO36yBfYZF/SFi2LwFIyL SWyCGvCyf2vBetFmW0FUgEiG1DHvJJ69COwbGn+Jj9yFcUAbM9uY0C82s3Ps1u9V4GxO 0kHcJ13LmDqWDl7bUjcqaLbhgIL27KaUHF/KhxEb3lfUY8peMZg0Ey4k+N5J3tDSpa+u B5bw== X-Gm-Message-State: AOJu0Yy/KtXuD/30Wvd+6h1ciYAJnNA+yL+QtQis4SLLSAX8quuV1nYl 49g8UZgJxbHk/DYK78tIuSUWvZvv9d65BbLUTFYD/UjUTSb4WuFDZ4Iklmx/l/QSZgkVQKNEcjU 6n/ODmUw= X-Gm-Gg: AeBDievAieqe8b+zecNvsDKGiWT2AfxRwGUAR119h3aYV7t8X8lXzwmmyEhnTZ4400P tQwFZn4aCN1JrPMoDFoZWJBYZbBBQBjsvwRXvwKdmQSf7bdYHZ+eBLjhtuCmkrWX7nT6WjD7U09 Z7n6K0st9X4MH9K7hSfIzVGAeF2fSySrmlNHILJcslm5nac2r1UWWtuCy2nTenmIAD4R4pOCp+Y iFqoFYhtcoSmayp20uoV0FZoPs1t7D8p4eqxJH7fpm/MOBLHP9qcbLyQW1aOJcBpo0Q4DOYEb1N suCYsqQjwYVLiQb/vyyhYOCISlbue6kMQVMxgmU5jEAMv5jK4KVWLnIrFbaABCakXccNTjQmNNk bBADKLklZI8idf+yVk6ucJgyQlFgx8P2i1Hi4T2MJkADpsnmo5YE9WzdQM9S+U6xvIwhvstyX36 SDPJ7AX2aFywCyqEygUSXGINQ1X33NuuZ07IFEXzCd X-Received: by 2002:a05:6a00:812:b0:82f:1369:7268 with SMTP id d2e1a72fcca58-834fdbd904cmr780578b3a.30.1777507576502; Wed, 29 Apr 2026 17:06:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 21/40] fpu: Introduce parts64_round_to_fmt Date: Thu, 30 Apr 2026 10:05:04 +1000 Message-ID: <20260430000524.56046-22-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42c; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42c.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: 1777507660987154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- include/fpu/softfloat-parts.h | 3 +++ fpu/softfloat.c | 22 +++++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/include/fpu/softfloat-parts.h b/include/fpu/softfloat-parts.h index 8c3a94bbbc..1876264d43 100644 --- a/include/fpu/softfloat-parts.h +++ b/include/fpu/softfloat-parts.h @@ -196,4 +196,7 @@ FloatParts128 parts128_round_to_int(const FloatParts128= *a, int scale, float_status *s, const FloatFmt *fmt); =20 +FloatParts64 parts64_round_to_fmt(const FloatParts64 *p, float_status *s, + const FloatFmt *fmt); + #endif diff --git a/fpu/softfloat.c b/fpu/softfloat.c index e42782c656..4efafbf05a 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1396,6 +1396,24 @@ float64 float64_round_pack_canonical(FloatParts64 *p= , float_status *s) return pack_raw64(p, &float64_params); } =20 +/* + * Round to Fmt while remaining canonicalized. + */ +FloatParts64 parts64_round_to_fmt(const FloatParts64 *p, float_status *s, + const FloatFmt *fmt) +{ + FloatParts64 r =3D *p; + + parts64_uncanon(&r, s, fmt, false); + /* + * We normally expect uncanon to be followed by pack_raw, + * so we don't actually crop the bits. Do so now. + */ + r.frac &=3D MAKE_64BIT_MASK(0, fmt->frac_size); + parts64_canonicalize(&r, s, fmt); + return r; +} + static float64 float64r32_pack_raw(FloatParts64 *p) { /* @@ -5175,10 +5193,8 @@ static void parts_s390_divide_to_integer(FloatParts6= 4 *a, FloatParts64 *b, /* Round remainder to the target format */ *r =3D *r_precise; status->float_exception_flags =3D 0; - parts64_uncanon(r, status, fmt, false); + *r =3D parts64_round_to_fmt(r, status, fmt); r_flags =3D status->float_exception_flags; - r->frac &=3D (1ULL << fmt->frac_size) - 1; - parts64_canonicalize(r, status, fmt); =20 /* POp table "Results: DIVIDE TO INTEGER (Part 2 of 2)" */ if (is_q_smallish) { --=20 2.43.0 From nobody Sat May 30 19:23:37 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 1777507854294977.9522957588472; Wed, 29 Apr 2026 17:10:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEvt-00009P-PC; Wed, 29 Apr 2026 20:07:09 -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 1wIEv8-0007jZ-9Y for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:24 -0400 Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEv6-0001q5-L9 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:21 -0400 Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-82cf636dac8so171848b3a.3 for ; Wed, 29 Apr 2026 17:06:19 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507579; x=1778112379; 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=NyGaCW7gD91Dm1boSLyd8Ffs2ydc5g5SItzum+VAxMU=; b=O7BHsI/2VsG94d+eA6rMgvYxb0gYMQsUzALdIEbJkt3LKDeWhAVITYermOJtlZaWLM yxMIHXWABOR3W9+60yyzOIh7ZB2LCH+Sg1j/JaXB1CKLG/wJOMS/LuVv6gK/ElmpImdv tUvRLwTmvtBCZY8g5ilxWn/RcI5ZQ8tWejPMvuLhxNy94Rwz/GCTXVSfncyO7yJg9cZw 9QYV880p3CY/0JnC9mtsQ3e5cbrZFgFHXvjQsMPGHiJXtDkaTBOKz2+0p589g1r8T0Pi 4MUOCM1nxg9I8cviVY9zoSpIygmOHcVKAuohFakiEw7ZUg5cyvzQjj+gkUdCR1HTUzxn tmaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507579; x=1778112379; 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=NyGaCW7gD91Dm1boSLyd8Ffs2ydc5g5SItzum+VAxMU=; b=MfeNTfVsIOVH/7PXKbTiGlFL8+miO2tPzbWnShdqakBDQU9L5VrjrA33gP1wBbFMLG htXLSD18v9y6hzvVzfJ05CrRDJ1O2F6fYSPbkFQMaJTKcUz6hbrFD+lHjF0gPx1zqBBD hOJaHctWRRaZrw+5qPwVYJ9gZq82BwLy4+Is80gRDlCI0sLYZAhbAh+E9n81X06V5SOi 5x4FXmQGoeocIZYpAxWCkKTe5N8zj4gHKqsr7jaHXvltLJ4zH9l+ZEVm9X9oPTl3UDgs KP4Q4lDxQ5bg0RvHnoF966N9sh2+cWqQQn/+eiNHLYuN5JJtlI6y2r3gG7Z0SDJyXBng nRlg== X-Gm-Message-State: AOJu0YxEGh4hSL8TRKA+jusXjBVzAtejaK9ZeVIrUOvA1Zr8CXiS+FbU dN70c4tJET2p8FIpVUNHVVNlJa4j/o9O194Gdd4CtMqzVfb6tJ1gT9yLBhhHeesHiCM3sA0JHOW stwIgckE= X-Gm-Gg: AeBDievg2vPrwod5uFKkqNNxEA+KxMIXW6vt071XkMzO8kbycgrmq0nJMsHaFehjt4q A5kdBZXC45trLR/VG3udxICMv2zQxMOOmmYNniWwgcHjqBZ/P6iGCFX2Ga/wEjP6d8ll8JHKEwm Om9mdtXBR4Wj9dAO7cWqLJKsm/LpAtO6EAFdYUmfTUmhc9X11HNu7HFJKDSMKMYBwWxrq4kmjOu G7mvMpPp+bpAFDDJXfJFsC1t1IeH3APFhUzDr0w1cn+k4RaO+KqpMYakvJFlT6qkRT2tP6qe1G2 1f73I2sKd/av8RJKZiTRnpH+KF154yqsQtQDt5vV7zCT4v49WFa1+d6kV1sC42yA7R29k2/FFDW c2w9t3imCGrZMHtNcX6drE0+ODhbBRSH0+vEbRtINFUpryzoqy6oRuTJ9Iw8qrAUh968kVX7+rT AHfjnIve+TyEIdyJLTkd2sO9Ov8v5Wzgd0U/BOhY7x X-Received: by 2002:a05:6a00:a10:b0:82c:e9cc:f62f with SMTP id d2e1a72fcca58-834fdb07d83mr765930b3a.7.1777507578755; Wed, 29 Apr 2026 17:06:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 22/40] fpu: Return struct from parts{64, 128}_pick_nan_muladd Date: Thu, 30 Apr 2026 10:05:05 +1000 Message-ID: <20260430000524.56046-23-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42e; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42e.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: 1777507855467158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- fpu/softfloat-parts.c.inc | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 7d4b40022b..211ecdf114 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -114,13 +114,15 @@ FloatPartsN partsN(pick_nan)(const FloatPartsN *a, co= nst FloatPartsN *b, return *ret; } =20 -static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN *a, FloatPartsN *b, - FloatPartsN *c, float_status *= s, - int ab_mask, int abc_mask) +static FloatPartsN partsN(pick_nan_muladd)(const FloatPartsN *a, + const FloatPartsN *b, + const FloatPartsN *c, + float_status *s, + int ab_mask, int abc_mask) { bool infzero =3D (ab_mask =3D=3D float_cmask_infzero); bool have_snan =3D (abc_mask & float_cmask_snan); - FloatPartsN *ret; + const FloatPartsN *ret; =20 if (unlikely(have_snan)) { float_raise(float_flag_invalid | float_flag_invalid_snan, s); @@ -160,7 +162,7 @@ static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN= *a, FloatPartsN *b, } ret =3D c; } else { - FloatPartsN *val[R_3NAN_1ST_MASK + 1] =3D { a, b, c }; + const FloatPartsN *val[R_3NAN_1ST_MASK + 1] =3D { a, b, c }; Float3NaNPropRule rule =3D s->float_3nan_prop_rule; =20 assert(rule !=3D float_3nan_prop_none); @@ -179,13 +181,12 @@ static FloatPartsN *partsN(pick_nan_muladd)(FloatPart= sN *a, FloatPartsN *b, } =20 if (is_snan(ret->cls)) { - *ret =3D partsN(silence_nan)(ret, s); + return partsN(silence_nan)(ret, s); } - return ret; + return *ret; =20 default_nan: - *a =3D partsN(default_nan)(s); - return a; + return partsN(default_nan)(s); } =20 /* @@ -698,7 +699,8 @@ static FloatPartsN *partsN(muladd_scalbn)(FloatPartsN *= a, FloatPartsN *b, * off to the target-specific pick-a-NaN routine. */ if (unlikely(abc_mask & float_cmask_anynan)) { - return partsN(pick_nan_muladd)(a, b, c, s, ab_mask, abc_mask); + *a =3D partsN(pick_nan_muladd)(a, b, c, s, ab_mask, abc_mask); + return a; } =20 if (flags & float_muladd_negate_c) { --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507860; cv=none; d=zohomail.com; s=zohoarc; b=EbULI0kv83gUwCOBBJ0bdDALnP3HoNV5GnCOLHgVEUX4OQWrlNKRUe8dm15EvtWE8E7XNT/pUnQu/JEmDSHS71kVQXTh5+TVoSH6AXn0N8OA42P89n4DMnLht7WoC+qfoE9mGVpJ5gaowmR3coHBoDaso2VF+Rj/GiWD1rJwXj0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507860; 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=mb4L+qTw3Kb38d/DWLTFfTE67HLYWjknIpD/4FiKS+s=; b=RKd3jxBQNKiBi+k+DC4CPWKcknTMy9Ub3CeXklClZjVbcdqej5hC5kwow8jweyQwna/xmkHlZXYCDFzwIW/vIJuPynXk2KcJo8PWzGBZ3oWaJvrDAKuCtaDRbXJeKLDZIJ6zGAaOI6/+fc9XSJkc1ijzYS75CRu4tIHXbpz2sXw= 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 1777507860124565.4632453478281; Wed, 29 Apr 2026 17:11:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEvu-0000O1-Px; Wed, 29 Apr 2026 20:07:11 -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 1wIEvA-0007jg-FM for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:26 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEv8-0001rQ-Mr for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:24 -0400 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-82d0b68837aso184885b3a.2 for ; Wed, 29 Apr 2026 17:06:22 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507581; x=1778112381; 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=mb4L+qTw3Kb38d/DWLTFfTE67HLYWjknIpD/4FiKS+s=; b=EWVT3mH31MNU69NkuQFwgkQ29z0O8KKTyO/6UtFJsvK643mvDC+4ouOQDAIAcsp5er CeZAoNUQ20EfE17QRmdblgEt3M5oyDAuSAYJq3VhtD5ULFmFjrfwsKb9YsHN6KV2SURU sTVE5hj/P4SJWArrVAvRBlgze+aMgpazwJglPiKmAsNSJ7LJZ/jziCsjQCXYuVb20WkN PIV4BhCYOqXKQsNTVVQmgaCEIaYi3jUSVYOTRKhMGt5YlmtuBeNA1MrfGuEauntCwJXM exCX2K3aCL5X74ptYLoTfwDrhFPSnd9/WNxbWoMLZ3TCMizgZCTI+rK2njDdrz4CZ9Qi gNFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507581; x=1778112381; 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=mb4L+qTw3Kb38d/DWLTFfTE67HLYWjknIpD/4FiKS+s=; b=MRpifJ3S19xABy0r9YSGT4dWkFeNqt//05o5jI8lJyOV15q0NipRBrVmDh/GXc7DID YWqNef6JjphWXJUP4CcTi1yMCKFz8/x8g785cPfXV3xSzNOXHvbwPzXb5qNbp5ut4n2k /lz6hVvw4nijxetYngX/wFWcJSD91OvyfDQtNHkIgFhr23zlafQGfWQd69pwKUO4ZBOM zmKncpeffjot18GTJOxmAvmjxmjX3tMVuV7tAypjW5OfSUooc8sFFERdhl4f5rgJs7gn ye+1sGAhTYLqRdYxUXKO6ulMMaPmJBL6kWnJMpsQeUf4KOqyyQ3cb77B0DEcN2wu5MXD GFUA== X-Gm-Message-State: AOJu0YxOcA6SZU8CSlSDts6y2tsImw3HGb+yUPB5pHBsznUiwPRl6Ao3 Ab0jh0f/BKhqo1rNTlvjyke+vhlkHd/axTRrcCVcOYVDy+u5Gy0b95SOQRg9i26ws4WmNnFFGhr MvKvhvQs= X-Gm-Gg: AeBDieviizhkR16zDojFm2Z/ROX7ZixS1HYG+7P78AL5DXv6F2uu1zIjXZ+ZgMSnwMu Ti25mn999uO5oO8sOQnHwUX9i055ucOzQswb7LUAb1yNFzIvj9QxfSY+1+UIMYe4YI8MjnYN/a0 TAnw2QkUSq95XVtvzWC80qyOJZ5xofK5Qv2sPRO8nx3+EwhwpdAbTPnKpS2CeD1GexOa5SQJ/HW Yj5JGwLTwhXfkxYa/pfpPix8oxbeuFG7sGRPyLWCX73XIAqZ5f5wVdaBqC5wKkau7/pfXe7HqZP o7UJ9MD60XEpG4ctg0x3r75oVuJH1TRh4oKlVjfYtBZKZ98yjj3bQSnakXrwYRR8BRScFNGL0pN Isqhepz6yxQm/pNn2wTgEK5Iqt+nO92+En9NzW177V6yUEv5iLXvLFEx/5owf6Ra47CfkbrWWdP TfhPb6LujI1xV7iIoGMWwKdQ1gngQlJ0QXMFFD9hBRY2PYYNw72RE= X-Received: by 2002:a05:6a00:8704:b0:82f:38df:681c with SMTP id d2e1a72fcca58-834fdb07cd3mr590548b3a.6.1777507580955; Wed, 29 Apr 2026 17:06:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 23/40] fpu: Introduce record_denormals_used Date: Thu, 30 Apr 2026 10:05:06 +1000 Message-ID: <20260430000524.56046-24-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::431; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x431.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: 1777507861918154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- fpu/softfloat.c | 8 +++++++ fpu/softfloat-parts.c.inc | 49 +++++++++++---------------------------- 2 files changed, 22 insertions(+), 35 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 4efafbf05a..168181858f 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -442,6 +442,14 @@ static inline bool is_anynorm(FloatClass c) return float_cmask(c) & float_cmask_anynorm; } =20 +/* Record when denormals have been used. */ +static void record_denormals_used(int mask, float_status *s) +{ + if (unlikely(mask & float_cmask_denormal)) { + float_raise(float_flag_input_denormal_used, s); + } +} + /* FloatParts256 is entirely internal, for parts128_mul* */ typedef struct { FloatClass cls; diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 211ecdf114..028c2daa27 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -534,9 +534,8 @@ static FloatPartsN *partsN(addsub)(FloatPartsN *a, Floa= tPartsN *b, * For addition and subtraction, we will consume an * input denormal unless the other input is a NaN. */ - if ((ab_mask & (float_cmask_denormal | float_cmask_anynan)) =3D=3D - float_cmask_denormal) { - float_raise(float_flag_input_denormal_used, s); + if (!(ab_mask & float_cmask_anynan)) { + record_denormals_used(ab_mask, s); } =20 if (a->sign !=3D b_sign) { @@ -623,9 +622,7 @@ static FloatPartsN *partsN(mul)(FloatPartsN *a, FloatPa= rtsN *b, if (likely(cmask_is_only_normals(ab_mask))) { FloatPartsW tmp; =20 - if (ab_mask & float_cmask_denormal) { - float_raise(float_flag_input_denormal_used, s); - } + record_denormals_used(ab_mask, s); =20 fracN(mulw)(&tmp, a, b); fracN(truncjam)(a, &tmp); @@ -653,9 +650,7 @@ static FloatPartsN *partsN(mul)(FloatPartsN *a, FloatPa= rtsN *b, } =20 /* Multiply by 0 or Inf */ - if (ab_mask & float_cmask_denormal) { - float_raise(float_flag_input_denormal_used, s); - } + record_denormals_used(ab_mask, s); =20 if (ab_mask & float_cmask_inf) { a->cls =3D float_class_inf; @@ -784,9 +779,7 @@ static FloatPartsN *partsN(muladd_scalbn)(FloatPartsN *= a, FloatPartsN *b, * this matches the set of cases where we consumed a * denormal input. */ - if (abc_mask & float_cmask_denormal) { - float_raise(float_flag_input_denormal_used, s); - } + record_denormals_used(abc_mask, s); return a; =20 return_sub_zero: @@ -819,9 +812,7 @@ FloatPartsN partsN(div)(const FloatPartsN *a, const Flo= atPartsN *b, r.exp -=3D b->exp; =20 if (likely(cmask_is_only_normals(ab_mask))) { - if (ab_mask & float_cmask_denormal) { - float_raise(float_flag_input_denormal_used, s); - } + record_denormals_used(ab_mask, s); r.exp -=3D fracN(div)(&r, b); return r; } @@ -841,8 +832,8 @@ FloatPartsN partsN(div)(const FloatPartsN *a, const Flo= atPartsN *b, return partsN(pick_nan)(a, b, s); } =20 - if ((ab_mask & float_cmask_denormal) && b->cls !=3D float_class_zero) { - float_raise(float_flag_input_denormal_used, s); + if (b->cls !=3D float_class_zero) { + record_denormals_used(ab_mask, s); } =20 /* Inf / X */ @@ -877,9 +868,7 @@ static FloatPartsN *partsN(modrem)(FloatPartsN *a, Floa= tPartsN *b, int ab_mask =3D float_cmask(a->cls) | float_cmask(b->cls); =20 if (likely(cmask_is_only_normals(ab_mask))) { - if (ab_mask & float_cmask_denormal) { - float_raise(float_flag_input_denormal_used, s); - } + record_denormals_used(ab_mask, s); fracN(modrem)(a, b, mod_quot); return a; } @@ -901,9 +890,7 @@ static FloatPartsN *partsN(modrem)(FloatPartsN *a, Floa= tPartsN *b, return a; } =20 - if (ab_mask & float_cmask_denormal) { - float_raise(float_flag_input_denormal_used, s); - } + record_denormals_used(ab_mask, s); =20 /* N % Inf; 0 % N */ g_assert(b->cls =3D=3D float_class_inf || a->cls =3D=3D float_class_ze= ro); @@ -1493,9 +1480,7 @@ static FloatPartsN *partsN(minmax)(FloatPartsN *a, Fl= oatPartsN *b, if ((flags & (minmax_isnum | minmax_isnumber)) && !(ab_mask & float_cmask_snan) && (ab_mask & ~float_cmask_qnan)) { - if (ab_mask & float_cmask_denormal) { - float_raise(float_flag_input_denormal_used, s); - } + record_denormals_used(ab_mask, s); return is_nan(a->cls) ? b : a; } =20 @@ -1521,9 +1506,7 @@ static FloatPartsN *partsN(minmax)(FloatPartsN *a, Fl= oatPartsN *b, return a; } =20 - if (ab_mask & float_cmask_denormal) { - float_raise(float_flag_input_denormal_used, s); - } + record_denormals_used(ab_mask, s); =20 a_exp =3D a->exp; b_exp =3D b->exp; @@ -1594,9 +1577,7 @@ static FloatRelation partsN(compare)(FloatPartsN *a, = FloatPartsN *b, if (likely(cmask_is_only_normals(ab_mask))) { FloatRelation cmp; =20 - if (ab_mask & float_cmask_denormal) { - float_raise(float_flag_input_denormal_used, s); - } + record_denormals_used(ab_mask, s); =20 if (a->sign !=3D b->sign) { goto a_sign; @@ -1623,9 +1604,7 @@ static FloatRelation partsN(compare)(FloatPartsN *a, = FloatPartsN *b, return float_relation_unordered; } =20 - if (ab_mask & float_cmask_denormal) { - float_raise(float_flag_input_denormal_used, s); - } + record_denormals_used(ab_mask, s); =20 if (ab_mask & float_cmask_zero) { if (ab_mask =3D=3D float_cmask_zero) { --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507746; cv=none; d=zohomail.com; s=zohoarc; b=ZUZfKl5rvtOAJarr3IVC3LcjBsL6xkW6qVPPqjo6G0sRH19NLVDA1un6dh8zpi8utXR/WTd9f7I1FKQFcc2QpuJbphRTUe2u1DaI7ThDWZi11VJN/CnIQzpWZRBMUHkzGyBCqceHSSgfJGpHDPd3uuIiRzsN4wb75Z6N+rXwGaw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507746; 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=mnphmMdh5qVs16ds/iO+k1UV8auN4hiLyk67HUUL8zk=; b=mtMEgFE19nFCvEUlbjQRS6wvzJpm5ONQ4BJ+9FxC4YSU7LFgSJHpgdk0mjOyiyC4iAmihOxi/4MC8K9BDTilqgHCKA8D/Bvg1/ofJvGUxWkcIrxILkT2RIYO7EdaU3jx95stQzygWEmqgTS6QD/ngnl7jpx8Qxr39w4XrhS0cLo= 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 1777507746565589.302489875143; Wed, 29 Apr 2026 17:09:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEvr-0008IV-5S; Wed, 29 Apr 2026 20:07:09 -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 1wIEvC-0007oh-V6 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:29 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvA-0001sS-L9 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:26 -0400 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-8296d553142so203866b3a.3 for ; Wed, 29 Apr 2026 17:06:24 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507583; x=1778112383; 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=mnphmMdh5qVs16ds/iO+k1UV8auN4hiLyk67HUUL8zk=; b=CZfFJgl1Q7LbA4TvIQOlLa3G36n3ItCDMGyfxyJm6a6sOr2uTtQC9EHVM8Fvu7eV2n 3La1DA+ayLZ6H3fppk4pTOtMrIl6f37/3FSD0sX+2P2SCp2Y8sFuHFsxxH0kSavc/k4x /qXtwZ0AqeDxCKyTHuJ3Z3gAjkP3zXlBlaFtBd5lGEQoVm3GyUW3NaxzIQLDa301H0yQ PR2d/yzz6SBMeI2IaMC1pTJPHj79d+CabeI94+oLxdnkK332B9xSOPajjYOHA29KAG40 c0LpbK94+ptaRgMsXmKuSVPSGbuNkSwGSWyYU2iuvks7jROWAoHUknHFooMi9kcPwmph l6+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507583; x=1778112383; 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=mnphmMdh5qVs16ds/iO+k1UV8auN4hiLyk67HUUL8zk=; b=jU0I5KCWe7Ta+ljUI5BdmWef5AAgPt/e5ZUFqjMuYBuhwBJLjDcFgi3ArEgNDSWNu9 toT05sQjl0ZDiQaqo8PCGpM1NExPZcQjJke93+LFc1JemX2z3gBPwKV0+VhvS+tEmqRy MF6PthA3A/sHqIFx13o13di622KcyPlL5h0shxNj6r1kff0SVVpz8YSKQ+JMUBxavS3d SmWRnmnC2EVBlzeZRFGhIS+RLx0Mok3GqdWfwBMh2t2FcT4hnx/ORK1fQk9vDw3DuKqq hy/EQ36cHyUo/Z1A3kQDnE7UjgNc2w8avVJuQjXDGotnwD6abH9svkKGsYXJu8GPmvdf Yptg== X-Gm-Message-State: AOJu0YyD4aif+kBwQ8yf8P/y+Fs/a+dVU5klA9cFE6qBiiTevG32YOis M2Gbq0kbwo64L5+KDxPmQGyyB/QWwr4X5F1xJAnb+wOzJHkLbYuCtwTos6U4C50q0IUjmkUGTCl JWXu/BB0= X-Gm-Gg: AeBDievfAa+co2MQcTppVm/WXe2e0EIG3CvhTI6dN4mT+L0qt2AycoXWhT7LjxTzAzy MkUiwrYJloybYRaIjsg1kh54gSb6pRktdhFpW01fKdyDpU8q+YF2rttpTxJb5ZFUdXktoyb6Fmm w+5vhVCwSKpFJuSqTA9w9Jbo5Yr1mjxqkwqUXt7JwT4B+pD8LG8uWz1e3GqWOC+5p0DScEZ3ZmL jR1YEzbg76yL2j3q9Ksv77sXrE2dDSBRpcq7ENIU8yO7cH2jiqeHP2v8sCluN9WTwFtsg3xg0p8 niKtz6NDXEuHbo1rGTYywDqHL8yzVEoAAmyd9gA1niy41L475AWFIaRh0xnX2JOyj7cJh28PHqV Mf1xW05lIpC40SyKW2BpsC3qSbNQbcbv5WqGdUUN6kPhKb6Vo+sKiZZhhxwYpJ69metpLDgMYAZ M9pkwE56qbsXR6wFM4L7uiZubX4kiO3s2EFmnfHrt4 X-Received: by 2002:a05:6a00:22cc:b0:829:8942:2c93 with SMTP id d2e1a72fcca58-834fdb58a49mr754278b3a.9.1777507583189; Wed, 29 Apr 2026 17:06:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 24/40] fpu: Split scalbn from partsN(muladd_scalbn) Date: Thu, 30 Apr 2026 10:05:07 +1000 Message-ID: <20260430000524.56046-25-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.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: 1777507747197158500 Content-Type: text/plain; charset="utf-8" Handle the scaling separately with parts64_scalbn. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- fpu/softfloat.c | 37 ++++++++++++++++++++++++------------- fpu/softfloat-parts.c.inc | 20 ++++++++++---------- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 168181858f..2e5c1d4a32 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1907,11 +1907,14 @@ 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_scalbn(&pa, &pb, &pc, scale, flags, status); + FloatParts64 *pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); =20 - /* Round before applying negate result. */ + /* Before rounding, scale. */ + if (scale) { + parts64_scalbn(pr, scale, status); + } 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; } @@ -1931,10 +1934,14 @@ 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_scalbn(&pa, &pb, &pc, scale, flags= , status); + FloatParts64 *pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); =20 - /* Round before applying negate result. */ + /* Before rounding, scale. */ + if (scale) { + parts64_scalbn(pr, scale, status); + } 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; } @@ -1948,10 +1955,14 @@ 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_scalbn(&pa, &pb, &pc, scale, flags= , status); + FloatParts64 *pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); =20 - /* Round before applying negate result. */ + /* Before rounding, scale. */ + if (scale) { + parts64_scalbn(pr, scale, status); + } 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; } @@ -2105,7 +2116,7 @@ float64 float64r32_muladd(float64 a, float64 b, float= 64 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_scalbn(&pa, &pb, &pc, 0, flags, st= atus); + FloatParts64 *pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); =20 /* Round before applying negate result. */ parts64_uncanon(pr, status, &float32_params, false); @@ -2121,7 +2132,7 @@ bfloat16 QEMU_FLATTEN bfloat16_muladd(bfloat16 a, bfl= oat16 b, bfloat16 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_scalbn(&pa, &pb, &pc, 0, flags, st= atus); + FloatParts64 *pr =3D parts64_muladd(&pa, &pb, &pc, flags, status); =20 /* Round before applying negate result. */ parts64_uncanon(pr, status, &bfloat16_params, false); @@ -2137,7 +2148,7 @@ float128 QEMU_FLATTEN float128_muladd(float128 a, flo= at128 b, float128 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_scalbn(&pa, &pb, &pc, 0, 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); @@ -5116,7 +5127,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_scalbn(&tp, &xnp, &rp, 0, 0, status); + rp =3D *parts64_muladd(&tp, &xnp, &rp, 0, status); xnp =3D *parts64_mul(&xnp, &xp, status); } =20 @@ -5195,8 +5206,8 @@ static void parts_s390_divide_to_integer(FloatParts64= *a, FloatParts64 *b, =20 /* Compute precise remainder */ r_precise_buf =3D *b; - r_precise =3D parts64_muladd_scalbn(&r_precise_buf, n, a, 0, - float_muladd_negate_product, sta= tus); + r_precise =3D parts64_muladd(&r_precise_buf, n, a, + float_muladd_negate_product, status); =20 /* Round remainder to the target format */ *r =3D *r_precise; diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 028c2daa27..b8baaf1e76 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -669,17 +669,19 @@ static FloatPartsN *partsN(mul)(FloatPartsN *a, Float= PartsN *b, * `b' then adding 'c', with no intermediate rounding step after the * multiplication. The operation is performed according to the * IEC/IEEE Standard for Binary Floating-Point Arithmetic 754-2008. - * The flags argument allows the caller to select negation of the - * addend, the intermediate product, or the final result. (The - * difference between this and having the caller do a separate - * negation is that negating externally will flip the sign bit on NaNs.) + * The flags argument allows the caller to select negation of the addend + * or the intermediate product. (The difference between this and having + * the caller do a separate negation is that negating externally will + * flip the sign bit on NaNs.) Note that float_muladd_negate_result + * is not applied here, and should be handled separately after rounding + * chooses the final sign of 0.0. * * Requires A and C extracted into a double-sized structure to provide the * extra space for the widening multiply. */ -static FloatPartsN *partsN(muladd_scalbn)(FloatPartsN *a, FloatPartsN *b, - FloatPartsN *c, int scale, - int flags, float_status *s) +static FloatPartsN *partsN(muladd)(FloatPartsN *a, FloatPartsN *b, + FloatPartsN *c, + int flags, float_status *s) { int ab_mask, abc_mask; FloatPartsW p_widen, c_widen; @@ -725,7 +727,7 @@ static FloatPartsN *partsN(muladd_scalbn)(FloatPartsN *= a, FloatPartsN *b, g_assert(ab_mask & float_cmask_zero); if (is_anynorm(c->cls)) { *a =3D *c; - goto return_normal; + goto finish_sign; } if (c->cls =3D=3D float_class_zero) { if (flags & float_muladd_suppress_add_product_zero) { @@ -770,8 +772,6 @@ static FloatPartsN *partsN(muladd_scalbn)(FloatPartsN *= a, FloatPartsN *b, a->sign =3D p_widen.sign; a->exp =3D p_widen.exp; =20 - return_normal: - a->exp +=3D scale; finish_sign: /* * All result types except for "return the default NaN --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507666; cv=none; d=zohomail.com; s=zohoarc; b=cKz6JkglPMHy/pI1JIUNFiQJymOG6O5DCwTUA9/AvZA/Ohr2Q1387mUmon1FA0Mi06oPWOdEjetZanBCoIT+X5jwmcNvw2d5vpogCwJE0v6rLSgtq1ZvQ/AmDyRAnli0HNH0yKvSkbWQHcPfpLkko4dIUu6jPd450uMfGpxQgF0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507666; 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=5ufTVgbdGLWNTrUsYza5RsHlQnemu/cr0uM1Uo8UApo=; b=VzPONoLOxO+EV9bEbMk5DdZIz1KFiBinxtPJEOEXlgKP9RHIe5XrkJ0mf8A1P7jnW/E/1nToDTJnMkk4GLYgySHFHqCKXNtvMejI0aMJvw7OEgql2OcoKmkVULaDD0ItSkZNAjBBcVdPMucIzxe0oCCGR9hyTpx8KjQI/3Seg34= 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 1777507666548858.4795483561018; Wed, 29 Apr 2026 17:07:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEwL-0001L4-Bn; Wed, 29 Apr 2026 20:07:37 -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 1wIEvE-0007sW-PW for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:30 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvC-0001sm-Sz for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:28 -0400 Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-82d0b68837aso184920b3a.2 for ; Wed, 29 Apr 2026 17:06:26 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507585; x=1778112385; 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=5ufTVgbdGLWNTrUsYza5RsHlQnemu/cr0uM1Uo8UApo=; b=gRVLtQQOnuFa+vH+rU1Z3/FHa9tk0ObLSznN59xHEPCrA/vRPrvyLR14de9akv2+B3 FVz3p817k9gGZH7B2cqd/sQjjYDzQme0DHyhWwtMLbj7s5DCReX2LHf2XdyFqCdQf0fo UP06eT+4W0nQPkqS9l2sUpvxpHseT8T9DIsFGCZuR0BaXSZSupwxQH+GjThAjEWvqw8D nIpNiOW2gCHCYY+0KqJ0X7MgH8KN9yHaUsCerj7FPt9cRvpbf0VEojP45lypqGSalScT 4iIkGngZDnCgBs6Phj/TZwtZPX5pakIH9yWZ212mjXyrHdowFT+0Xo0zhRnzuEf/s4FG IXog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507585; x=1778112385; 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=5ufTVgbdGLWNTrUsYza5RsHlQnemu/cr0uM1Uo8UApo=; b=TIXEIUpwLtZ24HS2aDVJ9DEBB39CqzFXfM4oQB5fTU822Xu9JHsm4KUMuynckKAFn/ HvJKM5MW80BMwL9a2sItq9H5oUKc6ei9k/OcvMbnm/gbqByzCKx0yflOdkVUKDqD8SMa C8llxR9K/b+LD3O8OR+NMk57bKAACBzZ/GhHc6d5C+6E0u4inIXXMZldp2EuVfADB2SV YURakZVBkB5GXjNQgajIi+N9PMzu7UsZa2/kaWoa3i21omktqVEA5rWwM1cvzNkkUi47 /XANX5PnkNjqgwqtVM4ctEeJp1xU1Kwq6jLyDLNCxzXHsHOXbGIbe5HjjMWfi/0yw+gS Y/kw== X-Gm-Message-State: AOJu0YwFkt+6cu4QAofQmh7cWiQoeD0aVJNz+spNWMiVWr6Cq54TcLCS cjw1xUtCvZ8QsOdsudXqO4PJtovMqLpZ01Eu9Dchfmd3Y3k1ll9r9vpywqNEEWGTaNLstW6qFuC J0AssqwU= X-Gm-Gg: AeBDietJ8pP4lxgW5r9xuaaB3BTNU2L5hyAWZLb8o1TcEmxCTCgb2y7VKK+sCFf3ZQH zn5BVGjCu6zj6ZR0NilO6PvB24tE/3lqRRDcA+LHNB3azHIxa7PZzDQYUZVJivj2DEg5ojh/0Q5 w8cer45B/RdiG8YK7l3H2MEJU6VKwXFctLjAXWB2cfNUGTU3N+COvYvnSGiVQRd62KLu5VgVdJH VGLzwBlwf+DqWJr+4/xSpR/UaqwpDt+CrU1pJronh+xutc4jnij+OOB68DUwbbRJDnYTyjbcIfN +hoONg1Yonb3PzHu29qwsiP6LsPEdjdAM1vUpteOFKC+Cme80LeuzSlQ1i6Gl68/4ip31vXGYhL 6D41RLON8k42DLuCcGxkZu4UcVSUqMD0PhSmx3Go/8zZIHTSS3vUu6dhPTUJOEj5MMHI50XCTA2 NIFgYt0l8K714N3GMNUjaFMjOtXeixB3FFvxyffRHl X-Received: by 2002:a05:6a00:2998:b0:82c:9897:70ef with SMTP id d2e1a72fcca58-834fdbd1668mr776079b3a.27.1777507585421; Wed, 29 Apr 2026 17:06:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 25/40] fpu: Reorganize partsN(muladd) Date: Thu, 30 Apr 2026 10:05:08 +1000 Message-ID: <20260430000524.56046-26-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42a; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42a.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: 1777507669200154100 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 --- fpu/softfloat-parts.c.inc | 155 +++++++++++++++++--------------------- 1 file changed, 70 insertions(+), 85 deletions(-) diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index b8baaf1e76..77465cce6e 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -683,11 +683,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) @@ -700,97 +736,46 @@ 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 case is zero product. */ + assert(ab_mask & float_cmask_zero); + + /* + * 0 + C =3D=3D C, + * except for 0 - 0, which needs special rounding, + * except for when we want to suppress this addition step. + */ + if (!(c_mask & float_cmask_zero) + || p_sign =3D=3D c_sign + || (flags & float_muladd_suppress_add_product_zero)) { + c->sign =3D c_sign; + return c; + } =20 return_sub_zero: + /* 0 - 0 =3D=3D -0 for round_down, +0 otherwise. */ a->sign =3D s->float_rounding_mode =3D=3D float_round_down; - return_zero: a->cls =3D float_class_zero; - goto finish_sign; - - return_inf: - a->cls =3D float_class_inf; - goto finish_sign; + return a; =20 d_nan: *a =3D partsN(default_nan)(s); --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507855; cv=none; d=zohomail.com; s=zohoarc; b=APKTFTF97v83gBj+8oMsdPBcW+cNRX07WPCNEzxXhrY1cKLlKIdksWImYHMartS5nO6OhTKe1Gq1ae76uyGfekrmhQCOD7BcJPrABRlL/kYkcddYX8odsUk6TfEgYhrwVYrwkJch9opYpe8Kc8ETjE/3ZVr1yqGpGjrxREhyZnQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507855; 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=mNDIhlO9nhuth4ctMfH9eQZWxAx0O3cnvYUznoxWv0s=; b=DtJQ1+Sg3uyngXow0GpEVuV8u6vg6Jal+zVsV/leKTVJlHUFn6wVtdDkE7rluXz3yVS6GabPPNplfVRQgBTmXcwjaTauEm/uErXfGvo1p5VyQMCSibJZ4UIUoM8PDwpiRUxDyJV/xxB5Z47ZUoYNNleLlfdB+FQQ0gh+2s11734= 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 1777507855813634.3944359843422; Wed, 29 Apr 2026 17:10:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEwM-0001T3-Ov; Wed, 29 Apr 2026 20:07: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 1wIEvI-0007zr-71 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:39 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvF-0001t2-QS for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:31 -0400 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-82fbdd60b64so249425b3a.3 for ; Wed, 29 Apr 2026 17:06:28 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507588; x=1778112388; 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=mNDIhlO9nhuth4ctMfH9eQZWxAx0O3cnvYUznoxWv0s=; b=NH7gTYapvSgqWNGM3dMaf5hYyK9V1nToFzQHCGFAUho33V9rFR4p3hYUUKHyrPm/Fj PNpIlZUqpIKmOzK5wt9FJj5qMYpKDnJ8wzG1mHIs2bNQZEeT50PR1iPc7hKurlaSdzeL 2Bh8XLKb5rkgirC1nDmCMsaATSkIl8l4gHnVUgQzxPqAqNLJGu0pER2bckCdlbpgxbW8 ZQJ7/QVSmEb4lMlGD7eAzXxiGauHaDWGMNEkktd1vr58Rfl4q0xkLAOlwYLbzdusLq3L SMgulEmfdTsgh1svmMBZMDH/ZvuLSEH2T0q+NCM28GcgRKMYqIOtNgEoTkemepLNIZLG FXCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507588; x=1778112388; 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=mNDIhlO9nhuth4ctMfH9eQZWxAx0O3cnvYUznoxWv0s=; b=l958GM9kqcnZBEQzYQcyR58zvLi0P2eJcRoeLZBCgNq2JQ9BzO2BnbpLkxVSMDPkLN ilb/oF/nt9TriVtkbHC3W4JPBlyncZVBhaWNO7ys6vw7XUSnNBVBwhxqb1q10S9JGKH7 b9wRFCz8T9bu0xlizeDSzuny/uJdbdKkA77Ym+9tro7xQni2OcESMYwM1Tq3xD4pxSfY wp5zv9t2d+JxETMotPnZ64D58ZBWi3+gASGPRQeWkj5RHoSsaV5Ppk+9rDOeX0FssZ2r K1WJeOLDyZHuu2rwL65aaRqhCuo9qPmPw8aDArysK7kxLDkghg/1zXPgfn/yVpS3r+/v STeA== X-Gm-Message-State: AOJu0Yy0fj2m56qBBP/lQ3R5wx0baBi9LzWrKNmlTQEasnRGNF60UnYI l37lcp1mRjO6JLFfF/Yzoe8As+HDp5rDd3oQnhKqSd+UAx9FBKm2K1FTi/Ou3I15K8juqnhkDxb mgoTxDQI= X-Gm-Gg: AeBDievGi9O/um3DLxRoQrEqdziy1S0Go2w8D18tl8e9Vdbe2lrfxEaD5g7l7oAL+M2 /Fnk88qf7eOBReEDhB6xjSUh8Uc3WsL/eVi9e7uYTwWuG68wUYrpkuHpo5ifeG3szdt5UNG9fzV L5kA3BX0fk9ArrSpkei8kHsw4xXzu/kiGQna07zu3LIDtbok0oRAKXwK+Kxsp80vM922Xgfj0vQ jcmnndi0fvuDWoDw4ajSwyCnoX1hSVSqs5QrbuwqK7/bFM9K/SUWkxjTstcKt3HUuZa09Sec2su eKvNaEj02ye9FhvQImz2WwAD99T+4dnXrUvJJshr4BtM+UFe6UMI4owW8rR+xuq2bWwHQYLVeLF yoUD0MJqRNM0dGlCKwiT3RRNZnzSc9uu/D/90M+WXHMvDL+hIvAxjGDetyzump/mQs3H5yoQnan CELrZMC6FPKP/bc8x0c5yk6SrozZA+g1yW3GYI+c1A X-Received: by 2002:a05:6a00:1889:b0:82f:5f2c:dc1e with SMTP id d2e1a72fcca58-834fdbabe64mr863296b3a.30.1777507587776; Wed, 29 Apr 2026 17:06:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 26/40] fpu: Return struct from parts{64,128}_muladd Date: Thu, 30 Apr 2026 10:05:09 +1000 Message-ID: <20260430000524.56046-27-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.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: 1777507857799154100 Content-Type: text/plain; charset="utf-8" At the same time, export. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- 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 1876264d43..d54bd6bf62 100644 --- a/include/fpu/softfloat-parts.h +++ b/include/fpu/softfloat-parts.h @@ -187,6 +187,15 @@ FloatParts64 parts64_div(const FloatParts64 *a, const = FloatParts64 *b, FloatParts128 parts128_div(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 2e5c1d4a32..c5a27e562f 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1907,18 +1907,18 @@ 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) { - parts64_scalbn(pr, scale, status); + 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, @@ -1934,18 +1934,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) { - parts64_scalbn(pr, scale, status); + 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 @@ -1955,18 +1955,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) { - parts64_scalbn(pr, scale, status); + 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; @@ -2116,14 +2116,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 QEMU_FLATTEN bfloat16_muladd(bfloat16 a, bfloat16 b, bfloat16 c, @@ -2132,14 +2132,14 @@ bfloat16 QEMU_FLATTEN bfloat16_muladd(bfloat16 a, b= float16 b, bfloat16 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 QEMU_FLATTEN float128_muladd(float128 a, float128 b, float128 c, @@ -2148,14 +2148,14 @@ float128 QEMU_FLATTEN float128_muladd(float128 a, f= loat128 b, float128 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 /* @@ -5127,7 +5127,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 @@ -5176,7 +5176,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, status, fmt); =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 77465cce6e..09b79f8d44 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -679,9 +679,8 @@ static FloatPartsN *partsN(mul)(FloatPartsN *a, FloatPa= rtsN *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); @@ -719,10 +718,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 /* @@ -732,8 +734,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)) { @@ -750,9 +751,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 @@ -767,19 +766,20 @@ static FloatPartsN *partsN(muladd)(FloatPartsN *a, Fl= oatPartsN *b, if (!(c_mask & float_cmask_zero) || p_sign =3D=3D c_sign || (flags & float_muladd_suppress_add_product_zero)) { - c->sign =3D c_sign; - return c; + FloatPartsN r =3D *c; + r.sign =3D c_sign; + return r; } =20 return_sub_zero: /* 0 - 0 =3D=3D -0 for round_down, +0 otherwise. */ - a->sign =3D s->float_rounding_mode =3D=3D float_round_down; - a->cls =3D float_class_zero; - return a; + return (FloatPartsN){ + .sign =3D s->float_rounding_mode =3D=3D float_round_down, + .cls =3D float_class_zero + }; =20 d_nan: - *a =3D partsN(default_nan)(s); - return a; + return partsN(default_nan)(s); } =20 /* --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507734; cv=none; d=zohomail.com; s=zohoarc; b=nfH3yu9CcBUu+Xb3kgGd8gcQV2zA0AxgiTAVsd3zNrky5E1320oeKwLgV6xPo6x7jt+a6ZnaPH3Wdvh4bPLW0TaR9iTeb3fZiiKCi+mzVRykRSlPeMHXXt33bgJRAw63rqcGB1umt9ZyleifTInCmU2/+hIOAHjP3fS4bthcigQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507734; 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=0UzcxTTvEsTE79pjxq8kUABoPISr81drtrWFClL7oT0=; b=ndm1PUkc41FnDQZ+/axkq/jZMriLai52WoTLnmGd3Z2zKWt/Phdrxvf6SoqSo/WEi+K6ClBGHn96xegN6Uz+JgVT0Bd21cTPB3eZxLcVrULdJynEqM9wTP7XC5CgXy7PMoVLxoSEUNgJFyhtb+m+8jj7SZBFmIxproT3drpGs6o= 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 1777507734314552.1447848183033; Wed, 29 Apr 2026 17:08:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEwQ-000242-Gk; Wed, 29 Apr 2026 20:07: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 1wIEvJ-000808-Hf for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:39 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvH-0001uA-JI for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:33 -0400 Received: by mail-pg1-x529.google.com with SMTP id 41be03b00d2f7-b6ce6d1d3dcso98005a12.3 for ; Wed, 29 Apr 2026 17:06:31 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507590; x=1778112390; 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=0UzcxTTvEsTE79pjxq8kUABoPISr81drtrWFClL7oT0=; b=mWtFQ+INa7GD62s2jjCkKCnTiEzekgCND1TIM6PoccVoxyyBXvC3fnJdW3lsfH98ng vnwDKe0CzEoqcKaXdzaSWDV+puOVB16OKCSS2vPimR0iZxmsDwQxbuztc0S4pepFyL0c E1siWwaWwylc0279wsnyIEpPa4BVGpeX4B1Mjziw0wjoInLRZ/YqUwaYxtEY1hglBkLR 6fXlQ3nkTtFTJnVEdKslDWeOT558gdjWFtGS36UmkWJB0Hb41wRB+BHOq5v8efbBhdOp vcEoo1iWsr1oIcApnZn192dkP622LhFIzMcYIHEZ4e3aN9MiMe2iJoleal6rTLiMt2S+ zeoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507590; x=1778112390; 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=0UzcxTTvEsTE79pjxq8kUABoPISr81drtrWFClL7oT0=; b=E6YwN5wJBh8VZGkJa/kcvOK9tHo+0QJWGTnTXl4Rt+AgKpnBtvmsPpP8RZEQ977KMY BB2+cgV30kVSsBOT1bcCoqcKku6HSCeTzl0Tsf+LpkYKjnRQJ1whwbZeC0Zx+aYE6aoE QwNMyZhsopf07yaBb/xEg19VtUmB7GV8dYTjLyW5aHmm34Ryh9QtZ3m6xtrtNZjxYCVX 2tdlMwpO11h5mFoJNynaa/v2g/YIG6Cwsn84TjLYN8aitQs2uOZmHkz1cmrpGoabdfGH xM4W19XQ8oxi4s3yAGGBf9mOAI51yVxp1IYbe2vQxKsJrrtK7Xi1hO34YkmWNlXZHWr+ 1cig== X-Gm-Message-State: AOJu0Yw+ayxSv/0JIAHpxV28yA4Ey/OXOfdc5wQYGq3VcdFHiwYgXsdo 5pOpnWNXBOskHEpUuNEKHWgIL9g1vgj+a40rzhJsAcjPGkmsQeMRiqJ9iMaum3GtLwV8tlDhCG7 C3rewetw= X-Gm-Gg: AeBDiesLWwg6hE4IEL+YlsHV2pJSs5FEcVBVpb5mKFDwowaZ+C8kDuv19ZjDn7wErZI yqYDv8bQb9Ne0MklDyY3QnWAypql+9HKxGTGCqAyHzuIt3e9j/wBRCucOcDdKfevLkfyn8ZCnxx ELmL8fr9Tun9vSzUBU0nsDyqh45sdN+VQMxoFStRKcEjTo/WDftCAjL8OS0ECTNkZ51/q3NH8wa KeqtqsM3qLElbGwnNOcuyk65sEhlNPkTLPDSsuB0bFPvK76G1cMFiCuN5SLyKGmfGhUwlwacmxU 6LXZnEHmi4OaCToAAE000Pmn/EeA5Em919p0AUpHFtHcW6S6NqHoKrv40lDNfoCxb2xtyN355yi gJYyKNGgrAx1qG8jCtUIAiispTdo6OxCPwgpVqayRlF25G8Uobgyp0iZdCQnX2HyCuHrIAxm78w 1qvXUKUOLu80JfewI6ot46s8WULQi6VE0fKVo7dpR4 X-Received: by 2002:a05:6a00:23ca:b0:827:433c:ba7e with SMTP id d2e1a72fcca58-834fdd4198emr685585b3a.41.1777507590035; Wed, 29 Apr 2026 17:06:30 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 27/40] fpu: Drop QEMU_FLATTEN from muladd routines Date: Thu, 30 Apr 2026 10:05:10 +1000 Message-ID: <20260430000524.56046-28-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1777507734978158500 Content-Type: text/plain; charset="utf-8" The float16, bfloat16 and float128 paths are not so important that they require forced optimization. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- fpu/softfloat.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index c5a27e562f..c2450bc078 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1900,9 +1900,8 @@ floatx80_mul(floatx80 a, floatx80 b, float_status *st= atus) * Fused multiply-add */ =20 -float16 QEMU_FLATTEN -float16_muladd_scalbn(float16 a, float16 b, float16 c, - int scale, int flags, float_status *status) +float16 float16_muladd_scalbn(float16 a, float16 b, float16 c, + int scale, int flags, float_status *status) { FloatParts64 pa =3D float16_unpack_canonical(a, status); FloatParts64 pb =3D float16_unpack_canonical(b, status); @@ -2126,8 +2125,8 @@ float64 float64r32_muladd(float64 a, float64 b, float= 64 c, return float64r32_pack_raw(&pr); } =20 -bfloat16 QEMU_FLATTEN bfloat16_muladd(bfloat16 a, bfloat16 b, bfloat16 c, - int flags, float_status *status) +bfloat16 bfloat16_muladd(bfloat16 a, bfloat16 b, bfloat16 c, + int flags, float_status *status) { FloatParts64 pa =3D bfloat16_unpack_canonical(a, status); FloatParts64 pb =3D bfloat16_unpack_canonical(b, status); @@ -2142,8 +2141,8 @@ bfloat16 QEMU_FLATTEN bfloat16_muladd(bfloat16 a, bfl= oat16 b, bfloat16 c, return pack_raw64(&pr, &bfloat16_params); } =20 -float128 QEMU_FLATTEN float128_muladd(float128 a, float128 b, float128 c, - int flags, float_status *status) +float128 float128_muladd(float128 a, float128 b, float128 c, + int flags, float_status *status) { FloatParts128 pa =3D float128_unpack_canonical(a, status); FloatParts128 pb =3D float128_unpack_canonical(b, status); --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507732; cv=none; d=zohomail.com; s=zohoarc; b=bajQUgk7tD3MxsXvQAD+4443sgTmMhFKeMJ+Ren5cI+uXuA36qkLRQzcCDuLteMqV7zOygMC+5JoaDPzaXGGPu/HckyGId4E0ZYDYbCVstqM1O+dPHusFMiLlwORgxGdFtIWTbR53AFRPmK9nTxUS/FzzlsiWQjw+dvMoMnBcC0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507732; 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=XQsQmqBug60W5wQ+I0sYpzrEPejG7N9ci3MFuR9QX14=; b=kt5/2yzeIVswd0cYm8WLfFgon/adCUcQ5MbPOBvn9x5Vr7FFWDdsXMBsIM8nBqON/fvguF3bNKPNV1IavaG7ji1QA80g44DxAIW2Z5+8u49/HeoegQ0g4GD7dVtz1+0aoLFSY+Aer9TUvVgtNPEX8fK4uQixOTzGeFTvo7IBmdo= 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 1777507732890326.0338730418839; Wed, 29 Apr 2026 17:08:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEw0-0000iL-FC; Wed, 29 Apr 2026 20:07:23 -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 1wIEvN-00080P-4Y for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:39 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvK-0001vT-DN for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:35 -0400 Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-82f1f6103afso165005b3a.1 for ; Wed, 29 Apr 2026 17:06:33 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507592; x=1778112392; 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=XQsQmqBug60W5wQ+I0sYpzrEPejG7N9ci3MFuR9QX14=; b=FEZtyX37tqBuKGxLQFQgtW/8QiqVDzAklh5ywrUpfTNZsB5y1UWt/uIdi8zN5JY4tG Zonu2qjpTSUhfmj1UOCcxeb67Ozs7gI+pwD91KzknO3lQHM0XN2SHXla4i/KqHErK85y 2bRCsbpPQ35stsDsyCRJgU1GPgeDJkf6UVQNGEQDspC49/fyD64DTrJ/pAMQ36gC9Jpq TrZ6wVS/+aeUARbRwRFiEtY1wfvLLdPRHzII8m3g3Qoh3z/AsmfpwZf0Ck3VTcGsxnTQ sPJDOTgADdqXbo0V92kjA7s7mR1mpdcLLYAB1TGzdO5dds/l83bC7n+wicB/PUTCMCb7 HE4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507592; x=1778112392; 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=XQsQmqBug60W5wQ+I0sYpzrEPejG7N9ci3MFuR9QX14=; b=e8jLtzikP/hi1wlEHSAtyd5JgWJy3M4Gai4HY7nA70Nz4mKwM0dU/5FKfK8Xl+o0Zw ODCEn70MPbOiOf6Of79+7gdbxfB6jVwAh8HG3j40uxvPB8SLA5UbZTKIa670bPAh5GMW MF5HcWUcEinPpAVWOBEE4lhIPyBxv7Fq200zcFntCxuDhFbXf1QAhyc96y5VJ1aXpJ0f 4waB3kfktnm1qf0E0xqjnQ+GDkRCaZKmPast/fRTOFheUVS+0jlHoqAtyH7psnAHrsMM SpjEM2nykTD/1MEf9OyUtxozN0arN728CN3aqHIZLYHSnnjBWuSNb7wExgcbZf2L4lkl a+5g== X-Gm-Message-State: AOJu0Yz41OVH44tF+AnfOBlfnDEDEQUvosFo2X+UB9pYifM1M1naY6HN D/tSNxfp/1Y+oJLfjE2B/5XIoVnhrVpajX5snAtag/CMPhFFi/NdbQe0TrWvhH4JmQoWEfKk5co xZoppU4Q= X-Gm-Gg: AeBDietu38lNrZmbunDOOG4wMvVwmQShNonEFgJYYUme852LIoMZZgSDBxCqyW1bDZh 3Ah7D4c/nPgvsWgP7IjUlTfJSuvn7HlbQEFoMIoaQddTr67cKbhC794OC7bNjuWYll6agk9KnLE ldAMeHj5NqPOHhhUbzw5Ya4wOhxDKElibgUX7Mt2KtQE0X5HGETDyDEd8KA/uogrsCowwKyBJsL tdl7EPGynVD2BCfZlAYi67paBfEb+Gbqhix7NEcP9SrU+f7l1Q70y/ShyMEq1Vg2vd3hx30Xoy5 kLbVD7spt9eP+v7YbfF/XChg7kJnP+El0jTTkKD6Wgx2TZmn3uZdlir2DNHPiBIHWZXsXsInamb /27rfaBzzbA83dcDMFhQQE61ZZ+euBZlUmdW9CzOYRuYYoP0d7jOHSwIsG94r65uceM2al36EQf qpfso7fHuoVu9z6tCRxV8J6cyqqNO/mmiOrJEHfO0L X-Received: by 2002:a05:6a00:3026:b0:82f:401f:2db7 with SMTP id d2e1a72fcca58-834fdb03ba1mr763131b3a.9.1777507592382; Wed, 29 Apr 2026 17:06:32 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 28/40] fpu: Export parts{64,128}_compare Date: Thu, 30 Apr 2026 10:05:11 +1000 Message-ID: <20260430000524.56046-29-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42f; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42f.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: 1777507734989158500 At the same time, constify the inputs. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/fpu/softfloat-parts.h | 5 +++++ fpu/softfloat-parts.c.inc | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/include/fpu/softfloat-parts.h b/include/fpu/softfloat-parts.h index d54bd6bf62..3183c158eb 100644 --- a/include/fpu/softfloat-parts.h +++ b/include/fpu/softfloat-parts.h @@ -182,6 +182,11 @@ FloatParts128 parts128_return_nan(const FloatParts128 = *a, float_status *s); * Operations */ =20 +FloatRelation parts64_compare(const FloatParts64 *a, const FloatParts64 *b, + float_status *s, bool quiet); +FloatRelation parts128_compare(const FloatParts128 *a, const FloatParts128= *b, + float_status *s, bool quiet); + FloatParts64 parts64_div(const FloatParts64 *a, const FloatParts64 *b, float_status *s); FloatParts128 parts128_div(const FloatParts128 *a, const FloatParts128 *b, diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 09b79f8d44..dfc0a22d98 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -1554,8 +1554,8 @@ static FloatPartsN *partsN(minmax)(FloatPartsN *a, Fl= oatPartsN *b, /* * Floating point compare */ -static FloatRelation partsN(compare)(FloatPartsN *a, FloatPartsN *b, - float_status *s, bool is_quiet) +FloatRelation partsN(compare)(const FloatPartsN *a, const FloatPartsN *b, + float_status *s, bool is_quiet) { int ab_mask =3D float_cmask(a->cls) | float_cmask(b->cls); =20 --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507842; cv=none; d=zohomail.com; s=zohoarc; b=E5Rs85bOcZUteHR1bDqbbYTMR+O3iadWF/WW8hmdpg9BbpH0mXy61fOxdYJ6mZ0UAZ7CwbRF43XKgW6/LdWRfkYiBEruv96ruxTbyuEA6kBIeLkNDsdmkXQnvXzeX8G5VDUummQjwUlv3vmfNg3bsKN67yv3XfOFPhX6nKFUMVA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507842; 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=ueT7VE4SpknS7CF8wZVBytvmqQGc6ofvktTgtoi4goM=; b=Pj5t7FK3q1CzqhGvK4UobqUKQvlGZ/I/Ok7ERWRe1mfowEJOdODiELbeYS5W0cBMfbz6y5hc27dWI3OdyOMJXJnOEkcgAPEO6C1aT+cngxRMZb+cSgJrLg+U+kEIuczAITpvmQVROqdoZlhB4pexzPwjm48ReXaIsT2gT8e5wm4= 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 1777507842070727.7499687724724; Wed, 29 Apr 2026 17:10:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEwN-0001eV-AS; Wed, 29 Apr 2026 20:07: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 1wIEvP-00082g-9O for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:41 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvM-0001vl-T2 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:38 -0400 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-82f6b592fc7so143218b3a.3 for ; Wed, 29 Apr 2026 17:06:35 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507595; x=1778112395; 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=ueT7VE4SpknS7CF8wZVBytvmqQGc6ofvktTgtoi4goM=; b=mGdIo1Rcmg64nLVK+mi4IYmjbJo/WJJvoN3FJmL08pvSxghdO3IYLX+KOBrxauJlp8 AZJ6R7keTWYx/9cjCceC0F76+8B06OW4Z7yD+Sl9HSuMn+SKMrpdZXmVGNRN8e+oF+8P v+xkC7yj+hFpCKdY5/rcKkWovAlG5yXFtRRFuaNSQh/YcXMYKiYL7WnOQDXrLJDvB6ng C7qmcRiiMdpl08pgj/isAxWqTA9pmtDFMPgC7sXI6iA45+cYa2UdEVbEsE2jw8a4cL/F V1Gv8gunNd7qdgW7p7PN9f+nQMXDv6v+klYITwYavqwjNLf/p5Rc8mrf+vj/D46nYzbp FiYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507595; x=1778112395; 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=ueT7VE4SpknS7CF8wZVBytvmqQGc6ofvktTgtoi4goM=; b=f3DwfBIiPAiNTMkwTN7wIONFhpozr7SfbI9QriyDc8jJDY+6jZgcc1l+gHokLT9lyb g+vMkHQZ1Q/Wz5npGhD7AKllVDAP9nDy4zSCU9jBwy4U0jo+6KZiezwmFPwhPVgNdDBt QtjVDjxvJIw3TEq4JChsJ6V+x2F4PaI7fMcF3ud3u5gjosM2BvfgVbc+o4HG5wTzam3I 02nYfZJjYx1bqo1VILi87axtotVhcdo10nwPC+3UTSb6NysVJcz7R3oTOyEjYq5rRrmA 44CHVmnwgH1V8swAHCiCtMc7/Sn8oenH/GtMKoEJFZmpi7FY0MWC8oruSXf3YesLgt+w DuhA== X-Gm-Message-State: AOJu0YxKCN27il/t1qH+AMI39Q5unoB8rxlAIPwGaIW9zBboBVS1Hhr6 gHLCi7yzv4I7WMRDKfDn5mSh3+DeQh9LhoSzFMd3oyuopjfrVwREB4+q3tKNXGaZwdr6WNLPqyu TGAGW6uA= X-Gm-Gg: AeBDiesk5l/QAxtSw8sgPVSJxgCLtS29dGtiGmPpBYGkjOvhUi+kDB2WNEGYluLFzj6 BVT/cMTsKcImZWR2QDaEwwKt7UH35sSQo2OGwV2siNnJdAeIaXUAbPmglLZsMi7H/Q0Cmo7uRUP qE1twXuLGElFo/BTU0dtDKwmIBb0vMwAGCCFXlhTwh2TsoVhUsHH1Mqbs9I85++ivMIFCIpiImP pZBW7IdSs/YrOGAcp73VNIxIUHEZEHi/bpAwImxaEtlprjGbG925TFdNiDeqhB9QEIXxwPDKRZi u1+wCoV7KUf+IoLErgMmJrkuF6/5qBa0+CQTv+Zj5fWK0WKug3shBtFNG4By2gEHYotWatLX5Ku nPrI0rfj7tCmTimsMg+www+K7tdnEcF5ZhYdJqDY4NKp3BAlHcOqfYm7g52k1LLM4Pga5nNBJs+ GcI8ZQ+9LyhSTLqAcKOaqrj8RGioGGniEP8RCGYzbv X-Received: by 2002:a05:6a00:aa04:b0:824:3bd9:aac6 with SMTP id d2e1a72fcca58-834fdb5c84amr828252b3a.16.1777507594532; Wed, 29 Apr 2026 17:06:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 29/40] fpu: Return struct from parts{64,128}_mul Date: Thu, 30 Apr 2026 10:05:12 +1000 Message-ID: <20260430000524.56046-30-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::431; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x431.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: 1777507843521158501 Content-Type: text/plain; charset="utf-8" At the same time, export. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- include/fpu/softfloat-parts.h | 5 +++++ fpu/softfloat.c | 34 +++++++++++++++++----------------- fpu/softfloat-parts.c.inc | 35 ++++++++++++++++------------------- 3 files changed, 38 insertions(+), 36 deletions(-) diff --git a/include/fpu/softfloat-parts.h b/include/fpu/softfloat-parts.h index 3183c158eb..68884e8047 100644 --- a/include/fpu/softfloat-parts.h +++ b/include/fpu/softfloat-parts.h @@ -192,6 +192,11 @@ FloatParts64 parts64_div(const FloatParts64 *a, const = FloatParts64 *b, FloatParts128 parts128_div(const FloatParts128 *a, const FloatParts128 *b, float_status *s); =20 +FloatParts64 parts64_mul(const FloatParts64 *a, const FloatParts64 *b, + float_status *s); +FloatParts128 parts128_mul(const FloatParts128 *a, const FloatParts128 *b, + float_status *s); + FloatParts64 parts64_muladd(const FloatParts64 *a, const FloatParts64 *b, const FloatParts64 *c, diff --git a/fpu/softfloat.c b/fpu/softfloat.c index c2450bc078..34ef590856 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1804,9 +1804,9 @@ float16 QEMU_FLATTEN float16_mul(float16 a, float16 b= , float_status *status) { FloatParts64 pa =3D float16_unpack_canonical(a, status); FloatParts64 pb =3D float16_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_mul(&pa, &pb, status); + FloatParts64 pr =3D parts64_mul(&pa, &pb, status); =20 - return float16_round_pack_canonical(pr, status); + return float16_round_pack_canonical(&pr, status); } =20 static float32 QEMU_SOFTFLOAT_ATTR @@ -1814,9 +1814,9 @@ soft_f32_mul(float32 a, float32 b, float_status *stat= us) { FloatParts64 pa =3D float32_unpack_canonical(a, status); FloatParts64 pb =3D float32_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_mul(&pa, &pb, status); + FloatParts64 pr =3D parts64_mul(&pa, &pb, status); =20 - return float32_round_pack_canonical(pr, status); + return float32_round_pack_canonical(&pr, status); } =20 static float64 QEMU_SOFTFLOAT_ATTR @@ -1824,9 +1824,9 @@ soft_f64_mul(float64 a, float64 b, float_status *stat= us) { FloatParts64 pa =3D float64_unpack_canonical(a, status); FloatParts64 pb =3D float64_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_mul(&pa, &pb, status); + FloatParts64 pr =3D parts64_mul(&pa, &pb, status); =20 - return float64_round_pack_canonical(pr, status); + return float64_round_pack_canonical(&pr, status); } =20 static float hard_f32_mul(float a, float b) @@ -1857,9 +1857,9 @@ float64 float64r32_mul(float64 a, float64 b, float_st= atus *status) { FloatParts64 pa =3D float64_unpack_canonical(a, status); FloatParts64 pb =3D float64_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_mul(&pa, &pb, status); + FloatParts64 pr =3D parts64_mul(&pa, &pb, status); =20 - return float64r32_round_pack_canonical(pr, status); + return float64r32_round_pack_canonical(&pr, status); } =20 bfloat16 QEMU_FLATTEN @@ -1867,9 +1867,9 @@ bfloat16_mul(bfloat16 a, bfloat16 b, float_status *st= atus) { FloatParts64 pa =3D bfloat16_unpack_canonical(a, status); FloatParts64 pb =3D bfloat16_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_mul(&pa, &pb, status); + FloatParts64 pr =3D parts64_mul(&pa, &pb, status); =20 - return bfloat16_round_pack_canonical(pr, status); + return bfloat16_round_pack_canonical(&pr, status); } =20 float128 QEMU_FLATTEN @@ -1877,23 +1877,23 @@ float128_mul(float128 a, float128 b, float_status *= status) { FloatParts128 pa =3D float128_unpack_canonical(a, status); FloatParts128 pb =3D float128_unpack_canonical(b, status); - FloatParts128 *pr =3D parts128_mul(&pa, &pb, status); + FloatParts128 pr =3D parts128_mul(&pa, &pb, status); =20 - return float128_round_pack_canonical(pr, status); + return float128_round_pack_canonical(&pr, status); } =20 floatx80 QEMU_FLATTEN floatx80_mul(floatx80 a, floatx80 b, float_status *status) { - FloatParts128 pa, pb, *pr; + FloatParts128 pa, pb; =20 if (!floatx80_unpack_canonical(&pa, a, status) || !floatx80_unpack_canonical(&pb, b, status)) { return floatx80_default_nan(status); } =20 - pr =3D parts128_mul(&pa, &pb, status); - return floatx80_round_pack_canonical(pr, status); + pa =3D parts128_mul(&pa, &pb, status); + return floatx80_round_pack_canonical(&pa, status); } =20 /* @@ -5120,14 +5120,14 @@ float32 float32_exp2(float32 a, float_status *statu= s) float_raise(float_flag_inexact, status); =20 tp =3D float64_unpack_canonical(float64_ln2, status); - xp =3D *parts64_mul(&xp, &tp, status); + xp =3D parts64_mul(&xp, &tp, status); xnp =3D xp; =20 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); - xnp =3D *parts64_mul(&xnp, &xp, status); + xnp =3D parts64_mul(&xnp, &xp, status); } =20 return float32_round_pack_canonical(&rp, status); diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index dfc0a22d98..84aeae2866 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -613,55 +613,52 @@ static FloatPartsN *partsN(addsub)(FloatPartsN *a, Fl= oatPartsN *b, * `b'. The operation is performed according to the IEC/IEEE Standard * for Binary Floating-Point Arithmetic. */ -static FloatPartsN *partsN(mul)(FloatPartsN *a, FloatPartsN *b, - float_status *s) +FloatPartsN partsN(mul)(const FloatPartsN *a, const FloatPartsN *b, + float_status *s) { int ab_mask =3D float_cmask(a->cls) | float_cmask(b->cls); bool sign =3D a->sign ^ b->sign; =20 if (likely(cmask_is_only_normals(ab_mask))) { FloatPartsW tmp; + FloatPartsN r =3D { + .cls =3D float_class_normal, + .sign =3D sign, + .exp =3D a->exp + b->exp + 1, + }; =20 record_denormals_used(ab_mask, s); =20 fracN(mulw)(&tmp, a, b); - fracN(truncjam)(a, &tmp); + fracN(truncjam)(&r, &tmp); =20 - a->exp +=3D b->exp + 1; - if (!(a->frac_hi & DECOMPOSED_IMPLICIT_BIT)) { - fracN(add)(a, a, a); - a->exp -=3D 1; + if (!(r.frac_hi & DECOMPOSED_IMPLICIT_BIT)) { + fracN(add)(&r, &r, &r); + r.exp -=3D 1; } =20 - a->sign =3D sign; - return a; + return r; } =20 /* Inf * Zero =3D=3D NaN */ if (unlikely(ab_mask =3D=3D float_cmask_infzero)) { float_raise(float_flag_invalid | float_flag_invalid_imz, s); - *a =3D partsN(default_nan)(s); - return a; + return partsN(default_nan)(s); } =20 if (unlikely(ab_mask & float_cmask_anynan)) { - *a =3D partsN(pick_nan)(a, b, s); - return a; + return partsN(pick_nan)(a, b, s); } =20 /* Multiply by 0 or Inf */ record_denormals_used(ab_mask, s); =20 if (ab_mask & float_cmask_inf) { - a->cls =3D float_class_inf; - a->sign =3D sign; - return a; + return (FloatPartsN){ .cls =3D float_class_inf, .sign =3D sign }; } =20 g_assert(ab_mask & float_cmask_zero); - a->cls =3D float_class_zero; - a->sign =3D sign; - return a; + return (FloatPartsN){ .cls =3D float_class_zero, .sign =3D sign }; } =20 /* --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507855; cv=none; d=zohomail.com; s=zohoarc; b=dkP5aRnaRO+sfnRHV5hXh/gRp8ALyt8gVlNH7bgMNdp1x2IFITPxp018aZJmjaIM8TsKq7UOX/wU/b86C5TUVjHKsHgkLs4s0LXVuAl9uPyQZCKfp9TTrHMrHLp2UsvYUtEWPk1Q5YRoA/VOj9NaGc8XalJJ2XitXaG3/uhyDk0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507855; 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=fQkQKLK77Dv6DrQmjWfjyf9hVFUzji/KbysWx+6wnbM=; b=DYhnT/1sNUSd78n9aJxZhk3TIpmhGQA0Q30P8UeJn0H7rdVrf6bYaoGjqlLEbK1BlTpAiE2loCfmW+4JwpFrwJAlE3NXNPX6M4pYcVS5hr3YkLxdRAgaXCVV+91tacCBjXM6QDGotNLDesaJ2I45WE6pRk5kiPGao9nfh6zMy/8= 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 1777507855419793.4623457958216; Wed, 29 Apr 2026 17:10:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEvt-000089-KU; Wed, 29 Apr 2026 20:07:09 -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 1wIEvQ-00082v-IL for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:41 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvO-0001w2-6N for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:40 -0400 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-82fbf5d4dc2so266393b3a.1 for ; Wed, 29 Apr 2026 17:06:37 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507597; x=1778112397; 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=fQkQKLK77Dv6DrQmjWfjyf9hVFUzji/KbysWx+6wnbM=; b=U7KBFDGOLxm34Tl0Y/Br3aFOx3B4T2MUGU3y/WPwR9KtxZvg3hGtp3tMPHYJwDhMGG smi3/IGfaET73BDamxMuV8Sr6/lFevLN4UGeNndfQK/YiuT2ea6Tg1rsGZljvAPE02s/ 844h/VuWR8rX6WvPWPCYuP9zN/XunfVLnqz2uYe+kZQUfhSWTxd8nMntzSpIg1MchSMz JA1XHEEUy6U0Y0ORre/s2SgIw1QHRlo6ZsGAVNZYrqIgUYJiFcYR0SS3tLSmQwI3DE3M ozDMg/svwMhxaXuWrw5UgxfuQ5PVfEgzdoWVKz+fQ9o5eO6JxRv+92136YYpm5XDyb7i 8BYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507597; x=1778112397; 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=fQkQKLK77Dv6DrQmjWfjyf9hVFUzji/KbysWx+6wnbM=; b=XbIleRCt4ct49tDqDiNStOI51iueYJ1AtAuXzy7FSX4FTn3lMQZG7H4MbiRG/PIcrb QqiOhF/lwtKL/Z6CQ4fniLPX4Dw4Y8a3bKuFiS1JcefpzR5emW3MO7S9MknOsoYI+SIz Hc7S2fxManbe0r0wCzxwnRIQemKQAq9YhYgZbux9rzzcu2Jd3qGiU+cp4kZ+ynEt019n aVvdn9xbsWxTz/1XDPD3aWYxHrtsFpxne2n7UaHYFEU0e0y89f7jAAuJq/onNJ1FsZd5 umz8CdKrnqyM1zTgpq7jXjLKDzjz5MPlcVJ+3MKvsvUFizCBE9vXicBEefK82R8ipazs z19A== X-Gm-Message-State: AOJu0YzHu6r0QeIKReL5z5bhq6Uk3Hz43ddO1zQO3RySzx9miOtEq9/q Uc19o1wegGlkymMtadCxo9B6eS3jL/ivTpH3F8X6eT8EdslVYh00dUtFRjWM8+RHFOycADqW3Oa jN/CA8FY= X-Gm-Gg: AeBDietO+2mry+NvUcQvMJ987oRFKLpwlU9cPL5HZS2SVbPXY2AedCjtbE3hsxKUxSe rSJnmn2X3fvGARwcJab/ALpEsfNgt0KulwrB8FHwDy3vWgIcB8qDZJm8SzFNSdcwv6Pyaoxhhup 6qAixRw2LZAYcuBgslusSEDavmTAu7UaVVTY2yD5NMiWNLukDqmFcGGlYhX9+mGkbNy80sDawlK ukEuiAbPo6b2IzytX3DDrb7U0CQWt1aUlU7SIqN5luCmtJz/jhrth2v861O+IVgZQZMyQCO5Vwn hh5J9Il2+0bb/eunfN0G+HmiEyKICo6fanUV3lGt5Rjc/DJceZghyHzFo+kJZr34K6AFrCFszG2 aUY2lFeUb54mjTol7Y9A13IhtUwVr4yjFFNY94YVol49+uGlPaTr90B3QfCLcK/h3IH93T+UgwV qrtcYQ4oOxXV6fYf+dB6xXTgpV4So6G91XdKwcv1NJ X-Received: by 2002:a05:6a00:4503:b0:82f:7bec:2050 with SMTP id d2e1a72fcca58-834fdc3bd40mr928030b3a.39.1777507596806; Wed, 29 Apr 2026 17:06:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 30/40] fpu: Hoist nan check in partsN_addsub Date: Thu, 30 Apr 2026 10:05:13 +1000 Message-ID: <20260430000524.56046-31-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.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: 1777507857458158500 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Richard Henderson --- fpu/softfloat-parts.c.inc | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 84aeae2866..0a0f3a4f0b 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -530,13 +530,16 @@ static FloatPartsN *partsN(addsub)(FloatPartsN *a, Fl= oatPartsN *b, bool b_sign =3D b->sign ^ subtract; int ab_mask =3D float_cmask(a->cls) | float_cmask(b->cls); =20 + if (unlikely(ab_mask & float_cmask_anynan)) { + *a =3D partsN(pick_nan)(a, b, s); + return a; + } + /* * 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 if (a->sign !=3D b_sign) { /* Subtraction */ @@ -553,10 +556,6 @@ static FloatPartsN *partsN(addsub)(FloatPartsN *a, Flo= atPartsN *b, 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 */ @@ -582,10 +581,6 @@ static FloatPartsN *partsN(addsub)(FloatPartsN *a, Flo= atPartsN *b, 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; @@ -602,10 +597,6 @@ static FloatPartsN *partsN(addsub)(FloatPartsN *a, Flo= atPartsN *b, return_b: b->sign =3D b_sign; return b; - - p_nan: - *a =3D partsN(pick_nan)(a, b, s); - return a; } =20 /* --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507847; cv=none; d=zohomail.com; s=zohoarc; b=S+lUx1KLFz3079IL7YIvS4tGkOCAoUUEVZxohPGc+VpzuX6k6espYvEIiIcOqD4easewAx9GE4USr+8WRfGhHXVK66pzhtQ+5Yfd/M1/JA6tlCdCIkxAKGXMJI3m/KlY/5cUbEX61ouJ30jaL1R//3BczIXW+2iLI0SsRJE/vAQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507847; 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=IYaIvETmYwmLvRx29bF5UAT5U0QKjITqX87Oyko4Qyo=; b=d91RR3wAYlh4INeD2hYZonVfXahO4f6XnlmdpMcJLvJsqPeopywby30IIVKQ9CYYEiRrb8VMnT5ZPcsWLQKFn37Dm8kAoBrsONsGnXon7qKq9Ga2lw+j6T2kK0+iJ4RLPDJuE5lP/ArbJ5y7fbvmcXepnptkLIVVoHUMtMAW0C0= 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 1777507847099567.9323557850878; Wed, 29 Apr 2026 17:10:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEvu-0000HN-Ew; Wed, 29 Apr 2026 20:07:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wIEvU-0008AR-DV for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:52 -0400 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvR-0001wG-Fy for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:43 -0400 Received: by mail-pg1-x532.google.com with SMTP id 41be03b00d2f7-c795eacbeb0so104427a12.2 for ; Wed, 29 Apr 2026 17:06:40 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507599; x=1778112399; 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=IYaIvETmYwmLvRx29bF5UAT5U0QKjITqX87Oyko4Qyo=; b=weF3mYOLO3hsNQEknqhdtswWEr+cMkbz8Ffbu0BBGdFmZwQRN89MjnS1dQQY97LxTi rJVR75iYhZlAIg8prsEhZdDu815GXB1NA+gBQyX+lLsZR48ojg+mQqD97kCr9nOQLT54 239F7gPWCHOc8tPIpnU52JxxISnzGBbnVq5dAUF7c/9zWWd/7tDVW/6hBW2WJ4AaIaa8 +ygSfb8Xxzix5QiAn05elmZ1ZuL7kIaeLhmgL9Jmd4bnIqqjox47S6r3bpB98GNZbI5j UPPHfsvbzE4OTE8I0iQjY7twlKdbDmr/HTjxn5bLB5xrKdXqD6YxBGLr8OpLKcvktIoG KPSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507599; x=1778112399; 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=IYaIvETmYwmLvRx29bF5UAT5U0QKjITqX87Oyko4Qyo=; b=hT4dnzJcPcuIUnk2ibP6KexwDXwFHcdCvFr7HuireBmOIvVnAdVAPhr5r4WW8xh/2R qyJtGPKPT4GCCobVQKQ892xcm3rMcZILaAKpFzV822gduusisqbksmvBTixVw8cZiXLa 0T0m5IUIJl5FlIq5BYLuiM6YFoCqn1+JWsDH1L8X7ivFVRDZVRPsYm3EFDdbyduIKsxX ldC6a4BfLoYTD6bnGesKTT6OCs954HKZ3R++cSDndIe3i1NNOuCyUYqse0fOsrlBfT2+ +Ib0Tew6M4P+81ULFRCjpepdE1xlSRCVKu7Gy4Un2iy5/N0GEfrJ/lCbGjIcdQgPQlqI TSxw== X-Gm-Message-State: AOJu0Yzs6LggSgNOEoE0iUswar7DkIrTFcUBaO54feg7cxgdPh0FfNEM 1GGd/q7BFPrnHWQTplMvpBM5fjrsOHAtADGshJDKJnMFrdGCqMT6LVQRJTL701Mx1Gy57LlYtKm vJ3k9p9E= X-Gm-Gg: AeBDiesgFT5R+Wxw2dqzqAgBRA8bosycemwoCI4QulHMVIjrGc/dw803VGdW0K2h6nb zR2/sL2JuPF3Z7EBR89L22m3ElpRERHD+Dt11SVPgXTNy5Mm/0tLSm6oyHn3zqdy1QDrEasTo/c JN2MzEKWFNKEaPRwWu9B4jHJL1jM9rzUkGZA9dixlUsvEchQtAjoaLgzzgRORyw22S/TX84kRZm cG98U36EhVSaU3JEARaEIZPzQJ6fIllyle51JiHdUfZIWC+3tIDzqRhxqYqZ+WSBgreFQP1gxg9 Y80RYNCwRVdwU+zlNgw9TcD2hu/UetyiL1a2PyNsOdDsOpu7xV17WyT+nqhpvw5SyQZVQ80E4c6 ycIo3gFUnwKC0ECk4c0InMMSUCWFLpk5ahwdi8PpO3uwj7yxV0nnFeRSC14Z7OtJwaQxPbv8PJ7 g0FMZ5BSfgwvVM5BpOCoL1Rh13RLFxDchqq0cQftgG X-Received: by 2002:a05:6a00:2282:b0:82c:dc9c:e770 with SMTP id d2e1a72fcca58-834fdc57b67mr793882b3a.40.1777507598957; Wed, 29 Apr 2026 17:06:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 31/40] fpu: Return struct from parts{64,128}_addsub Date: Thu, 30 Apr 2026 10:05:14 +1000 Message-ID: <20260430000524.56046-32-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::532; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x532.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: 1777507849807154100 Content-Type: text/plain; charset="utf-8" At the same time, export. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- include/fpu/softfloat-parts.h | 5 ++++ fpu/softfloat.c | 30 +++++++++++------------ fpu/softfloat-parts.c.inc | 45 ++++++++++++++++++----------------- 3 files changed, 43 insertions(+), 37 deletions(-) diff --git a/include/fpu/softfloat-parts.h b/include/fpu/softfloat-parts.h index 68884e8047..a24678ea2b 100644 --- a/include/fpu/softfloat-parts.h +++ b/include/fpu/softfloat-parts.h @@ -182,6 +182,11 @@ FloatParts128 parts128_return_nan(const FloatParts128 = *a, float_status *s); * Operations */ =20 +FloatParts64 parts64_addsub(const FloatParts64 *a, const FloatParts64 *b, + float_status *s, bool subtract); +FloatParts128 parts128_addsub(const FloatParts128 *a, const FloatParts128 = *b, + float_status *s, bool subtract); + FloatRelation parts64_compare(const FloatParts64 *a, const FloatParts64 *b, float_status *s, bool quiet); FloatRelation parts128_compare(const FloatParts128 *a, const FloatParts128= *b, diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 34ef590856..cd03ace323 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -1582,9 +1582,9 @@ float16_addsub(float16 a, float16 b, float_status *st= atus, bool subtract) { FloatParts64 pa =3D float16_unpack_canonical(a, status); FloatParts64 pb =3D float16_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_addsub(&pa, &pb, status, subtract); + FloatParts64 pr =3D parts64_addsub(&pa, &pb, status, subtract); =20 - return float16_round_pack_canonical(pr, status); + return float16_round_pack_canonical(&pr, status); } =20 float16 float16_add(float16 a, float16 b, float_status *status) @@ -1602,9 +1602,9 @@ soft_f32_addsub(float32 a, float32 b, float_status *s= tatus, bool subtract) { FloatParts64 pa =3D float32_unpack_canonical(a, status); FloatParts64 pb =3D float32_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_addsub(&pa, &pb, status, subtract); + FloatParts64 pr =3D parts64_addsub(&pa, &pb, status, subtract); =20 - return float32_round_pack_canonical(pr, status); + return float32_round_pack_canonical(&pr, status); } =20 static float32 soft_f32_add(float32 a, float32 b, float_status *status) @@ -1622,9 +1622,9 @@ soft_f64_addsub(float64 a, float64 b, float_status *s= tatus, bool subtract) { FloatParts64 pa =3D float64_unpack_canonical(a, status); FloatParts64 pb =3D float64_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_addsub(&pa, &pb, status, subtract); + FloatParts64 pr =3D parts64_addsub(&pa, &pb, status, subtract); =20 - return float64_round_pack_canonical(pr, status); + return float64_round_pack_canonical(&pr, status); } =20 static float64 soft_f64_add(float64 a, float64 b, float_status *status) @@ -1717,9 +1717,9 @@ static float64 float64r32_addsub(float64 a, float64 b= , float_status *status, { FloatParts64 pa =3D float64_unpack_canonical(a, status); FloatParts64 pb =3D float64_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_addsub(&pa, &pb, status, subtract); + FloatParts64 pr =3D parts64_addsub(&pa, &pb, status, subtract); =20 - return float64r32_round_pack_canonical(pr, status); + return float64r32_round_pack_canonical(&pr, status); } =20 float64 float64r32_add(float64 a, float64 b, float_status *status) @@ -1737,9 +1737,9 @@ bfloat16_addsub(bfloat16 a, bfloat16 b, float_status = *status, bool subtract) { FloatParts64 pa =3D bfloat16_unpack_canonical(a, status); FloatParts64 pb =3D bfloat16_unpack_canonical(b, status); - FloatParts64 *pr =3D parts64_addsub(&pa, &pb, status, subtract); + FloatParts64 pr =3D parts64_addsub(&pa, &pb, status, subtract); =20 - return bfloat16_round_pack_canonical(pr, status); + return bfloat16_round_pack_canonical(&pr, status); } =20 bfloat16 bfloat16_add(bfloat16 a, bfloat16 b, float_status *status) @@ -1757,9 +1757,9 @@ float128_addsub(float128 a, float128 b, float_status = *status, bool subtract) { FloatParts128 pa =3D float128_unpack_canonical(a, status); FloatParts128 pb =3D float128_unpack_canonical(b, status); - FloatParts128 *pr =3D parts128_addsub(&pa, &pb, status, subtract); + FloatParts128 pr =3D parts128_addsub(&pa, &pb, status, subtract); =20 - return float128_round_pack_canonical(pr, status); + return float128_round_pack_canonical(&pr, status); } =20 float128 float128_add(float128 a, float128 b, float_status *status) @@ -1775,15 +1775,15 @@ float128 float128_sub(float128 a, float128 b, float= _status *status) static floatx80 QEMU_FLATTEN floatx80_addsub(floatx80 a, floatx80 b, float_status *status, bool subtrac= t) { - FloatParts128 pa, pb, *pr; + FloatParts128 pa, pb; =20 if (!floatx80_unpack_canonical(&pa, a, status) || !floatx80_unpack_canonical(&pb, b, status)) { return floatx80_default_nan(status); } =20 - pr =3D parts128_addsub(&pa, &pb, status, subtract); - return floatx80_round_pack_canonical(pr, status); + pa =3D parts128_addsub(&pa, &pb, status, subtract); + return floatx80_round_pack_canonical(&pa, status); } =20 floatx80 floatx80_add(floatx80 a, floatx80 b, float_status *status) diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 0a0f3a4f0b..6aba0e6b18 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -524,15 +524,14 @@ static void partsN(uncanon)(FloatPartsN *p, float_sta= tus *s, * according to the IEC/IEEE Standard for Binary Floating-Point * Arithmetic. */ -static FloatPartsN *partsN(addsub)(FloatPartsN *a, FloatPartsN *b, - float_status *s, bool subtract) +FloatPartsN partsN(addsub)(const FloatPartsN *a_orig, + const FloatPartsN *b_orig, + float_status *s, bool subtract) { - bool b_sign =3D b->sign ^ subtract; - int ab_mask =3D float_cmask(a->cls) | float_cmask(b->cls); + int ab_mask =3D float_cmask(a_orig->cls) | float_cmask(b_orig->cls); =20 if (unlikely(ab_mask & float_cmask_anynan)) { - *a =3D partsN(pick_nan)(a, b, s); - return a; + return partsN(pick_nan)(a_orig, b_orig, s); } =20 /* @@ -541,10 +540,15 @@ static FloatPartsN *partsN(addsub)(FloatPartsN *a, Fl= oatPartsN *b, */ record_denormals_used(ab_mask, s); =20 - if (a->sign !=3D b_sign) { + FloatPartsN a =3D *a_orig; + FloatPartsN b =3D *b_orig; + + b.sign ^=3D subtract; + + if (a.sign !=3D b.sign) { /* Subtraction */ if (likely(cmask_is_only_normals(ab_mask))) { - if (partsN(sub_normal)(a, b)) { + if (partsN(sub_normal)(&a, &b)) { return a; } /* Subtract was exact, fall through to set sign. */ @@ -552,28 +556,27 @@ static FloatPartsN *partsN(addsub)(FloatPartsN *a, Fl= oatPartsN *b, } =20 if (ab_mask =3D=3D float_cmask_zero) { - a->sign =3D s->float_rounding_mode =3D=3D float_round_down; + a.sign =3D s->float_rounding_mode =3D=3D float_round_down; return a; } =20 if (ab_mask & float_cmask_inf) { - if (a->cls !=3D float_class_inf) { + if (a.cls !=3D float_class_inf) { /* N - Inf */ - goto return_b; + return b; } - if (b->cls !=3D float_class_inf) { + if (b.cls !=3D float_class_inf) { /* Inf - N */ return a; } /* Inf - Inf */ float_raise(float_flag_invalid | float_flag_invalid_isi, s); - *a =3D partsN(default_nan)(s); - return a; + return partsN(default_nan)(s); } } else { /* Addition */ if (likely(cmask_is_only_normals(ab_mask))) { - partsN(add_normal)(a, b); + partsN(add_normal)(&a, &b); return a; } =20 @@ -582,20 +585,18 @@ static FloatPartsN *partsN(addsub)(FloatPartsN *a, Fl= oatPartsN *b, } =20 if (ab_mask & float_cmask_inf) { - a->cls =3D float_class_inf; + a.cls =3D float_class_inf; return a; } } =20 - if (b->cls =3D=3D float_class_zero) { - g_assert(is_anynorm(a->cls)); + if (b.cls =3D=3D float_class_zero) { + g_assert(is_anynorm(a.cls)); return a; } =20 - g_assert(a->cls =3D=3D float_class_zero); - g_assert(is_anynorm(b->cls)); - return_b: - b->sign =3D b_sign; + g_assert(a.cls =3D=3D float_class_zero); + g_assert(is_anynorm(b.cls)); return b; } =20 --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507775; cv=none; d=zohomail.com; s=zohoarc; b=ehTU7OSURV7rxU53GQXpsC4nNvg50C648JNsNOex1g0f1jpgG4te4X8p18aVBqYSWNMzjrLQxEFUIk22EQBha/3av6bLklE8vDWSH5ZOpzNbfLn3qNpSvVaBXyHkgtVGdxXncOe5diR5Plwplt4llwPaus85W+ZZOlCn5dKQz10= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507775; 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=XPbtG+sHNeaROUy0XR6V+HlIi8gkAhS1z8vmkBsYSvk=; b=XPB942sB7WdlYzPRqKTfHDWRXXz/Qmv2kMlnV9L+tCKLDY/2WE/ZMQPC2rzBDJo8iJjCaUxJAdMSCNANOVlhJYfN0Id5MSPTXaBO2VPjpZAl53a3eA9hYxLqooFVUGBAPkfHrNEmbd2JYY04J0HnNn+oBLLS4jLPKbb8niEBBkw= 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 1777507775880637.8308368524174; Wed, 29 Apr 2026 17:09:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEwO-0001nw-9C; Wed, 29 Apr 2026 20:07: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 1wIEvU-0008AS-EP for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:51 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvS-0001wf-Iz for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:43 -0400 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-82418b0178cso193265b3a.1 for ; Wed, 29 Apr 2026 17:06:42 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507601; x=1778112401; 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=XPbtG+sHNeaROUy0XR6V+HlIi8gkAhS1z8vmkBsYSvk=; b=E5dx5X5dQGpCB9H1o2RBO2a2AhJDeGVXNn0eHpSGraDtGRg8Yb3Pj6M4uKCKNXhr1y sO5TZMSoBGmzTHJbK1X/ET3mLipokUrrSyBEyzb2uzTSFstKyA4OQDQPu7Wy/EAU+x5M +xDq5lG0rRe4SZnugPDicTpoRC0CBvIxmbxzkVAtrg+LBT+VxlKXeAnHXsVR4Y3H7Nip 20eKd99baJlC3FWgi60FCdezsoq3+Hlag1GOLi5FS24Q0kwR1GZmQv+cS9WrPbc0L6+t A34vhuG48Wf8xmCs4LoN/rvxmc9RdBmMWYx7DQrGxxCPgrbysUdLoLI/OC35Yt9AFeHy pTkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507601; x=1778112401; 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=XPbtG+sHNeaROUy0XR6V+HlIi8gkAhS1z8vmkBsYSvk=; b=gs9nHT+GmzvIVPeANQ4amd8a/eK2NPef5WArj9hCsxy0X6NSQR9dGfk32z6YlcEqZE 3+8Sd1ZPCrVE9nOGHt97W4csosLowf7O/76dhRFs70/mLswhRwQ/ZDtbLPWQAwajtnFL QnQ0GUusRRIy2IZwN7cZEzmJN4y8zESK/JFpyxoE2urWVKPpMzTg/WZSvIeeHJ9JNu9/ RDz2QeVPKOXewYiE8MuTdPJMTCz988Uxq1K0TSbuGAomh08sDpT2vhnUSjhIbNmRqXoG ay4jsBEpfqajg6h7gQDXLbOHRl9My9SMcKIktwxn2gDNKHz8ZE2g7mSR/CQYd+94uyhc v87Q== X-Gm-Message-State: AOJu0YweGckjqLmbcXgYex2/g33iUf8HZoMX/9oLO0bQum9tWIP8j1UM TyzoloGM0CopxCJhr3oKEFzZjimFMrdwgOf12umr3UEK4WAYlc9rMQAcBaUmj5XK61Xy/xaBVSD 6snAF3FE= X-Gm-Gg: AeBDiesyVIIA+7kC/rvR6GjGn12Zcw+KbsMJCGEoe1ZDPYevgETQy6h9FZmdtw/vtuV tcqwJxlaYKgOge82zBuO5gCHQ/KeM96wimToJhur/Yf0ktk0MPt1y7AwoGfFOBqRQRBZius3Oej 9ODS/C6FvL/N7SSqxwuqSKQ6RUS2szDiKX8MPWXA18ff5hyq+P0wdIOF/rgOfvkOjlcMGxO5FLZ RE5oGKAiSNFuuTkv/wJW7xaziy3Y/Z083HJJ2thetbXvOJ5GXPy9MH55Dj2MCQBR8r+DUuwetj/ KGGh/XKsDFP/w30veO9ADAIFCofJ2PqJ748yn7p8ajvM0OseyEV4B35vF2IjLcnzHUrxO0bNYYJ zcSCV+rm/w/gXXjPkmVLK89mWO+SX/D7+rEPeG+Fu4yqzo4cPSxc7yhGqhfX5QWVlpfZ+0kIlAX CMqoeL6kvQJsKtKTI0krYK8JD1hrfCWRq6h2w/H8bf X-Received: by 2002:a05:6a00:4c9a:b0:82f:28da:ec7 with SMTP id d2e1a72fcca58-834fdc0ddd5mr744408b3a.27.1777507601276; Wed, 29 Apr 2026 17:06:41 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 32/40] fpu: Simplify 0 +/- N case in parts_addsub Date: Thu, 30 Apr 2026 10:05:15 +1000 Message-ID: <20260430000524.56046-33-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.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: 1777507777128158500 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 --- 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 6aba0e6b18..c380f30fae 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -556,6 +556,7 @@ FloatPartsN partsN(addsub)(const FloatPartsN *a_orig, } =20 if (ab_mask =3D=3D float_cmask_zero) { + /* 0 - 0 */ a.sign =3D s->float_rounding_mode =3D=3D float_round_down; return a; } @@ -581,23 +582,20 @@ FloatPartsN partsN(addsub)(const FloatPartsN *a_orig, } =20 if (ab_mask =3D=3D float_cmask_zero) { + /* 0 + 0 */ return a; } =20 if (ab_mask & float_cmask_inf) { + /* N + Inf or Inf + N */ a.cls =3D float_class_inf; return a; } } =20 - if (b.cls =3D=3D float_class_zero) { - g_assert(is_anynorm(a.cls)); - return a; - } - - g_assert(a.cls =3D=3D float_class_zero); - g_assert(is_anynorm(b.cls)); - return b; + /* 0 +/- N or N +/- 0 */ + assert((ab_mask & float_cmask_zero) && (ab_mask & float_cmask_anynorm)= ); + return b.cls =3D=3D float_class_zero ? a : b; } =20 /* --=20 2.43.0 From nobody Sat May 30 19:23:37 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 1777507760607734.1572284335001; Wed, 29 Apr 2026 17:09:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEwS-0002Io-Uo; Wed, 29 Apr 2026 20:07: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 1wIEvc-0008Ef-1l for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:57 -0400 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvV-0001xC-GK for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:50 -0400 Received: by mail-pg1-x535.google.com with SMTP id 41be03b00d2f7-c7971d0d97dso186351a12.1 for ; Wed, 29 Apr 2026 17:06:45 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507604; x=1778112404; 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=VNoSao8mxUI5+eIIapVT69aseUiKGoAeSCwJD9oh3j4=; b=PSkC2xpqFzWWQOdhwP9OiGR2D7KJXLAUaGwYgJe3qVrtYHAk1CrAqAu3ZIE9rVIe++ bX5GU55d0BSWB0hsTTP0Z+X9ZP73exlPMcUbKF5fkNl8V6Ac8BOlpXiffwnuoFuaNWvU esYGowa4oEhAei2pNNFKZOnHzDah97q4YRg1ha03SNyI3Da9CmM444bQ64xo0NUZxV89 HG9buf/aO8/UAtCEZAmqn9zqfQieoCoNmjk1BAL8dZPwF0sZF/zn/hWDxBad/muLSZcD krhPe+OqR0Jh+emYhcvVh4A46B7mAnRlClih4xV/saFeG9KMKElPqc2BHspwl5w+zz1l no3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507604; x=1778112404; 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=VNoSao8mxUI5+eIIapVT69aseUiKGoAeSCwJD9oh3j4=; b=LEyrG6UApjqd8p5MlSVWmaRRoK8b8uadbKv/YXIdINGGxfCDlD95/vi07E/AMyzR8O 7dmg6GivJtp8dv9leZPyFShfd0fy2Qo/edQHhX5WtSwlt55QJS+l+YjcKg+EtRnwLFB6 EOaX5yFaQUOqGjio+Os52oKfZEcrLTIgluDwz2xssDrjDjEHhU4OaICAwe0wgXwPJQ3u XaqixPvRc8c9uHrkLJeva4KYmsTke2ZcbrdzWFE57sOA6OY13wy00jQ02FC30Wy6kKV5 GDRXS/Fo/eRtexdoFAwRcw0qtlJW4nMjPBIu8jbJG2yFydpGyROqJJ5u1sndocgF3MzF I+9w== X-Gm-Message-State: AOJu0YwxoTrZEW7eLKAmm75Q+1Cp8a9NBBODPzz9Uu1GlkHM59+k/d+e nZNHGORrX8vZvSGIvfoU5DdqNBjztllrXaxzRQJLiNsKp/+kLaTCCPxS65Pv9cB7og/ERV4yQn5 Oa0Wf4RE= X-Gm-Gg: AeBDievTS4dkBzsvyooenkCfkn0+rWqr5x9UtMxcpV0SBf0aEtbuFHu/0ViNvI5Rp3N AZ0bf7f0CkbMf07WRT0NnBnoee7/XKS4iMv9UfzTer4tfv9+HTvet/ZY0iuOAHVJNlPfSR1D/3Y OsNcJIEIeKsl+lSKfm1jdnhL8KfGB9MQPpOjNqMo2d5xXwLyPaoJjTHWziTGkRdoMErghG77Bet r07KHhOB9b3n2YKlfwHcbmuU/M+eg1EZ3d5HMXn8+/JT+4lJYelo9H6E2LpylwoXyYvPlWoVnHJ dDjpjlLu+r2lhgjHOcqtZ3zVCXVs46r48DsC6TbMY4msExbob871WaHXn3YDiuHX40s4ooBIeHr j2LFdfdOhpNcu+2rXKHDEDIkMy/bLjkmGCpRoNnHVVe/P58JLvuXX6j228WKDPCU9fUJFg3cvpg obhpnaZXTz0FAjoyMhIHLvwybSkgrxLTNVXE+SQydM X-Received: by 2002:a05:6a00:94f3:b0:82a:805a:7e2 with SMTP id d2e1a72fcca58-834fdb07ac5mr827987b3a.9.1777507603906; Wed, 29 Apr 2026 17:06:43 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org, Ilya Leoshkevich Subject: [PATCH v2 33/40] target/s390x: Move float{32, 64}_s390_divide_to_integer Date: Thu, 30 Apr 2026 10:05:16 +1000 Message-ID: <20260430000524.56046-34-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::535; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x535.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: 1777507761225158500 Content-Type: text/plain; charset="utf-8" Now that we've exposed enough infrastructure, this can be implemented in the backend that needs it. Reviewed-by: Ilya Leoshkevich Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- 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 cd03ace323..6a14c5d639 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -5151,143 +5151,6 @@ floatx80 floatx80_round(floatx80 a, float_status *s= tatus) return floatx80_round_pack_canonical(&p, status); } =20 -static void parts_s390_divide_to_integer(FloatParts64 *a, FloatParts64 *b, - int final_quotient_rounding_mode, - bool mask_underflow, bool mask_in= exact, - const FloatFmt *fmt, - FloatParts64 *r, FloatParts64 *n, - uint32_t *cc, int *dxc, - float_status *status) -{ - /* POp table "Results: DIVIDE TO INTEGER (Part 1 of 2)" */ - if ((float_cmask(a->cls) | float_cmask(b->cls)) & float_cmask_anynan) { - *r =3D parts64_pick_nan(a, b, status); - *n =3D *r; - *cc =3D 1; - } else if (a->cls =3D=3D float_class_inf || b->cls =3D=3D float_class_= zero) { - *r =3D parts64_default_nan(status); - *n =3D *r; - *cc =3D 1; - status->float_exception_flags |=3D float_flag_invalid; - } else if (b->cls =3D=3D float_class_inf) { - *r =3D *a; - n->cls =3D float_class_zero; - n->sign =3D a->sign ^ b->sign; - *cc =3D 0; - } else { - FloatParts64 *q, q_buf, r_precise; - int float_exception_flags =3D 0; - bool is_q_smallish; - uint32_t r_flags; - - /* Compute precise quotient */ - q_buf =3D parts64_div(a, b, status); - q =3D &q_buf; - - /* - * Check whether two closest integers can be precisely represented, - * i.e., all their bits fit into the fractional part. - */ - is_q_smallish =3D q->exp < (fmt->frac_size + 1); - - /* - * Final quotient is rounded using final-quotient-rounding method,= and - * partial quotient is rounded toward zero. - * - * Rounding of partial quotient may be inexact. This is the whole = point - * of distinguishing partial quotients, so ignore the exception. - */ - *n =3D parts64_round_to_int(q, - is_q_smallish - ? final_quotient_rounding_mode - : float_round_to_zero, - 0, status, fmt); - - /* Compute precise remainder */ - r_precise =3D parts64_muladd(b, n, a, - float_muladd_negate_product, status); - - /* Round remainder to the target format */ - *r =3D r_precise; - status->float_exception_flags =3D 0; - *r =3D parts64_round_to_fmt(r, status, fmt); - r_flags =3D status->float_exception_flags; - - /* POp table "Results: DIVIDE TO INTEGER (Part 2 of 2)" */ - if (is_q_smallish) { - if (r->cls !=3D float_class_zero) { - if (r->exp < 2 - (1 << (fmt->exp_size - 1))) { - if (mask_underflow) { - float_exception_flags |=3D float_flag_underflow; - *dxc =3D 0x10; - r->exp +=3D fmt->exp_re_bias; - } - } else if (r_flags & float_flag_inexact) { - float_exception_flags |=3D float_flag_inexact; - if (mask_inexact) { - bool saved_r_sign, saved_r_precise_sign; - - /* - * Check whether remainder was truncated (rounded - * toward zero) or incremented. - */ - saved_r_sign =3D r->sign; - saved_r_precise_sign =3D r_precise.sign; - r->sign =3D false; - r_precise.sign =3D false; - if (parts64_compare(r, &r_precise, status, true) < - float_relation_equal) { - *dxc =3D 0x8; - } else { - *dxc =3D 0xc; - } - r->sign =3D saved_r_sign; - r_precise.sign =3D saved_r_precise_sign; - } - } - } - *cc =3D 0; - } else if (n->exp > (1 << (fmt->exp_size - 1)) - 1) { - n->exp -=3D fmt->exp_re_bias; - *cc =3D r->cls =3D=3D float_class_zero ? 1 : 3; - } else { - *cc =3D r->cls =3D=3D float_class_zero ? 0 : 2; - } - - /* Adjust signs of zero results */ - if (r->cls =3D=3D float_class_zero) { - r->sign =3D a->sign; - } - if (n->cls =3D=3D float_class_zero) { - n->sign =3D a->sign ^ b->sign; - } - - status->float_exception_flags =3D float_exception_flags; - } -} - -#define DEFINE_S390_DIVIDE_TO_INTEGER(floatN) = \ -void floatN ## _s390_divide_to_integer(floatN a, floatN b, = \ - int final_quotient_rounding_mode, = \ - bool mask_underflow, bool mask_inex= act, \ - floatN *r, floatN *n, = \ - uint32_t *cc, int *dxc, = \ - float_status *status) = \ -{ = \ - FloatParts64 pa =3D floatN ## _unpack_canonical(a, status); = \ - FloatParts64 pb =3D floatN ## _unpack_canonical(b, status); = \ - FloatParts64 pr, pn; = \ - parts_s390_divide_to_integer(&pa, &pb, final_quotient_rounding_mode, = \ - mask_underflow, mask_inexact, = \ - &floatN ## _params, = \ - &pr, &pn, cc, dxc, status); = \ - *r =3D floatN ## _round_pack_canonical(&pr, status); = \ - *n =3D floatN ## _round_pack_canonical(&pn, status); = \ -} - -DEFINE_S390_DIVIDE_TO_INTEGER(float32) -DEFINE_S390_DIVIDE_TO_INTEGER(float64) - static void __attribute__((constructor)) softfloat_init(void) { union_float64 ua, ub, uc, ur; diff --git a/target/s390x/tcg/fpu_helper.c b/target/s390x/tcg/fpu_helper.c index 122994960a..33e0f6100d 100644 --- a/target/s390x/tcg/fpu_helper.c +++ b/target/s390x/tcg/fpu_helper.c @@ -24,6 +24,7 @@ #include "tcg_s390x.h" #include "exec/helper-proto.h" #include "fpu/softfloat.h" +#include "fpu/softfloat-parts.h" =20 /* #define DEBUG_HELPER */ #ifdef DEBUG_HELPER @@ -315,6 +316,140 @@ Int128 HELPER(dxb)(CPUS390XState *env, Int128 a, Int1= 28 b) return RET128(ret); } =20 +static void parts_s390_divide_to_integer(FloatParts64 *a, FloatParts64 *b, + int final_quotient_rounding_mode, + bool mask_underflow, bool mask_in= exact, + const FloatFmt *fmt, + FloatParts64 *r, FloatParts64 *n, + uint32_t *cc, int *dxc, + float_status *status) +{ + /* POp table "Results: DIVIDE TO INTEGER (Part 1 of 2)" */ + if ((float_cmask(a->cls) | float_cmask(b->cls)) & float_cmask_anynan) { + *r =3D parts64_pick_nan(a, b, status); + *n =3D *r; + *cc =3D 1; + } else if (a->cls =3D=3D float_class_inf || b->cls =3D=3D float_class_= zero) { + *r =3D parts64_default_nan(status); + *n =3D *r; + *cc =3D 1; + status->float_exception_flags |=3D float_flag_invalid; + } else if (b->cls =3D=3D float_class_inf) { + *r =3D *a; + n->cls =3D float_class_zero; + n->sign =3D a->sign ^ b->sign; + *cc =3D 0; + } else { + FloatParts64 *q, q_buf, r_precise; + int float_exception_flags =3D 0; + bool is_q_smallish; + uint32_t r_flags; + + /* Compute precise quotient */ + q_buf =3D parts64_div(a, b, status); + q =3D &q_buf; + + /* + * Check whether two closest integers can be precisely represented, + * i.e., all their bits fit into the fractional part. + */ + is_q_smallish =3D q->exp < (fmt->frac_size + 1); + + /* + * Final quotient is rounded using final-quotient-rounding method,= and + * partial quotient is rounded toward zero. + * + * Rounding of partial quotient may be inexact. This is the whole = point + * of distinguishing partial quotients, so ignore the exception. + */ + *n =3D parts64_round_to_int(q, + is_q_smallish + ? final_quotient_rounding_mode + : float_round_to_zero, + 0, status, fmt); + + /* Compute precise remainder */ + r_precise =3D parts64_muladd(b, n, a, + float_muladd_negate_product, status); + + /* Round remainder to the target format */ + *r =3D r_precise; + status->float_exception_flags =3D 0; + *r =3D parts64_round_to_fmt(r, status, fmt); + r_flags =3D status->float_exception_flags; + + /* POp table "Results: DIVIDE TO INTEGER (Part 2 of 2)" */ + if (is_q_smallish) { + if (r->cls !=3D float_class_zero) { + if (r->exp < 2 - (1 << (fmt->exp_size - 1))) { + if (mask_underflow) { + float_exception_flags |=3D float_flag_underflow; + *dxc =3D 0x10; + r->exp +=3D fmt->exp_re_bias; + } + } else if (r_flags & float_flag_inexact) { + float_exception_flags |=3D float_flag_inexact; + if (mask_inexact) { + bool saved_r_sign, saved_r_precise_sign; + + /* + * Check whether remainder was truncated (rounded + * toward zero) or incremented. + */ + saved_r_sign =3D r->sign; + saved_r_precise_sign =3D r_precise.sign; + r->sign =3D false; + r_precise.sign =3D false; + if (parts64_compare(r, &r_precise, status, true) < + float_relation_equal) { + *dxc =3D 0x8; + } else { + *dxc =3D 0xc; + } + r->sign =3D saved_r_sign; + r_precise.sign =3D saved_r_precise_sign; + } + } + } + *cc =3D 0; + } else if (n->exp > (1 << (fmt->exp_size - 1)) - 1) { + n->exp -=3D fmt->exp_re_bias; + *cc =3D r->cls =3D=3D float_class_zero ? 1 : 3; + } else { + *cc =3D r->cls =3D=3D float_class_zero ? 0 : 2; + } + + /* Adjust signs of zero results */ + if (r->cls =3D=3D float_class_zero) { + r->sign =3D a->sign; + } + if (n->cls =3D=3D float_class_zero) { + n->sign =3D a->sign ^ b->sign; + } + + status->float_exception_flags =3D float_exception_flags; + } +} + +#define DEFINE_S390_DIVIDE_TO_INTEGER(floatN) = \ +static void floatN ## _s390_divide_to_integer(floatN a, floatN b, = \ + int final_quotient_rounding_mode, bool mask_underflow, bool mask_inexa= ct, \ + floatN *r, floatN *n, uint32_t *cc, int *dxc, float_status *status) = \ +{ = \ + FloatParts64 pa =3D floatN ## _unpack_canonical(a, status); = \ + FloatParts64 pb =3D floatN ## _unpack_canonical(b, status); = \ + FloatParts64 pr, pn; = \ + parts_s390_divide_to_integer(&pa, &pb, final_quotient_rounding_mode, = \ + mask_underflow, mask_inexact, = \ + &floatN ## _params, = \ + &pr, &pn, cc, dxc, status); = \ + *r =3D floatN ## _round_pack_canonical(&pr, status); = \ + *n =3D floatN ## _round_pack_canonical(&pn, status); = \ +} + +DEFINE_S390_DIVIDE_TO_INTEGER(float32) +DEFINE_S390_DIVIDE_TO_INTEGER(float64) + void HELPER(dib)(CPUS390XState *env, uint32_t r1, uint32_t r2, uint32_t r3, uint32_t m4, uint32_t bits) { --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507664; cv=none; d=zohomail.com; s=zohoarc; b=QZhK2vBfJZar1sVyOopT5loSy6spATqlNgTPY9ZHq2pLP/ds8m8txIDd3lYX4DKu3eWojMa7HBQAJYls0VKQu/Dc71UsZayjql9s7TUN/+OXhsH6RD7deozNrB58JgBkeDJugPV/YWdI1SBUx9OjM5sBhhNnnycBwtw9UH1LCIU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507664; 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=Pu3TZxm2iTRUBoR9MHlryIG9+4ZyXp6ZsL5bLZgQwto=; b=HMBPVwcflKmSvKtoxmc2z2pOaXXHVPUBQ3VpvizLbJKnp3RlSH/ReSb2cfL4mEktLTX9ZdzX/mzlj+1lamYApS5pKf1xHAN6x2sXKM6CBPj0xzVj7SAJOUuuD2PZ0Rh/jZ39EqhQRNrMIK8Auue4ox8S0piJfMzN0J83daQmsOo= 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 177750766438525.35208108180825; Wed, 29 Apr 2026 17:07:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEwO-0001pX-H8; Wed, 29 Apr 2026 20:07: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 1wIEvc-0008Eg-4O for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:57 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvZ-0001xV-4A for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:50 -0400 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-82f6b592fc7so143258b3a.3 for ; Wed, 29 Apr 2026 17:06:47 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507606; x=1778112406; 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=Pu3TZxm2iTRUBoR9MHlryIG9+4ZyXp6ZsL5bLZgQwto=; b=b3GRJzBLv7zF9txX1X8KGbjNffeFCwZeOzEm6oRSCSHq1vYoPg2uFtSpybUmFveEzn qBAfrTV8pNJ14kiaunKcA22zA080i7Pwg35DHoPpb/dNbPAjLaCWy16wQYsXy4asUoqG Uc3pmYN81UH0aeSt3TZBcKkkmhKK3EoMne7JSiemiHd+Bv2T5ypRqBmW3OdsZsIaXKqr o5y6YSsDAGYFdOYYFj9w3djrdnHqyp41W4k6eNLd0iOIr6j6UiYrlGPqzjL2Zuo875bi 6Ha3Vnb55wsXMzRZEQBbiNcnlMfD3N3i7VTii+XrtX/JXR7k5gXHHBU9kkolKjPaUAq2 mG7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507606; x=1778112406; 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=Pu3TZxm2iTRUBoR9MHlryIG9+4ZyXp6ZsL5bLZgQwto=; b=fmpNiPWh5wi7l4exw5tVkrjqA8m53Df1MXDMoPpx7xYh3hPBUe0cAz/G36OfNXR1ov 9ZcmxRtFs6iqUBEHuKdyzFxODTWVF5ONAgEBYDQQsXreH2C79gxEhCoJdsfwvuFLkYuA OqGgcFdeUp7RjCUN5SLFjbtAQRAzYXnzxFudfOFKlwvPqtSQVrorXib8LoTNetueME6n 4CZgr+cQBKAYiE4Bn8iXO/BdnKvUqHdJ12//Mm8/+XYmRpmFe975hXbi3nFebcGEOBCT /9rujDMV2def1bmGPkBoVvc2SN4S5Jm6mBx2hs2vCC4uDskelRwDGXV+FlXPBHoOad8l gH1Q== X-Gm-Message-State: AOJu0YwJUgsOXd0gZbLrZn+VxAGNIMaQ+G80l3/91AMI+pzRhO7nOkkv 0H1kpMExPbnBSWc4hG1au1VwZ/JTKkpRX7iVRoffcsYIasmWKOlxwMKM/pCz9qSkp7SX/9tm1Xo 8f8p8sgs= X-Gm-Gg: AeBDietxxObbLlKEkjDXgImuPq65IGRBH7gT30fSGxRRlKkYbgkhXBq27F4E8kmTrH/ UpFA8o4vV0S7AhkibCZ+l/xPh7ovupOO8n4kcsmmdgOScVIbUgzw6H2tcVG3g7v7ajLw4X/Nxj4 1H/kW6g88cwA2ipejXYVeBAlHfSKdsccUL3N/v3o/SIdsRi0E4pP8IJkseYHrPAVaYZ8OQag4WF QPpSah3ZcUGavRVJ4DerZ0j48vJkSgT36jo4a4g4b/cq1p1HR4stFbyfD9Cofffm6Uq6Xg4L0n2 gGwG2yOa4ah1iYjCcgwYqH5MlCrQMRlqabYIOvtsaox+V6Lk9H017lKup7SRvWyM4O25OOot4JG ddCd/k8Njim5RRl9GwaudmI62pUPdR9snAjuoCT0M280LciK82XYWopD42/wXk1DaOpshRj7CZ8 Lh8i0zv2B/MiS4Vjbm0d2sRKLrMNMDcoFDhR4rrJXZ X-Received: by 2002:a05:6a00:228e:b0:834:df57:9d67 with SMTP id d2e1a72fcca58-834fdc16541mr779425b3a.32.1777507605997; Wed, 29 Apr 2026 17:06:45 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 34/40] target/arm: Use FloatParts64 in bfdotadd_ebf Date: Thu, 30 Apr 2026 10:05:17 +1000 Message-ID: <20260430000524.56046-35-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::432; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x432.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: 1777507665126154100 Content-Type: text/plain; charset="utf-8" Use softfloat-parts.h so that we can more naturally perform the required operations witha single rounding step. This happens to also simplify the NaN detection step. Signed-off-by: Richard Henderson --- target/arm/tcg/vec_helper.c | 77 +++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c index 91e98d28ae..85bcaac3d1 100644 --- a/target/arm/tcg/vec_helper.c +++ b/target/arm/tcg/vec_helper.c @@ -22,6 +22,7 @@ #include "helper.h" #include "tcg/tcg-gvec-desc.h" #include "fpu/softfloat.h" +#include "fpu/softfloat-parts.h" #include "qemu/int128.h" #include "crypto/clmul.h" #include "vec_internal.h" @@ -2895,61 +2896,63 @@ float32 bfdotadd(float32 sum, uint32_t e1, uint32_t= e2, float_status *fpst) float32 bfdotadd_ebf(float32 sum, uint32_t e1, uint32_t e2, float_status *fpst, float_status *fpst_odd) { + /* Unpack two BFloat16 into two Float32, trivially. */ float32 s1r =3D e1 << 16; float32 s1c =3D e1 & 0xffff0000u; float32 s2r =3D e2 << 16; float32 s2c =3D e2 & 0xffff0000u; float32 t32; =20 + /* + * Compare f16_dotadd() in sme_helper.c, but here we have + * bfloat16 inputs. In particular that means that we do not + * want the FPCR.FZ16 flush semantics, so we use the normal + * float_status for the input handling here. + */ + FloatParts64 p1r =3D float32_unpack_canonical(s1r, fpst); + FloatParts64 p1c =3D float32_unpack_canonical(s1c, fpst); + FloatParts64 p2r =3D float32_unpack_canonical(s2r, fpst); + FloatParts64 p2c =3D float32_unpack_canonical(s2c, fpst); + + int all_mask =3D (float_cmask(p1r.cls) | float_cmask(p1c.cls) | + float_cmask(p1r.cls) | float_cmask(p1c.cls)); + /* C.f. FPProcessNaNs4 */ - if (float32_is_any_nan(s1r) || float32_is_any_nan(s1c) || - float32_is_any_nan(s2r) || float32_is_any_nan(s2c)) { - if (float32_is_signaling_nan(s1r, fpst)) { - t32 =3D s1r; - } else if (float32_is_signaling_nan(s1c, fpst)) { - t32 =3D s1c; - } else if (float32_is_signaling_nan(s2r, fpst)) { - t32 =3D s2r; - } else if (float32_is_signaling_nan(s2c, fpst)) { - t32 =3D s2c; - } else if (float32_is_any_nan(s1r)) { - t32 =3D s1r; - } else if (float32_is_any_nan(s1c)) { - t32 =3D s1c; - } else if (float32_is_any_nan(s2r)) { - t32 =3D s2r; + if (unlikely(all_mask & float_cmask_anynan)) { + if (unlikely(all_mask & float_cmask_snan)) { + if (p1r.cls =3D=3D float_class_snan) { + t32 =3D s1r; + } else if (p1c.cls =3D=3D float_class_snan) { + t32 =3D s1c; + } else if (p2r.cls =3D=3D float_class_snan) { + t32 =3D s2r; + } else { + t32 =3D s2c; + } } else { - t32 =3D s2c; + if (p1r.cls =3D=3D float_class_qnan) { + t32 =3D s1r; + } else if (p1c.cls =3D=3D float_class_qnan) { + t32 =3D s1c; + } else if (p2r.cls =3D=3D float_class_qnan) { + t32 =3D s2r; + } else { + t32 =3D s2c; + } } /* * FPConvertNaN(FPProcessNaN(t32)) will be done as part * of the final addition below. */ } else { - /* - * Compare f16_dotadd() in sme_helper.c, but here we have - * bfloat16 inputs. In particular that means that we do not - * want the FPCR.FZ16 flush semantics, so we use the normal - * float_status for the input handling here. - */ - float64 e1r =3D float32_to_float64(s1r, fpst); - float64 e1c =3D float32_to_float64(s1c, fpst); - float64 e2r =3D float32_to_float64(s2r, fpst); - float64 e2c =3D float32_to_float64(s2c, fpst); - float64 t64; - /* * The ARM pseudocode function FPDot performs both multiplies - * and the add with a single rounding operation. Emulate this - * by performing the first multiply in round-to-odd, then doing - * the second multiply as fused multiply-add, and rounding to - * float32 all in one step. + * and the add with a single rounding operation. */ - t64 =3D float64_mul(e1r, e2r, fpst_odd); - t64 =3D float64r32_muladd(e1c, e2c, t64, 0, fpst); + FloatParts64 tmp =3D parts64_mul(&p1r, &p2r, fpst); + tmp =3D parts64_muladd(&p1c, &p2c, &tmp, 0, fpst); =20 - /* This conversion is exact, because we've already rounded. */ - t32 =3D float64_to_float32(t64, fpst); + t32 =3D float32_round_pack_canonical(&tmp, fpst); } =20 /* The final accumulation step is not fused. */ --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507732; cv=none; d=zohomail.com; s=zohoarc; b=hM5fze3kmqLvCQMm2j70yv5WUrZjyk0WTswLU8mMvHZdrbzSXW7G4kryxe3fdfvlCeOeN8Ah79xqdj1NOGn7A4I0nAg5l3Z6XLSLthsiGlZFBzCWib6yMks0UGObiFAVn6xhn/KNCEFUja4CtWmeVg8rhQSNeYK7VWVVebtlLuc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507732; 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=OdMS80Iqz8+nGqxW2YaXhtp5vgXW9pAPi87GTGVVKbM=; b=lnsI8xrZND/PkFC1tQ0WuQkxcM5psxe3AZGnVfWCsVr5yKlHFGVm/RLx2u5qsNGOOg49kQpVjryoyPiyCQd8XEc8PDQ//WmfYJkK0H4NPG2pvwX4YXJ6BeeQ2l5wx5H6x43md+209Bp7yCYaKJTPBpfdqxKLELqWZ2tw/YZOIh0= 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 1777507732740701.9184092949745; Wed, 29 Apr 2026 17:08:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEvy-0000ey-1U; Wed, 29 Apr 2026 20:07:14 -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 1wIEve-0008Er-IA for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:58 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvb-0001yA-Q1 for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:53 -0400 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-824c9da9928so149556b3a.3 for ; Wed, 29 Apr 2026 17:06:49 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507609; x=1778112409; 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=OdMS80Iqz8+nGqxW2YaXhtp5vgXW9pAPi87GTGVVKbM=; b=CiQlVcfqPnPNWtfoPRkV/IOnLaTfLomUZqIZytvdByZDdrWaavFoBRo9IKU2SMhg2m JMuXBTPfTgJNOMswU7XA3DCQzwmxDeiBKJATbxPmhPpygykhz6UCpl+Rj+o+O8Ld7hT8 CEeTS22iAeKI8i6b98HfTyrUwoWivzmyv3sQ0K3QptfvC4LmpkfypwA2t766xlyktlnz gJt2HWaMxsQs+IPRX4cekGt4nd2q/wnd5MIG2nsKFv29A1+n5pFAtBBcUbO3ExvudFOQ 59At1dEkhLw4pXkT5Oa1Hc2nZc3IwIcAZG3A8yPN1leIA6VDqzUWH+qsimF+SFbqaw9J Qyuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507609; x=1778112409; 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=OdMS80Iqz8+nGqxW2YaXhtp5vgXW9pAPi87GTGVVKbM=; b=mEYqSKNMK0BXcAx4kn/sRV2goPO66oRRLJ1Ev7H2oJiPBZZTCSmESnBrupc/lu1NsC siMox6iVurZvfCBz45CSyAFac20sF3qwCs5nRBbzaQ86MuBjqg1pDCQxpRbqh5cQgCYT 66jXuSJs4K9X7/ibRtHPYUCxoeamBYeQwSqUGluR3axObGUGSk5wt5xRynFpzJ0q2TKk nVXW/Ud1Z4OBHj87nut4d4JxwW6n9YTZFMZfVPuVwC08YKH+//QElyOhIpUrGu4tBJqU yyVEAjAcaaB+WfEi+HDKsFm7tyCkayopQFBexBv975saaBbERp+7Y83sXseA9T1NpiBO EJxQ== X-Gm-Message-State: AOJu0Yw0mRcmAKtcWjKaKJfNAjScpiC3ah1as20QtVu2LHwRU0yV92LN 0N35xWoQKZUnN57B7ER3+dfBaL7hlUzXuR23g0zVgOJzLx9lIHNounLh0UM6oqZK/RsZV45j4Fe pNPtqOo8= X-Gm-Gg: AeBDiev24FYnfUxqnIwQDwbazAx3nFB/4iSIucyXOTIZ/cJRiBEm7lzqiUfpYSOjfLJ CAFXx2JI7lYJczalfBV04mnTNDb/UrLxxULw7bKWnBZyNrYmkSEvpgivQCtKyp95ncOeYwxvNlR YYwI4NOor57NDDkG6luD/2x+jOtnDn+8YyK3rhGug8Oa5rjsTDBig/PxKsa8e6uJO+6EHBVvg3I DkKazvIZpHy83CAgVHsImlrAzYYIaI8YSu5X8+lBp6W8Tc06SYbrojztyfvFWHlukL1i16HVvD1 8608lidtEhF+lRF02wind1YsssvwA3ihAAEG0lnMTCvBSqcDno43auyznrcUZbr7gFMU5m/KICh K9ufwGEB240mdq5DU0sETRi9hNNRv9htvhmje+5kHugDKxkRm0XtWX1f7Ix5kYS+8+Req8PyW91 bRFZLwTqld7vs4D4orxRTMW00cnFi1AhZGYI7G3QRj X-Received: by 2002:aa7:9064:0:b0:829:9ea2:3e17 with SMTP id d2e1a72fcca58-834fe05d40bmr636288b3a.9.1777507608821; Wed, 29 Apr 2026 17:06:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 35/40] target/arm: Drop oddstatus from is_ebf and bfdotadd_ebf Date: Thu, 30 Apr 2026 10:05:18 +1000 Message-ID: <20260430000524.56046-36-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.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: 1777507733081158500 This argument is no longer used. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- target/arm/tcg/vec_internal.h | 12 +++------ target/arm/tcg/sme_helper.c | 6 ++--- target/arm/tcg/vec_helper.c | 50 +++++++++++++++-------------------- 3 files changed, 29 insertions(+), 39 deletions(-) diff --git a/target/arm/tcg/vec_internal.h b/target/arm/tcg/vec_internal.h index 4edd2b4fc1..c7ccb28b18 100644 --- a/target/arm/tcg/vec_internal.h +++ b/target/arm/tcg/vec_internal.h @@ -270,7 +270,6 @@ float32 bfdotadd(float32 sum, uint32_t e1, uint32_t e2,= float_status *fpst); * @sum: addend * @e1, @e2: multiplicand vectors * @fpst: floating-point status to use - * @fpst_odd: floating-point status to use for round-to-odd operations * * BFloat16 2-way dot product of @e1 & @e2, accumulating with @sum. * The @e1 and @e2 operands correspond to the 32-bit source vector @@ -279,23 +278,20 @@ float32 bfdotadd(float32 sum, uint32_t e1, uint32_t e= 2, float_status *fpst); * Corresponds to the ARM pseudocode function BFDotAdd, specialized * for the FPCR.EBF =3D=3D 1 case. */ -float32 bfdotadd_ebf(float32 sum, uint32_t e1, uint32_t e2, - float_status *fpst, float_status *fpst_odd); +float32 bfdotadd_ebf(float32 sum, uint32_t e1, uint32_t e2, float_status *= fpst); =20 /** * is_ebf: * @env: CPU state * @statusp: pointer to floating point status to fill in - * @oddstatusp: pointer to floating point status to fill in for round-to-o= dd * * Determine whether a BFDotAdd operation should use FPCR.EBF =3D 0 - * or FPCR.EBF =3D 1 semantics. On return, has initialized *statusp - * and *oddstatusp to suitable float_status arguments to use with either - * bfdotadd() or bfdotadd_ebf(). + * or FPCR.EBF =3D 1 semantics. On return, has initialized *statusp as sui= table + * for float_status arguments to either bfdotadd() or bfdotadd_ebf(). * Returns true for EBF =3D 1, false for EBF =3D 0. (The caller should use= this * to decide whether to call bfdotadd() or bfdotadd_ebf().) */ -bool is_ebf(CPUARMState *env, float_status *statusp, float_status *oddstat= usp); +bool is_ebf(CPUARMState *env, float_status *statusp); =20 /* * Negate as for FPCR.AH=3D1 -- do not negate NaNs. diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index ab5999c592..0702a1b129 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1435,9 +1435,9 @@ static void do_bfmopa_w(void *vza, void *vzn, void *v= zm, uint32_t desc, uint32_t negx, bool ah_neg) { intptr_t row, col, oprsz =3D simd_maxsz(desc); - float_status fpst, fpst_odd; + float_status fpst; =20 - if (is_ebf(env, &fpst, &fpst_odd)) { + if (is_ebf(env, &fpst)) { for (row =3D 0; row < oprsz; ) { uint16_t prow =3D pn[H2(row >> 4)]; do { @@ -1458,7 +1458,7 @@ static void do_bfmopa_w(void *vza, void *vzn, void *v= zm, uint32_t m =3D *(uint32_t *)(vzm + H1_4(col)); =20 m =3D f16mop_adj_pair(m, pcol, 0); - *a =3D bfdotadd_ebf(*a, n, m, &fpst, &fpst_odd= ); + *a =3D bfdotadd_ebf(*a, n, m, &fpst); } col +=3D 4; pcol >>=3D 4; diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c index 85bcaac3d1..3231bb2100 100644 --- a/target/arm/tcg/vec_helper.c +++ b/target/arm/tcg/vec_helper.c @@ -2845,7 +2845,7 @@ DO_MMLA_B(gvec_usmmla_b, do_usmmla_b) * BFloat16 Dot Product */ =20 -bool is_ebf(CPUARMState *env, float_status *statusp, float_status *oddstat= usp) +bool is_ebf(CPUARMState *env, float_status *statusp) { /* * For BFDOT, BFMMLA, etc, the behaviour depends on FPCR.EBF. @@ -2865,11 +2865,7 @@ bool is_ebf(CPUARMState *env, float_status *statusp,= float_status *oddstatusp) *statusp =3D env->vfp.fp_status[is_a64(env) ? FPST_A64 : FPST_A32]; set_default_nan_mode(true, statusp); =20 - if (ebf) { - /* EBF=3D1 needs to do a step with round-to-odd semantics */ - *oddstatusp =3D *statusp; - set_float_rounding_mode(float_round_to_odd, oddstatusp); - } else { + if (!ebf) { set_flush_to_zero(true, statusp); set_flush_inputs_to_zero(true, statusp); set_float_rounding_mode(float_round_to_odd_inf, statusp); @@ -2893,8 +2889,7 @@ float32 bfdotadd(float32 sum, uint32_t e1, uint32_t e= 2, float_status *fpst) return t1; } =20 -float32 bfdotadd_ebf(float32 sum, uint32_t e1, uint32_t e2, - float_status *fpst, float_status *fpst_odd) +float32 bfdotadd_ebf(float32 sum, uint32_t e1, uint32_t e2, float_status *= fpst) { /* Unpack two BFloat16 into two Float32, trivially. */ float32 s1r =3D e1 << 16; @@ -2965,11 +2960,11 @@ void HELPER(gvec_bfdot)(void *vd, void *vn, void *v= m, void *va, intptr_t i, opr_sz =3D simd_oprsz(desc); float32 *d =3D vd, *a =3D va; uint32_t *n =3D vn, *m =3D vm; - float_status fpst, fpst_odd; + float_status fpst; =20 - if (is_ebf(env, &fpst, &fpst_odd)) { + if (is_ebf(env, &fpst)) { for (i =3D 0; i < opr_sz / 4; ++i) { - d[i] =3D bfdotadd_ebf(a[i], n[i], m[i], &fpst, &fpst_odd); + d[i] =3D bfdotadd_ebf(a[i], n[i], m[i], &fpst); } } else { for (i =3D 0; i < opr_sz / 4; ++i) { @@ -2988,14 +2983,14 @@ void HELPER(gvec_bfdot_idx)(void *vd, void *vn, voi= d *vm, intptr_t eltspersegment =3D MIN(16 / 4, elements); float32 *d =3D vd, *a =3D va; uint32_t *n =3D vn, *m =3D vm; - float_status fpst, fpst_odd; + float_status fpst; =20 - if (is_ebf(env, &fpst, &fpst_odd)) { + if (is_ebf(env, &fpst)) { for (i =3D 0; i < elements; i +=3D eltspersegment) { uint32_t m_idx =3D m[i + H4(index)]; =20 for (j =3D i; j < i + eltspersegment; j++) { - d[j] =3D bfdotadd_ebf(a[j], n[j], m_idx, &fpst, &fpst_odd); + d[j] =3D bfdotadd_ebf(a[j], n[j], m_idx, &fpst); } } } else { @@ -3022,17 +3017,16 @@ void HELPER(sme2_bfvdot_idx)(void *vd, void *vn, vo= id *vm, uint16_t *n0 =3D vn; uint16_t *n1 =3D vn + sizeof(ARMVectorReg); uint32_t *m =3D vm; - float_status fpst, fpst_odd; + float_status fpst; =20 - if (is_ebf(env, &fpst, &fpst_odd)) { + if (is_ebf(env, &fpst)) { for (i =3D 0; i < elements; i +=3D eltspersegment) { uint32_t m_idx =3D m[i + H4(idx)]; =20 for (j =3D 0; j < eltspersegment; j++) { uint32_t nn =3D (n0[H2(2 * (i + j) + sel)]) | (n1[H2(2 * (i + j) + sel)] << 16); - d[i + H4(j)] =3D bfdotadd_ebf(a[i + H4(j)], nn, m_idx, - &fpst, &fpst_odd); + d[i + H4(j)] =3D bfdotadd_ebf(a[i + H4(j)], nn, m_idx, &fp= st); } } } else { @@ -3055,9 +3049,9 @@ void HELPER(gvec_bfmmla)(void *vd, void *vn, void *vm= , void *va, intptr_t s, opr_sz =3D simd_oprsz(desc); float32 *d =3D vd, *a =3D va; uint32_t *n =3D vn, *m =3D vm; - float_status fpst, fpst_odd; + float_status fpst; =20 - if (is_ebf(env, &fpst, &fpst_odd)) { + if (is_ebf(env, &fpst)) { for (s =3D 0; s < opr_sz / 4; s +=3D 4) { float32 sum00, sum01, sum10, sum11; =20 @@ -3069,20 +3063,20 @@ void HELPER(gvec_bfmmla)(void *vd, void *vn, void *= vm, void *va, * i j i k j k */ sum00 =3D a[s + H4(0 + 0)]; - sum00 =3D bfdotadd_ebf(sum00, n[s + H4(0 + 0)], m[s + H4(0 + 0= )], &fpst, &fpst_odd); - sum00 =3D bfdotadd_ebf(sum00, n[s + H4(0 + 1)], m[s + H4(0 + 1= )], &fpst, &fpst_odd); + sum00 =3D bfdotadd_ebf(sum00, n[s + H4(0 + 0)], m[s + H4(0 + 0= )], &fpst); + sum00 =3D bfdotadd_ebf(sum00, n[s + H4(0 + 1)], m[s + H4(0 + 1= )], &fpst); =20 sum01 =3D a[s + H4(0 + 1)]; - sum01 =3D bfdotadd_ebf(sum01, n[s + H4(0 + 0)], m[s + H4(2 + 0= )], &fpst, &fpst_odd); - sum01 =3D bfdotadd_ebf(sum01, n[s + H4(0 + 1)], m[s + H4(2 + 1= )], &fpst, &fpst_odd); + sum01 =3D bfdotadd_ebf(sum01, n[s + H4(0 + 0)], m[s + H4(2 + 0= )], &fpst); + sum01 =3D bfdotadd_ebf(sum01, n[s + H4(0 + 1)], m[s + H4(2 + 1= )], &fpst); =20 sum10 =3D a[s + H4(2 + 0)]; - sum10 =3D bfdotadd_ebf(sum10, n[s + H4(2 + 0)], m[s + H4(0 + 0= )], &fpst, &fpst_odd); - sum10 =3D bfdotadd_ebf(sum10, n[s + H4(2 + 1)], m[s + H4(0 + 1= )], &fpst, &fpst_odd); + sum10 =3D bfdotadd_ebf(sum10, n[s + H4(2 + 0)], m[s + H4(0 + 0= )], &fpst); + sum10 =3D bfdotadd_ebf(sum10, n[s + H4(2 + 1)], m[s + H4(0 + 1= )], &fpst); =20 sum11 =3D a[s + H4(2 + 1)]; - sum11 =3D bfdotadd_ebf(sum11, n[s + H4(2 + 0)], m[s + H4(2 + 0= )], &fpst, &fpst_odd); - sum11 =3D bfdotadd_ebf(sum11, n[s + H4(2 + 1)], m[s + H4(2 + 1= )], &fpst, &fpst_odd); + sum11 =3D bfdotadd_ebf(sum11, n[s + H4(2 + 0)], m[s + H4(2 + 0= )], &fpst); + sum11 =3D bfdotadd_ebf(sum11, n[s + H4(2 + 1)], m[s + H4(2 + 1= )], &fpst); =20 d[s + H4(0 + 0)] =3D sum00; d[s + H4(0 + 1)] =3D sum01; --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507680; cv=none; d=zohomail.com; s=zohoarc; b=TXHuS2SgMq5smXip8zc2LKNEUgpHcMUbRu2ZHgQkJTF/61INpYeKLmsq3k5p6h9/iLRhJl3wAOygeNSezdcJcsBdaqcQJsHGg7JKVeIyEeQWxJOcbPJOhdCj8yGpRsNXWVimbOtRkjr1QA/tYRTLJDMemWJ60x0J3+c/1EuWqT8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507680; 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=LMcpEFYI4IhEZgzdOBWNJ8qlgQLS+b48/lPnLmqusZc=; b=UM7Ice1qx0SVOyJpu4C69deNxFNVqNSB+I4a89aVfwQIMbUYIc7hmLISzv0GPnsasmBl4I+t7nvN5Czq+I3Wfmohshlk1SXY7+d6QG5KzqQq3bUCLDR6haZ7nJoYe1q/EgokK1aetheSQEb2d43YqHnGHlavdP7qZcWCHaRkyF0= 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 1777507680915464.7530283307966; Wed, 29 Apr 2026 17:08:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEwJ-00015U-Ma; Wed, 29 Apr 2026 20:07:35 -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 1wIEvh-0008F8-FT for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:58 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvd-0001zp-5i for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:55 -0400 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-82f351ca23cso157622b3a.2 for ; Wed, 29 Apr 2026 17:06:52 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507611; x=1778112411; 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=LMcpEFYI4IhEZgzdOBWNJ8qlgQLS+b48/lPnLmqusZc=; b=EMAoDgMzzOvSCqaQ0it+xikIWCugijPKmPzBrKi2rT/CQO0epAg2USHprNFd0UYSqm WWIVCHujt4U9fEWNh0PCSm1CWBoC5lpyyTGB9GurfATnvV9Tsvq6P+aXqiJDeCzAhgix MscK040J61yprFcOwpPZ0v8b50PM0C5SV8vQ0DlnK8RgjcmkOg/Mq7w5Vchz3vG73H7d MEigr9ok1CpmqjN0fq0rjzOZJLTKQLFLrflhKt3mPsMiiGOvtmTRbTBKttxed2Ashweq QVQZpaSEqHzBX0spUCnnmhxs+hmf9/CcYS6G9hzcKvQm21Ge58V5oWfxLp0Ab8+J4o+l vehg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507611; x=1778112411; 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=LMcpEFYI4IhEZgzdOBWNJ8qlgQLS+b48/lPnLmqusZc=; b=lw7YeApiW60LDVHtJvLcNGsY9h4Z/Au2Zq6P8nUE1sFs66+6rQAoL5oV/7z53nHGQb wZ/9sL7si5gjnwyhDFWkVtXF8y9tdSvnJb3vOd5VxqG4LbZUUVtbLMhVavYGHbvs4p+O G0+Y048Plt1pbV7Betj2pS4UNAGYVmPqVgAUeqCfe0w8yBNQU24XjdEHkTVdWeWjtiGm KYZ4lWNStRTlKDOJcgK7H8oJ/kdtYlZ7VKCqDnKr2sZnT1bdn2oGnZk6jckGN0mCEEbF JWkL/iwkHYhjTpqrlpYOLjQBtsNUxJjR8fxRcZ09+j7syLJTasLmiOfpGpOwJv3Xg+Nz hozQ== X-Gm-Message-State: AOJu0YymmLbiSxr1fCj2tE7tV0qn5BGc+5He/ChzhCV9UEVpKKZwTJ11 mx+fLBmDxhcO1//rkLsTzeQmWZ7mQ0sPXxOHuiEn2N9SgIugZHp3J6Gao6cdgzsyiF0iHFVI+tr I1PDqDZ4= X-Gm-Gg: AeBDievdClW7NtLxd2LKY/FubU2deTO+sbYh40MZBddvF4HzbWPg7LG6U5QL7kCX2Hm vhpbyjDskcbsXvWPKgJ5Ln/vpUmkjTvI+FgwyeFtbojdJod45x6FAnxXI+/W80t5oZP35vmUSaq 0EvwPT8pOSYyx4XPufOiVYrN5sd0nh5ML/8UWRHemilYQZLiJ8X9CeOnxHjF40qEwYCK6Nzm4s6 GaDIAmonB4BoGKRZcYU2GMYGaik2/f2kRtv0rowKFWvKAY0E3j/oi3aXcT+cCIZTLt5dDcV0gU1 WeXayodOAX//dAVnjn8pj5j0rlUGMBeIb7bgOS95uvaEys40guS4XwOlQGbHtaFwbvXoYcax4u/ v2Zdi5q1+zQ10cwRmNBCkMHqMBfJ83mQLxdVW/TWzg+klYj8lviKczD9Jql57vnBS+HL02ZKZAJ DUcXlumaJLXcdxYU+DHfFLe0u0fKCKH9YnHaRWoBE5 X-Received: by 2002:a05:6a00:1ca5:b0:82f:5154:d1d9 with SMTP id d2e1a72fcca58-834fdb07c68mr829066b3a.6.1777507611094; Wed, 29 Apr 2026 17:06:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 36/40] target/arm: Use FloatParts64 in f16_dotadd Date: Thu, 30 Apr 2026 10:05:19 +1000 Message-ID: <20260430000524.56046-37-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.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: 1777507683463154100 Content-Type: text/plain; charset="utf-8" Use softfloat-parts.h so that we can more naturally perform the required operations witha single rounding step. This happens to also simplify the NaN detection step. Signed-off-by: Richard Henderson --- target/arm/tcg/sme_helper.c | 96 ++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 56 deletions(-) diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 0702a1b129..16b96890cc 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -27,6 +27,7 @@ #include "accel/tcg/helper-retaddr.h" #include "qemu/int128.h" #include "fpu/softfloat.h" +#include "fpu/softfloat-parts.h" #include "vec_internal.h" #include "sve_ldst_internal.h" =20 @@ -1227,18 +1228,15 @@ static inline uint32_t bf16mop_ah_neg_adj_pair(uint= 32_t pair, uint32_t pg) } =20 static float32 f16_dotadd(float32 sum, uint32_t e1, uint32_t e2, - float_status *s_f16, float_status *s_std, - float_status *s_odd) + float_status *s_f16, float_status *s_std) { /* - * We need three different float_status for different parts of this + * We need two different float_status for different parts of this * operation: * - the input conversion of the float16 values must use the * f16-specific float_status, so that the FPCR.FZ16 control is appl= ied * - operations on float32 including the final accumulation must use * the normal float_status, so that FPCR.FZ is applied - * - we have pre-set-up copy of s_std which is set to round-to-odd, - * for the multiply (see below) */ float16 h1r =3D e1 & 0xffff; float16 h1c =3D e1 >> 16; @@ -1246,48 +1244,49 @@ static float32 f16_dotadd(float32 sum, uint32_t e1,= uint32_t e2, float16 h2c =3D e2 >> 16; float32 t32; =20 + FloatParts64 p1r =3D float16_unpack_canonical(h1r, s_f16); + FloatParts64 p1c =3D float16_unpack_canonical(h1c, s_f16); + FloatParts64 p2r =3D float16_unpack_canonical(h2r, s_f16); + FloatParts64 p2c =3D float16_unpack_canonical(h2c, s_f16); + + int all_mask =3D (float_cmask(p1r.cls) | float_cmask(p1c.cls) | + float_cmask(p1r.cls) | float_cmask(p1c.cls)); + /* C.f. FPProcessNaNs4 */ - if (float16_is_any_nan(h1r) || float16_is_any_nan(h1c) || - float16_is_any_nan(h2r) || float16_is_any_nan(h2c)) { + if (unlikely(all_mask & float_cmask_anynan)) { float16 t16; =20 - if (float16_is_signaling_nan(h1r, s_f16)) { - t16 =3D h1r; - } else if (float16_is_signaling_nan(h1c, s_f16)) { - t16 =3D h1c; - } else if (float16_is_signaling_nan(h2r, s_f16)) { - t16 =3D h2r; - } else if (float16_is_signaling_nan(h2c, s_f16)) { - t16 =3D h2c; - } else if (float16_is_any_nan(h1r)) { - t16 =3D h1r; - } else if (float16_is_any_nan(h1c)) { - t16 =3D h1c; - } else if (float16_is_any_nan(h2r)) { - t16 =3D h2r; + if (unlikely(all_mask & float_cmask_snan)) { + if (p1r.cls =3D=3D float_class_snan) { + t16 =3D h1r; + } else if (p1c.cls =3D=3D float_class_snan) { + t16 =3D h1c; + } else if (p2r.cls =3D=3D float_class_snan) { + t16 =3D h2r; + } else { + t16 =3D h2c; + } } else { - t16 =3D h2c; + if (p1r.cls =3D=3D float_class_qnan) { + t16 =3D h1r; + } else if (p1c.cls =3D=3D float_class_qnan) { + t16 =3D h1c; + } else if (p2r.cls =3D=3D float_class_qnan) { + t16 =3D h2r; + } else { + t16 =3D h2c; + } } t32 =3D float16_to_float32(t16, true, s_f16); } else { - float64 e1r =3D float16_to_float64(h1r, true, s_f16); - float64 e1c =3D float16_to_float64(h1c, true, s_f16); - float64 e2r =3D float16_to_float64(h2r, true, s_f16); - float64 e2c =3D float16_to_float64(h2c, true, s_f16); - float64 t64; - /* * The ARM pseudocode function FPDot performs both multiplies - * and the add with a single rounding operation. Emulate this - * by performing the first multiply in round-to-odd, then doing - * the second multiply as fused multiply-add, and rounding to - * float32 all in one step. + * and the add with a single rounding operation. */ - t64 =3D float64_mul(e1r, e2r, s_odd); - t64 =3D float64r32_muladd(e1c, e2c, t64, 0, s_std); + FloatParts64 tmp =3D parts64_mul(&p1r, &p2r, s_std); + tmp =3D parts64_muladd(&p1c, &p2c, &tmp, 0, s_std); =20 - /* This conversion is exact, because we've already rounded. */ - t32 =3D float64_to_float32(t64, s_std); + t32 =3D float32_round_pack_canonical(&tmp, s_std); } =20 /* The final accumulation step is not fused. */ @@ -1299,9 +1298,6 @@ static void do_fmopa_w_h(void *vza, void *vzn, void *= vzm, uint16_t *pn, uint32_t negx, bool ah_neg) { intptr_t row, col, oprsz =3D simd_maxsz(desc); - float_status fpst_odd =3D env->vfp.fp_status[FPST_ZA]; - - set_float_rounding_mode(float_round_to_odd, &fpst_odd); =20 for (row =3D 0; row < oprsz; ) { uint16_t prow =3D pn[H2(row >> 4)]; @@ -1325,8 +1321,7 @@ static void do_fmopa_w_h(void *vza, void *vzn, void *= vzm, uint16_t *pn, m =3D f16mop_adj_pair(m, pcol, 0); *a =3D f16_dotadd(*a, n, m, &env->vfp.fp_status[FPST_ZA_F16], - &env->vfp.fp_status[FPST_ZA], - &fpst_odd); + &env->vfp.fp_status[FPST_ZA]); } col +=3D 4; pcol >>=3D 4; @@ -1363,15 +1358,12 @@ void HELPER(sme2_fdot_h)(void *vd, void *vn, void *= vm, void *va, bool za =3D extract32(desc, SIMD_DATA_SHIFT, 1); float_status *fpst_std =3D &env->vfp.fp_status[za ? FPST_ZA : FPST_A64= ]; float_status *fpst_f16 =3D &env->vfp.fp_status[za ? FPST_ZA_F16 : FPST= _A64_F16]; - float_status fpst_odd =3D *fpst_std; float32 *d =3D vd, *a =3D va; uint32_t *n =3D vn, *m =3D vm; =20 - set_float_rounding_mode(float_round_to_odd, &fpst_odd); - for (i =3D 0; i < oprsz / sizeof(float32); ++i) { d[H4(i)] =3D f16_dotadd(a[H4(i)], n[H4(i)], m[H4(i)], - fpst_f16, fpst_std, &fpst_odd); + fpst_f16, fpst_std); } } =20 @@ -1385,17 +1377,14 @@ void HELPER(sme2_fdot_idx_h)(void *vd, void *vn, vo= id *vm, void *va, bool za =3D extract32(desc, SIMD_DATA_SHIFT + 2, 1); float_status *fpst_std =3D &env->vfp.fp_status[za ? FPST_ZA : FPST_A64= ]; float_status *fpst_f16 =3D &env->vfp.fp_status[za ? FPST_ZA_F16 : FPST= _A64_F16]; - float_status fpst_odd =3D *fpst_std; float32 *d =3D vd, *a =3D va; uint32_t *n =3D vn, *m =3D (uint32_t *)vm + H4(idx); =20 - set_float_rounding_mode(float_round_to_odd, &fpst_odd); - for (i =3D 0; i < elements; i +=3D eltspersegment) { uint32_t mm =3D m[i]; for (j =3D 0; j < eltspersegment; ++j) { d[H4(i + j)] =3D f16_dotadd(a[H4(i + j)], n[H4(i + j)], mm, - fpst_f16, fpst_std, &fpst_odd); + fpst_f16, fpst_std); } } } @@ -1408,24 +1397,19 @@ void HELPER(sme2_fvdot_idx_h)(void *vd, void *vn, v= oid *vm, void *va, intptr_t eltspersegment =3D MIN(4, elements); int idx =3D extract32(desc, SIMD_DATA_SHIFT, 2); int sel =3D extract32(desc, SIMD_DATA_SHIFT + 2, 1); - float_status fpst_odd, *fpst_std, *fpst_f16; float32 *d =3D vd, *a =3D va; uint16_t *n0 =3D vn; uint16_t *n1 =3D vn + sizeof(ARMVectorReg); uint32_t *m =3D (uint32_t *)vm + H4(idx); =20 - fpst_std =3D &env->vfp.fp_status[FPST_ZA]; - fpst_f16 =3D &env->vfp.fp_status[FPST_ZA_F16]; - fpst_odd =3D *fpst_std; - set_float_rounding_mode(float_round_to_odd, &fpst_odd); - for (i =3D 0; i < elements; i +=3D eltspersegment) { uint32_t mm =3D m[i]; for (j =3D 0; j < eltspersegment; ++j) { uint32_t nn =3D (n0[H2(2 * (i + j) + sel)]) | (n1[H2(2 * (i + j) + sel)] << 16); d[i + H4(j)] =3D f16_dotadd(a[i + H4(j)], nn, mm, - fpst_f16, fpst_std, &fpst_odd); + &env->vfp.fp_status[FPST_ZA_F16], + &env->vfp.fp_status[FPST_ZA]); } } } --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507670; cv=none; d=zohomail.com; s=zohoarc; b=nSsr8oFQoimb0sXBZRWlmxOt5yc0C6cJAVkj7/3cvtGaQTj9JYWsmRhyb81zM1PSN2UHpSGeU2OqrhhxDDO/kOyUrQZbT13G5j1Tw5qdGAvaWKcCyQyQ9HB/OZ3UBMic971xSNw26m2PDm9qDIGbtaQKx7G4s+yYyxWWmnGnAvg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507670; 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=evIVo9pnvW/9sfTw9IqtjENxooeS3G0aeAGVgjmZkec=; b=HsGddHR+RalUlV8ZRWQEvtUCrD5DWDyu0J3yB9827Rstxim6XaB8q/O/kXEDgkLrvpyj2ova3Ycwk7NGSrvA6aUhEA0kYE62r0NsbWSMoe/JvWP+5eRAZ6nXHm0pYvjEgNqjEppvwk6gocHGU5a783bERMXHXkNpL2DqZRe/row= 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 1777507670023430.1887259190586; Wed, 29 Apr 2026 17:07:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEwN-0001iJ-L4; Wed, 29 Apr 2026 20:07: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 1wIEvi-0008IW-SP for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:07:03 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvg-00020E-VA for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:58 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-82f943870baso166971b3a.1 for ; Wed, 29 Apr 2026 17:06:54 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507613; x=1778112413; 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=evIVo9pnvW/9sfTw9IqtjENxooeS3G0aeAGVgjmZkec=; b=v3OTeXFcAI2YsSjzsX2mL8/tH+pkoNVtZml2UmLUu2XVG5RmWJK1jhk3PHzVW0ZwG8 dmKN2QrGTE7dZshIGReucFSvNUnT23x+oEL+tQQTUGzaMpGXR9XbzLVWyrvAfjGh8T9c 6eVinZBwdF4mV+aD7+0yQdj8/e+aD6gaSQUDnqIt1dMFEL8SFKhiLrTBy/0xCI7izp8k SoKKOAd9r42NxRhs06j+zqH/h0e2lozTdXyfzc0y6dfNqgXP7kqmVQ9vgWPh0xE7xCRt b8N9YZ8zhEaH8MdKPUZR3OKvYnlVaJhnVo+roN2eNvhXZBdfHBVlKoPiL6MrG0GkUmZM 2+Vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507613; x=1778112413; 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=evIVo9pnvW/9sfTw9IqtjENxooeS3G0aeAGVgjmZkec=; b=SRxEu2oiz2T5/OmAL+lxNT/xIoVrrwzVuRxdkPArxiHjSakAsLeVqyzckkdP/H/ooY dqMAaqZHi3GS0S8DaXCWj4Ls9bd2MvZuHDsWgBPvQHMnAioZb0Ae0f1oYzlPEW7MyfPG XD5r5zs8qu65l6v0mIMferPk2t9fJroStUnKSLSoc16WDmw5ERltjGZDn6HLBa9XP09w gfILtulxFMaN1v7FkimLq/KSpTSwFXWbuB7PigXbW1Gx8UbkF/WIwb9HUtea/7Erp7Sk wtAowJrKHkRHgXiYZDAkS8hhDc5RpcFqGw/pkIaHiT9ZHpGSxkdNIHlJpaV7JQOGP7VK rZ+g== X-Gm-Message-State: AOJu0YzgMHHVg8O80xpvW8agt6WNJCmtKFjcx81NAp8aKIlB2VouoCZT Q0hFAakq5uWQygplcYyzYBXZEASh19KbQalvbywpy9ORSjXDqHUpgOA943SDrpcw5VkuD9iiltF bCVjl6xM= X-Gm-Gg: AeBDiesBPeTkYH17b9CLaYX/iO0itpaBb/H6F2QQSux8RojZZnqJvb7Ebdq4Z3mEluS nrZ951hIFtJSBMNkFv5uTR78PAUv2BGL7o9zciO6DorCYWLD7XxA6KxQyzqKqvOki+/wqWXCLpz 8YpZaNQsgbKU4SrVhaNtmflk1XABdiMSe/oSUeBda7hfKAMSwh6+fsxWwomFvU6zN8bad0dp8uP jb2D6eU/WbGGC4TNdAULUrXDQSl8OsCZGI0QA9fkYRWO/vHv8cajHY6bbJK7S0NR03AjyzNCwr5 qfHBTdhWgkTRjJ+cKfG/LgOg+wJkMOWDnrbOc25ph6uuD7ftiaP/HhubB/fOM4CDBPD6mG7+g9S NqGOThy63by/W9TBq1q5RwDRJfKbbudt0IQk1/r7j8d8uYrl6pbllRDe8G20Q07Eucu2hPcCxKp 7dRgK/3P/hbnYvykxKEJ7Irro7HlM0Qpo8rJfMLuii X-Received: by 2002:a05:6a00:2e04:b0:82f:238f:b5a8 with SMTP id d2e1a72fcca58-834fdb95979mr818181b3a.9.1777507613310; Wed, 29 Apr 2026 17:06:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 37/40] fpu: Return struct from parts{64,128}_scalbn Date: Thu, 30 Apr 2026 10:05:20 +1000 Message-ID: <20260430000524.56046-38-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.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: 1777507671145154100 Content-Type: text/plain; charset="utf-8" At the same time, export. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- include/fpu/softfloat-parts.h | 3 +++ fpu/softfloat-parts.c.inc | 14 ++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/include/fpu/softfloat-parts.h b/include/fpu/softfloat-parts.h index a24678ea2b..7170cc7b6a 100644 --- a/include/fpu/softfloat-parts.h +++ b/include/fpu/softfloat-parts.h @@ -223,4 +223,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-parts.c.inc b/fpu/softfloat-parts.c.inc index c380f30fae..6df98eb5fb 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -1607,22 +1607,24 @@ FloatRelation partsN(compare)(const FloatPartsN *a,= const FloatPartsN *b, /* * Multiply A by 2 raised to the power N. */ -static void partsN(scalbn)(FloatPartsN *a, int n, float_status *s) +FloatPartsN partsN(scalbn)(const FloatPartsN *a, int n, float_status *s) { switch (a->cls) { case float_class_snan: case float_class_qnan: - *a =3D partsN(return_nan)(a, s); - break; + return partsN(return_nan)(a, s); case float_class_zero: case float_class_inf: - break; + return *a; case float_class_denormal: float_raise(float_flag_input_denormal_used, s); /* fall through */ case float_class_normal: - a->exp +=3D MIN(MAX(n, -0x10000), 0x10000); - break; + { + FloatPartsN r =3D *a; + r.exp +=3D MIN(MAX(n, -0x10000), 0x10000); + return r; + } default: g_assert_not_reached(); } --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507765; cv=none; d=zohomail.com; s=zohoarc; b=Rz8MIMMYmoQmwo4jS6cKWgsOrEOAegExWp/3QsVopnjE1rDGWXO9XErg/7BOam33Z6tz6ne85UQ+mtlj9+sYgP4SFG9ihO3Izt0p4yLIRmHJ0QZgLnOMP24/t0/BwgehAgh5isbTJnbxA/RShL9Jny/mBuEmQ4czeDKBr2hIPRo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507765; 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=JJ+2mrZj2pb/FuoZHFmN0VWVvULjnuLwIvCT2CXO/do=; b=UE7tz87qPr7WRebygBbULe7CzdSw0rgdoOQ43VWx0h/Bj/TOHiaxB4JwWj/Az8VNNw1UYGZFKBRxt+iJcqbNK1l+ZVOH70LA5u4Ca3YP9UtxcvuFozys9hR3ZPqrrHQkl4NDFAjubjRwxnE1iCjnnF/B/WEeTKekLiIdCCp1VVo= 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 1777507765755449.7483066226125; Wed, 29 Apr 2026 17:09:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEwL-0001Hh-1V; Wed, 29 Apr 2026 20:07:37 -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 1wIEvj-0008Ot-UP for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:07:03 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvg-00020T-Vq for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:06:58 -0400 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-82f1f6103afso165109b3a.1 for ; Wed, 29 Apr 2026 17:06:56 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507616; x=1778112416; 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=JJ+2mrZj2pb/FuoZHFmN0VWVvULjnuLwIvCT2CXO/do=; b=NohtZ3QVqvMCjVMiZNbw2CfFfrQv/l9+zbOY8fONak6atC7dpAImr8DvSIZCBjxALT VyS/Em7qb4kte7ctC2BOgzxOqCR5biKrZOokTLyjaOGoPALvBk6o+5Y3uFB0iEX2c7Z4 9E9CW9mUUmnrMz0C9y4K/GPf4VBoovXY/yoboSAQdqmy4TT7Vps+j5F9nG4yFw/xA0N+ xC8jF26YUAmZm04F1N/BPApzSgYz/bFlY8IZdSW66LZjt/pkElDtpAYdd8kRxTsly6Xg MVmY8o2WW6T4dQgpuoaRde4un73JdnqaF2F8uA1Xw6JvtG/MQeI1gglSPrfg+G/1jqs1 ev4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507616; x=1778112416; 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=JJ+2mrZj2pb/FuoZHFmN0VWVvULjnuLwIvCT2CXO/do=; b=LQEMKVEnvd77/WHaWGyywMG8RwQnFsUg2iC2qQH8zZAWl4ClNX7E8e5NeV2jAexgYO oTkg8VFQRGFAXZ2xgxeI5tICBSuSyfBaSN0yS9q6ltnnysD7EY0rsRSH+urCOyiRBEwR eaHOHcgLQDsnxeXmwKxjPbTPo0SDLarkGMtr1g5GOWP6e2KNaS+nFMom39dyYZFnL3Xl Xaccejtcapfnn2SalfCxBsyzI4qOzNZsD9MIrMrSRXhIzmxMLNcf5Z3A9v7X49ZrizST ODqkMFXJt6PlAwWwaD9H41tLLmvZBJ37VrYxgCiOI5FWha1R3VgDoJJTLRWaoxmBAYnc 4rgw== X-Gm-Message-State: AOJu0Yz40cp72x9A3P72AE73GwOMi0U7BI/to9wJbHESCy5mxazDEZrT B+pH8OKYH9Xm4LFXnAhxlVf4/Sv4yfFwMUk3JaMverIeYZwAFdB17HN9l5+0/qtlrRaY0+/h+N5 qQamIZ+E= X-Gm-Gg: AeBDievJghXq2ViNhVk54RIGIxUPCL6CWlMUIUU8CHbjPbJLV5a74ZvPnKGbmEOEWpp /W+JgJ6baDs0QwIvUSX9TqoZdeumt2LdmFZV+fU/FBCmQ/alnPyciPURSBKLTcEok6tAgiQHlRC jXfJJxK3zniXvBi8XaLbCg5PAxuKqfYfgQfGDMdnnGjGiH0eHowVxHNSpl+rAOGDqGEMIRsBc5S +TFxEbVt7tVXZ7lN3hULw5sD6eV3uhMkY376K/zt1If8DXQ8rjf1dpcf/162jj7l5wT+FBCkRfa psUzmS7/+kFmFMq/9xYTA/zLs8WUeKT+IImAslY8qrwHtW3xIsMV7K1C6khwQ5+7tUnSEvVlGR6 h/rNY3QUHgfuYVWWWrGcPkAIPHCGYuObThnde/9ICa/sms/X8H2LDXv/LP5h6X/pfGO7IBm+82M iL7Povep7blA0+Wr3VgDeuN8gmTh0F//D2fiMvr6ZU X-Received: by 2002:a05:6a00:4fcc:b0:82c:db50:ef77 with SMTP id d2e1a72fcca58-834fdca283cmr754958b3a.49.1777507615540; Wed, 29 Apr 2026 17:06:55 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 38/40] host-utils: Introduce signed saturation primitives Date: Thu, 30 Apr 2026 10:05:21 +1000 Message-ID: <20260430000524.56046-39-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::431; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x431.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: 1777507766503154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- include/qemu/host-utils.h | 60 ++++++++++++++++++++++++++++++++++++ accel/tcg/tcg-runtime-gvec.c | 20 +++--------- 2 files changed, 64 insertions(+), 16 deletions(-) diff --git a/include/qemu/host-utils.h b/include/qemu/host-utils.h index 181d026b6c..2e8da7fb3d 100644 --- a/include/qemu/host-utils.h +++ b/include/qemu/host-utils.h @@ -606,6 +606,66 @@ static inline bool umul64_overflow(uint64_t x, uint64_= t y, uint64_t *ret) return __builtin_mul_overflow(x, y, ret); } =20 +/** + * sadd32_saturate - addition with saturation + * @x, @y: addends + * + * Computes @x + @y, and saturates rathern than truncating the result. + */ +static inline int32_t sadd32_saturate(int32_t x, int32_t y) +{ + int32_t ret; + if (sadd32_overflow(x, y, &ret)) { + ret =3D y < 0 ? INT32_MIN : INT32_MAX; + } + return ret; +} + +/** + * sadd64_saturate - addition with saturation + * @x, @y: addends + * + * Computes @x + @y, and saturates rathern than truncating the result. + */ +static inline int64_t sadd64_saturate(int64_t x, int64_t y) +{ + int64_t ret; + if (sadd64_overflow(x, y, &ret)) { + ret =3D y < 0 ? INT64_MIN : INT64_MAX; + } + return ret; +} + +/** + * ssub32_saturate - subtraction with saturation + * @x, @y: addends + * + * Computes @x + @y, and saturates rathern than truncating the result. + */ +static inline bool ssub32_saturate(int32_t x, int32_t y) +{ + int32_t ret; + if (ssub32_overflow(x, y, &ret)) { + ret =3D x < 0 ? INT32_MAX : INT32_MIN; + } + return ret; +} + +/** + * ssub64_saturate - subtraction with saturation + * @x, @y: addends + * + * Computes @x + @y, and saturates rathern than truncating the result. + */ +static inline bool ssub64_saturate(int64_t x, int64_t y) +{ + int64_t ret; + if (ssub64_overflow(x, y, &ret)) { + ret =3D x < 0 ? INT64_MAX : INT64_MIN; + } + return ret; +} + /* * Unsigned 128x64 multiplication. * Returns true if the result got truncated to 128 bits. diff --git a/accel/tcg/tcg-runtime-gvec.c b/accel/tcg/tcg-runtime-gvec.c index ff927c5dd8..67a741e45e 100644 --- a/accel/tcg/tcg-runtime-gvec.c +++ b/accel/tcg/tcg-runtime-gvec.c @@ -1109,10 +1109,7 @@ void HELPER(gvec_ssadd32)(void *d, void *a, void *b,= uint32_t desc) for (i =3D 0; i < oprsz; i +=3D sizeof(int32_t)) { int32_t ai =3D *(int32_t *)(a + i); int32_t bi =3D *(int32_t *)(b + i); - int32_t di; - if (sadd32_overflow(ai, bi, &di)) { - di =3D (di < 0 ? INT32_MAX : INT32_MIN); - } + int32_t di =3D sadd32_saturate(ai, bi); *(int32_t *)(d + i) =3D di; } clear_high(d, oprsz, desc); @@ -1126,10 +1123,7 @@ void HELPER(gvec_ssadd64)(void *d, void *a, void *b,= uint32_t desc) for (i =3D 0; i < oprsz; i +=3D sizeof(int64_t)) { int64_t ai =3D *(int64_t *)(a + i); int64_t bi =3D *(int64_t *)(b + i); - int64_t di; - if (sadd64_overflow(ai, bi, &di)) { - di =3D (di < 0 ? INT64_MAX : INT64_MIN); - } + int64_t di =3D sadd64_saturate(ai, bi); *(int64_t *)(d + i) =3D di; } clear_high(d, oprsz, desc); @@ -1177,10 +1171,7 @@ void HELPER(gvec_sssub32)(void *d, void *a, void *b,= uint32_t desc) for (i =3D 0; i < oprsz; i +=3D sizeof(int32_t)) { int32_t ai =3D *(int32_t *)(a + i); int32_t bi =3D *(int32_t *)(b + i); - int32_t di; - if (ssub32_overflow(ai, bi, &di)) { - di =3D (di < 0 ? INT32_MAX : INT32_MIN); - } + int32_t di =3D ssub32_saturate(ai, bi); *(int32_t *)(d + i) =3D di; } clear_high(d, oprsz, desc); @@ -1194,10 +1185,7 @@ void HELPER(gvec_sssub64)(void *d, void *a, void *b,= uint32_t desc) for (i =3D 0; i < oprsz; i +=3D sizeof(int64_t)) { int64_t ai =3D *(int64_t *)(a + i); int64_t bi =3D *(int64_t *)(b + i); - int64_t di; - if (ssub64_overflow(ai, bi, &di)) { - di =3D (di < 0 ? INT64_MAX : INT64_MIN); - } + int64_t di =3D ssub64_saturate(ai, bi); *(int64_t *)(d + i) =3D di; } clear_high(d, oprsz, desc); --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507795; cv=none; d=zohomail.com; s=zohoarc; b=WOE1Z7IP2VUrdSTGX7iSquzvDk20SZge079xVaByHDnW5Vt50XtkJ9OqF8uqppYLkydfek4SXW7UxIE+HzLgdv0WGEtcIuNPHUOrgOTxqT5NYZsrhvfMz4Jw+XbERWWskWaA2R9ILzoPnht5we8xrfc93kKSjdFnu4ZhIMu3wnk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507795; 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=T2ZghK4sNfiM5z8zyNlYLTncliVfy0NuA2KHs5cYwz0=; b=IiTCyNw+2GO1O5sr/aoshsgRmc9ak2nKQQRoHF2PhgjMvbqf9tJjTTtcz4lL3iy5eTWmA3pwG1hsObckcIxaFH64GyWdvhaOaBxeFeFGJCjU7+MY5BWq5XoFo0msaXtNYnRkWnHOyvlRFDsPiOeQxaezLUDtogKRGQX2h1aKNkA= 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 1777507795965103.00188660477022; Wed, 29 Apr 2026 17:09:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEx8-0003TH-5G; Wed, 29 Apr 2026 20:08:26 -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 1wIEvl-0008Qh-7Y for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:07:04 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEvj-00020r-Lh for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:07:00 -0400 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-82f8b60e54dso219986b3a.2 for ; Wed, 29 Apr 2026 17:06:58 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed7ef7a8sm2928667b3a.47.2026.04.29.17.06.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:06:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507618; x=1778112418; 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=T2ZghK4sNfiM5z8zyNlYLTncliVfy0NuA2KHs5cYwz0=; b=mhslQS4Ltt5KX0bj/8oX8FMantG4XkpyXnEkQ5mI84o91FWkrkCkjRJZRp2iWsF31a daHjXP2fFFC2iGwC04C8en6rTIyYjz92xzIkPJQDzpM34ZchogJzmrEvcPrG87jnLCxJ KVOrH8YY1qNrcTwxW03k0eC+TM0sExbvAVvdB55PcYjoUNNg0TtoFldDSoTZgrkiWVP8 dN5rO90hnWni5G6XZdntIm9ub7gPOxuXfMC8scWd4J2KNgzWmlY7y6QJUJwWk7RejG8b aoELkNYSMtYh3KWk+C9JbCpsigP5rbOyJ/le5WTEPRTQvvqSXT/XXDIn7a1/gO5beEie TIBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507618; x=1778112418; 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=T2ZghK4sNfiM5z8zyNlYLTncliVfy0NuA2KHs5cYwz0=; b=mmCHEw7tMs6jVTwuuJTRrcofR3aQR8ydnNxZQC0S4TrwEPq0GGtXD2UBab4JjYvsPJ nGrlm5tqZazw/FjdhVlVNejejilAquljY4/HtPelrqZYvoRl1A29XUzIM6a0TkxB28t3 Lc6FBsffH6PEAYJOUEUowvW3eWRh7TOqiUIVc9ih1qogFMPXknfY7VuAdMwTEEKzg/a9 cfIVNwE3m7Crn3XY1N/19MeDCykKjE1PzXQa+yHq5ubUMFpVWLsLOKxunU2gwR/PJ66n dijq1Zvz1HPiFU4fUwl8amcsZWPgpXyWiT9e3Rq+AisbXBopJ3CGJWr8gyFB8MubWxo4 Anbg== X-Gm-Message-State: AOJu0Yy39aRfBHsqbcO2fcNeAe40DZJYR+aEmtsWvgijHZEiWppKLhpr JAixIattjNxXOMV/yGNrbzp1Q7x/uMbrx7ErOLSjTyWzdXpxx7YFJkJUGjHlKEHCf72JtAgBqWU iJcPxZww= X-Gm-Gg: AeBDievtgENF5uV9alW6e9zGqrTbE8BWpiPkzbV2xQZWqUWSfVbYoGuKJxphuuHcWua tmlBJLYXJ0txJiO8KwEiXvtztedQevMB1vhVgf3F4Iw7yaqdnguayyiA5Ycq64uT32QGGbmsZWf podWh7wsW2iS1IVWRGTy1XgFhVW1NTI/02M8kXFVxhchzY0kQdK8k43+2gvy5o0Wx/Xh/43RBZv aoyRbLl2/Xl2txEO9TsJ8h9qXv83I1JBe32V+sabfBnr7fy2Fw7zBIEjxjQJK+z4J9MLRaDLZPm iszXPqCDsDFRu4O11Zxf1Smad96rv4dRETDIh9Evg8vdEQl9ChAtWL2qboKHKHPTlupYAXr6nJt x7dZS3PiEXir9zdtX5MMEg+K5G2KdhbSSPGqa8Sw86OVZsywQ5bWQdQ5usM+WtHc+hBKNTy0i9t 0/aVdrucerMyDg93tWbNEI+rRPUGuns9YTSicimWTh X-Received: by 2002:a05:6a00:6c81:b0:82f:a6bf:bede with SMTP id d2e1a72fcca58-834fdbfebc5mr832422b3a.40.1777507617664; Wed, 29 Apr 2026 17:06:57 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 39/40] fpu: Saturate the exponent in uncanon_normal Date: Thu, 30 Apr 2026 10:05:22 +1000 Message-ID: <20260430000524.56046-40-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::432; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x432.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: 1777507797045154100 Content-Type: text/plain; charset="utf-8" Notice the conflict between saturation and rebias_overflow, which should never happen. Otherwise, saturate to INT32_MAX and allow the usual overflow to max, infinity, or dnan. Signed-off-by: Richard Henderson --- fpu/softfloat-parts.c.inc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 6df98eb5fb..c5a828eb90 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -341,7 +341,17 @@ static void partsN(uncanon_normal)(FloatPartsN *p, flo= at_status *s, g_assert_not_reached(); } =20 - exp =3D p->exp + fmt->exp_bias; + /* Because exp_bias is positive, we can only overflow past INT_MAX. */ + if (sadd32_overflow(p->exp, fmt->exp_bias, &exp)) { + /* + * rebias_overflow wants to compute a modulo exponent, which + * conflicts with saturation. That said, saturation can only + * happen with scalbn, which is not a PowerPC operation. + */ + assert(!s->rebias_overflow); + exp =3D INT32_MAX; + } + if (likely(exp > 0)) { if (p->frac_lo & round_mask) { flags |=3D float_flag_inexact; --=20 2.43.0 From nobody Sat May 30 19:23:37 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=1777507831; cv=none; d=zohomail.com; s=zohoarc; b=QjUvtor4xyxRkSYr/tU4ZB/IneUiUyIhtqUu6v32PCF8+O5AzelVhfA6OzolEjOW1+aGa7UNjHi70hSTF6iugBCfvKDLf2ywU+CvctvWF0e0OLtUELM60T+9tha11dCnn8d3AKMVayFQAuTYs1Uk0YoT07IhosPA8KI3YNjhymk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777507831; 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=Tno4FRdkKISmgYOrfh62o7rJBcHuyC+6/bmV3xDjQJQ=; b=PSUJ0xvFLrsfH7SFfwNDYWZ9Y8+rjIDFm8OltbrloXFSgmRD/u3nBmnC8LMntCdzwKWl77Toc8TPoYAvPOE+9Bu+lXoFsk5o2/cZvmBLzuAScq3y4bGKAPA36UkrgmMIXE1jqXPCvMN5ykACYaFomG+LZVkjfXMRfBMxqXf0Nr4= 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 1777507831007367.58565103060266; Wed, 29 Apr 2026 17:10:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wIEyp-0007n2-Q4; Wed, 29 Apr 2026 20:10:11 -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 1wIEyk-0007Cf-Oh for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:10:07 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wIEyi-00038v-Qq for qemu-devel@nongnu.org; Wed, 29 Apr 2026 20:10:06 -0400 Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-82fa8d6425bso180182b3a.0 for ; Wed, 29 Apr 2026 17:10:04 -0700 (PDT) Received: from stoup.. ([180.233.125.15]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed80df96sm3052272b3a.54.2026.04.29.17.10.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 17:10:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777507803; x=1778112603; 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=Tno4FRdkKISmgYOrfh62o7rJBcHuyC+6/bmV3xDjQJQ=; b=ztFFbXerc4HuGW0krNWKbnR5FkasZB15K5h6UPzXvBi668tYlAizx5/CbxcqbhQUam Ni1YRGSOvZVLLyfVnvnvgdbjbz8dCPyxzMfEE80+GxAy7aU4M2x/h125OKKYCISQbIYO QRwHmYCvgGz7uEIQFNAWXTtN4POBW08Pzs6/IHRVoiY8KCj02vv6JmvzV6CzGrA11OtJ slFVlcsw/MdsY3PjcW38JROP/QazvQUyCNS/LvpOfWu3TveTeHu6jutKxoRrShb15eoJ 4CnTasvYmie3WEuEWSn+l9sBayqfqXEjqnAjiVnyHGveHJMkeXmEa6WNJfuiGFAwuOYt VtUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777507803; x=1778112603; 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=Tno4FRdkKISmgYOrfh62o7rJBcHuyC+6/bmV3xDjQJQ=; b=Mt/ZXgTOoNRB+GjhVGuMdNX2B/rV7fUB7p/VPFOW7cOsuPFnFppD8Nt4iOZHLM0Mpu va2r89NqGCUSaBZBPBDw338qmVErJbKNZQddv6T1h0NiI3qmd3xz38bkLjvlFmX1geQm AfbqCb0Kka+rBIZWPGt6kEzlVnGmV7M4YWRBdbycXcbaKPpENjeWecJ6NvbeaGd9ZGxe cCwQAdNdVUgA4xYU9JsHRxVznLfG2OF6Qyob7HHXEweEy67xkGTvZU5AzsPERMBRtWJa 8r8nQFF1lbTjj4o1V+j1hmKp4yCx3gjM6PvwSe/6qQWtPGzXX2ATFfg+Fq0xdaeLs8Jk r3pQ== X-Gm-Message-State: AOJu0YywDEGpVVpVirafSz++VNhbV3UyPhS5q90YopiXyAG7T/mvMR4Z hOGrq83zxuMVRotJQcLZhd5240wolZrOfl0qiyRkXifB5Uq3/IehR16STY4H4jQPSgLVLJAUa1z Q0QI6LP4= X-Gm-Gg: AeBDietLqcE1tIjKNZMCvrJSIaDvxci5UeANDLPxvP0xritfaqbFCB0M+6sNJ6XM2GK lAbaPZZZ8wmnOfuI8e8urel0XLR5hiJdqg2oPCCeLtCxXmrTVX08eANzEZb7U/J3Y3vbeCLyhCM BjGLeWUF1r5Szj/I6BpxW4aCZIebi5PePlPLvDLMdOB+NqlUkElYYGzOEcLhx0zpgA+/b/B23rw /xoa5S2S4fMqLehHH4ESuFfJVL9ElkCVKWDsQ9EUK09qzsvCvxWVZvdYNUhg1gsd45Irq3RPtuM cz+hTwloCRYoYOaG2Zl70sz2423cTNZB+nNBH0yuhGK3w10Fp5OfavQeXKJYXrREFgBCP6aRmll moDgsjJeIZXMPHHqtA4sDB0udi3ZdTKAeblOhC0wxMfaGw3eAhVmYyu+Dmnk4nI3fmtbxPKwEMp pQ7f/pKBJgzyxJCJgztOTevWgylw3A+eDnAfD5YxpaZ1Yt/TQ8kR8= X-Received: by 2002:a05:6a00:4c8d:b0:82f:48e:241c with SMTP id d2e1a72fcca58-834fdbe464amr754190b3a.23.1777507803242; Wed, 29 Apr 2026 17:10:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: philmd@linaro.org Subject: [PATCH v2 40/40] fpu: Introduce exp_scalbn Date: Thu, 30 Apr 2026 10:05:23 +1000 Message-ID: <20260430000524.56046-41-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430000524.56046-1-richard.henderson@linaro.org> References: <20260430000524.56046-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::430; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x430.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: 1777507831494158500 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 --- fpu/softfloat.c | 17 +++++++++++++++++ fpu/softfloat-parts.c.inc | 5 ++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 6a14c5d639..a6ab3ee0f8 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -601,6 +601,23 @@ 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 (unlikely(exp =3D=3D INT32_MAX)) { + assert(scale >=3D 0); + } else if (unlikely(exp =3D=3D INT32_MIN)) { + assert(scale <=3D 0); + } else { + exp =3D sadd32_saturate(exp, scale); + } + 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 c5a828eb90..789a41d24e 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -1107,8 +1107,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; @@ -1632,7 +1631,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