From nobody Sun Feb 8 05:28:52 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=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1769713780; cv=none; d=zohomail.com; s=zohoarc; b=EPPxsCM+1jw1H8UsbpJrMbrj/Rj5abvKCR8HaAmkPW/OBY92fFbTzfQIDriBFkIXqOcx4xomex15DDh2rKS5hUMSyNV8ERyKer4fpXmf615EZSCq89D7URp8Ih+2EqQoRYNArRdsiKMLZMMAGAT3pO/9xmmAwgQ5UsI+9lDAhFI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769713780; 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=vqDXrijuYD9KEX3PYVErMrFONPQQKLMeoFaQW/jTcxE=; b=KArpimyHBOUKusOdGN4yRjoNw2hZs698iuncCrb4hJI5F9z+Q6R5IDc1OVSlFz0VSf7mc+4gdglEC7r4aYrGJkZYC1YfJPzfN0LmTNkY8o25Zk+fHoovK+pCTe2CViiFndMWz/rHm9a5NVYei6MqdNnPU190cXM6fTAyE7cpRdQ= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 176971378030799.63796276427865; Thu, 29 Jan 2026 11:09:40 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlXOK-0003I0-Lj; Thu, 29 Jan 2026 14:09:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlXOD-0003G6-R1; Thu, 29 Jan 2026 14:09:13 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlXOC-0003Aj-6T; Thu, 29 Jan 2026 14:09:13 -0500 Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 60TEq0DI012136; Thu, 29 Jan 2026 19:09:08 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4bvnr6fjw6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 Jan 2026 19:09:08 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 60TGRSB9026340; Thu, 29 Jan 2026 19:09:07 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4bw9wkk6uv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 Jan 2026 19:09:07 +0000 Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 60TJ95Dc36176130 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 29 Jan 2026 19:09:05 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8EC492004D; Thu, 29 Jan 2026 19:09:05 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 11DE820040; Thu, 29 Jan 2026 19:09:05 +0000 (GMT) Received: from heavy.ibm.com (unknown [9.87.137.8]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 29 Jan 2026 19:09:04 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=vqDXri juYD9KEX3PYVErMrFONPQQKLMeoFaQW/jTcxE=; b=ANAxTxkoYYFI+0Hb1B2ZSH lYzj8Ll+PqM4pGf3bUiU2/WhD5h5IFXaMjoTGcLmYFrG1XCRdSDcILk5oFz2El1x X+zUgQ3GJm4hNc57KVoPztd17ybxwU9btJRIZq8w/WDuiU67BJ+RWHtVQMvPBeNj 0ocuOwLUDl5WpYw5ry/EomcdLsp121MPUsaqCBe5WRFlwHcVrtBFFjqXFidyBamy OSISIwJVk++KmpW/lbg5eIjK3ulrNwdrdjD+ESGXzpkQ34gHVHNrwPxHT35so+oo 3NUIhaqoKT3Egzrlu2KdFIG2sT45jZ4F2aFbwr/suYEJl52owVP0UGiveG/ayhJQ == From: Ilya Leoshkevich To: Thomas Huth , Richard Henderson Cc: David Hildenbrand , qemu-s390x@nongnu.org, qemu-devel@nongnu.org, Ilya Leoshkevich , =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [PATCH v3 1/5] target/s390x: Dump Floating-Point-Control Register Date: Thu, 29 Jan 2026 19:57:21 +0100 Message-ID: <20260129190902.196262-2-iii@linux.ibm.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129190902.196262-1-iii@linux.ibm.com> References: <20260129190902.196262-1-iii@linux.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI5MDEzNCBTYWx0ZWRfX1GseVeKjdpkQ +Y9xqBmYgFhhtVfjRgBd126XXvhgDMNI2ZVQxRPbG/2DwvBKJk5JCBeZiUwiHHvF9h535hmthKj yMd70PlduQ/hxia2BX/liBkymU/zKCT3Nlta8ONnKS4CU8n1IVGMS0mbxj5IHncB93sbvQ2rynj rdHsmpOJ7WsCOxKo2Oo4KYiXybbxc0X9qiFlrKrxHteYuKrH9+V6Paua7gvGccW6mETWfCb7lrc 9GFuWyEVB0K6oUh5T8Jr9DsO8XEWxxBYRUZ9+YbQyadKgO1skSKgHmBAGvu8ihsxpk3uwp49xnP kS0l2iwwN5TxmtBRRD4ft2W2cYa2RTjyHGzsPCzVf579hrrIx4fuooC1riRGcZQZCeZ/QjZdHAU TPC3UDrlf2QXVnlpOAye2KcThx7NLW/VWjGnF+K4TqAXI6IpxPekqczbVD+2C9I0tDzfkRcyelG EZNMmtfIFuoJOEzZdzQ== X-Proofpoint-GUID: FZEt0Bt-zbFF2YAJDO_DPSeqhIBJuYK8 X-Proofpoint-ORIG-GUID: FZEt0Bt-zbFF2YAJDO_DPSeqhIBJuYK8 X-Authority-Analysis: v=2.4 cv=X+Vf6WTe c=1 sm=1 tr=0 ts=697bb054 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=VnNF1IyMAAAA:8 a=WEarJFB7UarLcg5xSFgA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-29_02,2026-01-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 impostorscore=0 lowpriorityscore=0 clxscore=1015 spamscore=0 adultscore=0 malwarescore=0 bulkscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2601290134 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=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=iii@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @ibm.com) X-ZM-MESSAGEID: 1769713783067154100 Knowing the value of this register is very useful for debugging floating-point code. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Ilya Leoshkevich Reviewed-by: Thomas Huth --- target/s390x/cpu-dump.c | 1 + 1 file changed, 1 insertion(+) diff --git a/target/s390x/cpu-dump.c b/target/s390x/cpu-dump.c index 869d3a4ad54..5b852928031 100644 --- a/target/s390x/cpu-dump.c +++ b/target/s390x/cpu-dump.c @@ -63,6 +63,7 @@ void s390_cpu_dump_state(CPUState *cs, FILE *f, int flags) (i % 4) =3D=3D 3 ? '\n' : ' '); } } + qemu_fprintf(f, "FPC=3D%08" PRIx32 "\n", env->fpc); } =20 #ifndef CONFIG_USER_ONLY --=20 2.52.0 From nobody Sun Feb 8 05:28:52 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=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1769713789; cv=none; d=zohomail.com; s=zohoarc; b=Oplkk7tpskDyoM/MXxfKBnjnSH75TK5z3nOWrkb4nz3fdPhwbOfN/fY4gpBsSjipvQQQfuPUNRLbmuM7vE5yHZv96lL7kfsz99Vy0AOvHq6f7zk5j2VTvytAtLiJnzClUjK8jcDTuKWCFrbmP1R0vLBfNJ0ycx/CdNY8fzdk1Dg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769713789; 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=CCvIEN9tc8rLlHpmZNoD8BroPXpZBWqr9pHFwWx1JtQ=; b=OptfT9A/1Ocdp7Zze+LWJBCjaWGU2Fjkiq1EAMFvAkdRZDF6J8goni41Wyq1Mo+YarIzyFqnrXj3ZdCZwKQewu+tYG6lamgvwMwzSgJqSinNZdkmPG5RxP2zxWGhXFcEQsnPpiWXcwzCHlLna+i93gHNileK9rEUXyHwZNMV6s0= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769713789968315.4310572810123; Thu, 29 Jan 2026 11:09:49 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlXOf-0003p9-27; Thu, 29 Jan 2026 14:09:42 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlXOP-0003Td-29; Thu, 29 Jan 2026 14:09:25 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlXOC-0003Ao-Mb; Thu, 29 Jan 2026 14:09:14 -0500 Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 60TERdR6012527; Thu, 29 Jan 2026 19:09:09 GMT Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4bvnk7ajbd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 Jan 2026 19:09:08 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 60TGSmG4023341; Thu, 29 Jan 2026 19:09:07 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4bwamk32xy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 Jan 2026 19:09:07 +0000 Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 60TJ96LR30474544 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 29 Jan 2026 19:09:06 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1A16D20043; Thu, 29 Jan 2026 19:09:06 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A517E20040; Thu, 29 Jan 2026 19:09:05 +0000 (GMT) Received: from heavy.ibm.com (unknown [9.87.137.8]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 29 Jan 2026 19:09:05 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=CCvIEN9tc8rLlHpmZ NoD8BroPXpZBWqr9pHFwWx1JtQ=; b=Q5ccV0geZfzGME8rSgeI/48EB5BFyYuU6 uaByuNnMbREm7uBwNk9ac9DP/s48wt1cghruMHG/w0Rtj1Si5pR45PC4suCERaH+ fyPTA7yRZJ6Wpcg2gl+/rbogmUKUDj/XDuhKin/3AgTHNDMMMNGrOH1mUEQo+SlC IKAD2tMJtrenGKAXW+mEzwYyxw+tDT5emwKIUZg69WkH9sZah5TUJEtDmExCVP3H XWdY9EAjy38a3cENGdBz9MNky/FqZShpatdfRU6Kbrcl9QHk02cpm1IeqUvedIMw XRFSFRoWFxqf9QSvZmfOU8TmevPXDDuZqxvgWwZbsIRg8EeVBPQeQ== From: Ilya Leoshkevich To: Thomas Huth , Richard Henderson Cc: David Hildenbrand , qemu-s390x@nongnu.org, qemu-devel@nongnu.org, Ilya Leoshkevich Subject: [PATCH v3 2/5] target/s390x: Extract s390_get_bfp_rounding_mode() Date: Thu, 29 Jan 2026 19:57:22 +0100 Message-ID: <20260129190902.196262-3-iii@linux.ibm.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129190902.196262-1-iii@linux.ibm.com> References: <20260129190902.196262-1-iii@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: w2J9ZWpIVvDxAe6UTLDe090jbz-Xn_Fs X-Proofpoint-ORIG-GUID: w2J9ZWpIVvDxAe6UTLDe090jbz-Xn_Fs X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI5MDEzNCBTYWx0ZWRfX83d9BzWsBpVJ Mc2dy2Nz28j+SI1cR1Pd99LFcUZ0vhb0wZufaamI6sX9grlWyKU3FP2bMvhc8Nlqs31Jh/caOyo /sfxRIETaiKLUqoR0senxCJWMG2e5jPQdr/Jw131TTXpUJfaZdlyP/Hr/EIVA72K5Elye+yo+AD qWpK6n33EtgDyqWiWAMAqmRU97IfitE1qr/HhLtjxouU7U5WaT3BevmXrn/EYX8ywDWzi3IkWeN H1m/Y/v+raTVfAN2kBDytLLZOzYf9moBS7IczzZ8WQFVbMJMlcZ85zXiN+yAhjrjrQkd5oBKl4p 9bQ7F8Q+iTLSrNNZdrseSF6CGxDDm8+SR6zKgzDzArf7d3o3D9omQoijAT2d+NjXmUPKQ3FcQzf 1P924GAKYhjfqzbRrh2p4bmplmptRi1dmvy6W+8Neya/yYu5qpHqpRkPXeRTHei8SOrjnqCxNq7 Ml3Tw0eJ9w8Il5kUXwg== X-Authority-Analysis: v=2.4 cv=AMiVTGgp c=1 sm=1 tr=0 ts=697bb054 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=VnNF1IyMAAAA:8 a=rpvzK0fK5gZwkPUVIkQA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-29_02,2026-01-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 phishscore=0 bulkscore=0 suspectscore=0 adultscore=0 clxscore=1015 priorityscore=1501 lowpriorityscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2601290134 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=lists.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=iii@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @ibm.com) X-ZM-MESSAGEID: 1769713792199158500 Content-Type: text/plain; charset="utf-8" For DIVIDE TO INTEGER it will be helpful to pass final-quotient rounding mode around explicitly rather than setting it in fpu_status implicitly. To facilitate this, extract a function for converting the mask to the rounding mode. Reviewed-by: Richard Henderson Signed-off-by: Ilya Leoshkevich Reviewed-by: Thomas Huth --- target/s390x/tcg/fpu_helper.c | 62 +++++++++++++++++------------------ 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/target/s390x/tcg/fpu_helper.c b/target/s390x/tcg/fpu_helper.c index 1ba43715ac1..7a3ff501a46 100644 --- a/target/s390x/tcg/fpu_helper.c +++ b/target/s390x/tcg/fpu_helper.c @@ -56,6 +56,35 @@ uint8_t s390_softfloat_exc_to_ieee(unsigned int exc) return s390_exc; } =20 +static int s390_get_bfp_rounding_mode(CPUS390XState *env, int m3) +{ + switch (m3) { + case 0: + /* current mode */ + return env->fpu_status.float_rounding_mode; + case 1: + /* round to nearest with ties away from 0 */ + return float_round_ties_away; + case 3: + /* round to prepare for shorter precision */ + return float_round_to_odd; + case 4: + /* round to nearest with ties to even */ + return float_round_nearest_even; + case 5: + /* round to zero */ + return float_round_to_zero; + case 6: + /* round to +inf */ + return float_round_up; + case 7: + /* round to -inf */ + return float_round_down; + default: + g_assert_not_reached(); + } +} + /* Should be called after any operation that may raise IEEE exceptions. */ static void handle_exceptions(CPUS390XState *env, bool XxC, uintptr_t reta= ddr) { @@ -416,37 +445,8 @@ int s390_swap_bfp_rounding_mode(CPUS390XState *env, in= t m3) { int ret =3D env->fpu_status.float_rounding_mode; =20 - switch (m3) { - case 0: - /* current mode */ - break; - case 1: - /* round to nearest with ties away from 0 */ - set_float_rounding_mode(float_round_ties_away, &env->fpu_status); - break; - case 3: - /* round to prepare for shorter precision */ - set_float_rounding_mode(float_round_to_odd, &env->fpu_status); - break; - case 4: - /* round to nearest with ties to even */ - set_float_rounding_mode(float_round_nearest_even, &env->fpu_status= ); - break; - case 5: - /* round to zero */ - set_float_rounding_mode(float_round_to_zero, &env->fpu_status); - break; - case 6: - /* round to +inf */ - set_float_rounding_mode(float_round_up, &env->fpu_status); - break; - case 7: - /* round to -inf */ - set_float_rounding_mode(float_round_down, &env->fpu_status); - break; - default: - g_assert_not_reached(); - } + set_float_rounding_mode(s390_get_bfp_rounding_mode(env, m3), + &env->fpu_status); return ret; } =20 --=20 2.52.0 From nobody Sun Feb 8 05:28:52 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=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1769713834; cv=none; d=zohomail.com; s=zohoarc; b=Vhq1GvNVvW2gODy29yHK90+eplLykC148KVNNEKP8c06vzl4xKaoJfX5Rc6exEYhilnzK9rv7Od/fVFdd1WEIp+G/br95e4kP94MSyNUr6MaZj5BEMamkkdzJZCCoTWodOxPm32GVhM93J/1+IalE3s3QnoGYTxD/0bnRQbB50I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769713834; 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=K/sebiUn2HvzVNjBbc4GSlaUQut/Y+hIcZ7uUyoXTbk=; b=KRhLuqvWZ3X6d9Bw8A479LhYqU9qVrUNQ1hSIfEE1lPEnKXp8piz7M6QaJJ565D/j7wu+BjMbFbs7YYDzKZSHBmeB2oa97+eVh36H2PJjCMkTl86rVbE8vG3R9W/F/g94hzuYBKYPopwNsedeJLhOCEDm1apIdSlCQpKfHMWUFc= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17697138346791021.8692037696791; Thu, 29 Jan 2026 11:10:34 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlXOa-0003dn-00; Thu, 29 Jan 2026 14:09:36 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlXOP-0003TH-0I; Thu, 29 Jan 2026 14:09:25 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlXOD-0003Au-4W; Thu, 29 Jan 2026 14:09:14 -0500 Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 60TEppe3011231; Thu, 29 Jan 2026 19:09:09 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4bvmgg7tqj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 Jan 2026 19:09:09 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 60TH4kwh018045; Thu, 29 Jan 2026 19:09:08 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4bwb42309g-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 Jan 2026 19:09:08 +0000 Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 60TJ96hP30474546 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 29 Jan 2026 19:09:06 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9B3AF20043; Thu, 29 Jan 2026 19:09:06 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 315A920040; Thu, 29 Jan 2026 19:09:06 +0000 (GMT) Received: from heavy.ibm.com (unknown [9.87.137.8]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 29 Jan 2026 19:09:06 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=K/sebiUn2HvzVNjBb c4GSlaUQut/Y+hIcZ7uUyoXTbk=; b=A6g3tkaGzT9w+5oRmpHfSfpinL6nv/7ih 9y6rV5Jq48HLx+bmWn+/G5ywqa34a58Gumq94DLo8OWCglHcv5RSoIV15eylwODm ND88DNZ5y5f7KqXjrzOucR9hPULBcIseNVHbcTR3mIGPaPVSOjcxxsRankmo6uTg mX55os364spMrR8lylnvxUoxbAJwSDczkgTXIJp/pyv3dFZowd8Z3XRCO4/N2CfF vLvclB9n3bgBITU4SJXmhej9JbyUVK0DcfvZp65w7eVfcgK15x0AfiMOpSliTvtK Nuz39K3VjnJ+LRc85UduGq66Ud5duY45dOdoZbdGyF+DsSBsxr6AQ== From: Ilya Leoshkevich To: Thomas Huth , Richard Henderson Cc: David Hildenbrand , qemu-s390x@nongnu.org, qemu-devel@nongnu.org, Ilya Leoshkevich Subject: [PATCH v3 3/5] fpu: Restrict parts_round_to_int_normal to target precision Date: Thu, 29 Jan 2026 19:57:23 +0100 Message-ID: <20260129190902.196262-4-iii@linux.ibm.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129190902.196262-1-iii@linux.ibm.com> References: <20260129190902.196262-1-iii@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=Z4vh3XRA c=1 sm=1 tr=0 ts=697bb055 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=Y7_wFDRbBJZQL2pu5q4A:9 X-Proofpoint-GUID: OhW2xG-SxgqjpLgIRs_OtBmjmX5EJvMe X-Proofpoint-ORIG-GUID: OhW2xG-SxgqjpLgIRs_OtBmjmX5EJvMe X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI5MDEzNCBTYWx0ZWRfX+q9+lCcfd7Fm hxPRbBTNqWQY1WcZjiq/gxCCmCI8G8GVf3ZBRK6PEHlsWnFt8fdSiEpvafpm5JhiAZNpwa9TNl2 /iM4LafScc6rKL+NLElNHwnUQ/Fo5VZMTrpTcffovA19cvPXN5glg6dKpgkO7tLjUSTtydHJJAF nc5LgadTjGa7kmedsJD3JCFE55VLSGFKu0FBiPwyS/Zxta4zajl6xQ9c7UuwqNBxKCsyX+WE6k1 l3GFFImGADZkoFudLAERb3QhfM8ulI09Bk/wFZVU6J5iWsP9ESYMSLArA2gyYR2sjrXderdYzcr P4siEve4Ntp/F0mACj8ejMRDjh3gAvj6VEAYQmO/VcWD3vqV2xdBLP19v0EaVnqIECJOL8scKgm 0Ws2xiJc70IrXA6dvWTgkvyXk2gDN5gULSTJ4dPcWAtQalVpt2SnrYh98qX54s5QFwFPnhWSPzp lHb6xmfQn9EC6bssf8w== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-29_02,2026-01-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 malwarescore=0 phishscore=0 priorityscore=1501 bulkscore=0 adultscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2601290134 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=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=iii@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @ibm.com) X-ZM-MESSAGEID: 1769713836759158500 Content-Type: text/plain; charset="utf-8" Currently parts_round_to_int_normal() assumes that its input has just been unpacked and therefore doesn't expect non-zero fraction bits past target precision. The upcoming DIVIDE TO INTEGER use cases needs it to support calculations on intermediate values that utilize all fraction bits, while at the same time restricting the result's precision to frac_size. Delete the "All integral" check, because even though really large values are always integer, their low fraction bits still need to be truncated. For the same reason, make sure rnd_mask covers at least fraction bits past target precision. Signed-off-by: Ilya Leoshkevich Reviewed-by: Richard Henderson --- fpu/softfloat-parts.c.inc | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 5e0438fc0b7..93ed59626e5 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -1118,11 +1118,6 @@ static bool partsN(round_to_int_normal)(FloatPartsN = *a, FloatRoundMode rmode, return true; } =20 - if (a->exp >=3D frac_size) { - /* All integral */ - return false; - } - if (N > 64 && a->exp < N - 64) { /* * Rounding is not in the low word -- shift lsb to bit 2, @@ -1133,7 +1128,7 @@ static bool partsN(round_to_int_normal)(FloatPartsN *= a, FloatRoundMode rmode, frac_lsb =3D 1 << 2; } else { shift_adj =3D 0; - frac_lsb =3D DECOMPOSED_IMPLICIT_BIT >> (a->exp & 63); + frac_lsb =3D DECOMPOSED_IMPLICIT_BIT >> MIN(a->exp, frac_size); } =20 frac_lsbm1 =3D frac_lsb >> 1; --=20 2.52.0 From nobody Sun Feb 8 05:28:52 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=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1769713836; cv=none; d=zohomail.com; s=zohoarc; b=Bb0DLiO7xsgWpZNRzZxTjneDs+y6s9fd9ARzUz5kLKK71A0lvT/iAWakk95t5u9GwXPX6LbCMr1pQuWud9WGtgAUfA5KD+rqNkTI289QCHLq0+KYh3H/DbQeOWi/xWARGCj3IeUxKuUbT5XfpYJma8uXBXT7/dKcsKiur0YDky4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769713836; 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=sjCiYl32rP39o44ukbkttVSom2P5oC742zltAC3adds=; b=gukLcoZvQJubIXJ5F2bFE64ajxjQ5b/+ORYcDv1COFsSXDXiRFQ0qAmLnRm4pjYCb1vmzyu+F5tjH1cAAaw0lEsqThJtkfI+9j8UW3RabAWhfG5yaqMvu43mYCyf93QlTJR0s/Wa2QVKFwgHd6fbayTr43rvJmrd/JC86GoKfE4= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769713836840511.2857925060938; Thu, 29 Jan 2026 11:10:36 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlXOd-0003oE-3R; Thu, 29 Jan 2026 14:09:39 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlXOR-0003Uw-01; Thu, 29 Jan 2026 14:09:28 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlXOE-0003C6-T0; Thu, 29 Jan 2026 14:09:26 -0500 Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 60TElNOB024610; Thu, 29 Jan 2026 19:09:10 GMT Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4bvnrttbgk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 Jan 2026 19:09:09 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 60TGn7k4023624; Thu, 29 Jan 2026 19:09:09 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4bwamk32y4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 Jan 2026 19:09:08 +0000 Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 60TJ97F250921740 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 29 Jan 2026 19:09:07 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 28BEB20043; Thu, 29 Jan 2026 19:09:07 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B2C1A20040; Thu, 29 Jan 2026 19:09:06 +0000 (GMT) Received: from heavy.ibm.com (unknown [9.87.137.8]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 29 Jan 2026 19:09:06 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=sjCiYl32rP39o44uk bkttVSom2P5oC742zltAC3adds=; b=Y8LlZFMuarq+3/ZzVAzvqo+c0Sr193ZLC cjJMvuTdCUDzFxOc5ybiiLZvq1PMM+Z1N/foBWLh2pVJmAPWeDP7aO7qB9d3iZBw lfIVdkZ+oxPVQ/IynxKhvwc9cYqbvcF6XkMIVdUcW595Nm86BWWKUNXUwxxPVcKH Sr4WrdD07HvaQF9auzwzpaRrSajlzZfqI5I7Xbjv0ISFm715iHhH+ypNuDKmjS5R lVrAdPHZ5I4wp65AwF54atjfrboWt8TJhTMLaMBj3V6AN1oeEsm+lvysEAmONChW ZN4ovrdo3XPxn0EDAvy8Mj98tfoOQW5t2VSlhIXwBFSASc0l20FhA== From: Ilya Leoshkevich To: Thomas Huth , Richard Henderson Cc: David Hildenbrand , qemu-s390x@nongnu.org, qemu-devel@nongnu.org, Ilya Leoshkevich Subject: [PATCH v3 4/5] target/s390x: Implement DIVIDE TO INTEGER Date: Thu, 29 Jan 2026 19:57:24 +0100 Message-ID: <20260129190902.196262-5-iii@linux.ibm.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129190902.196262-1-iii@linux.ibm.com> References: <20260129190902.196262-1-iii@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: C7JKna16xFeWN7P7JPJoKUhhXlRkUnCU X-Authority-Analysis: v=2.4 cv=Uptu9uwB c=1 sm=1 tr=0 ts=697bb056 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=gfqx3tZHngwHFgT-_TgA:9 X-Proofpoint-ORIG-GUID: C7JKna16xFeWN7P7JPJoKUhhXlRkUnCU X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI5MDEzNCBTYWx0ZWRfX6lRg+ULTbu2Y fjD2UG/kLGLFAatQdp/xrMkpSRjdOABgMlLfAPhy9pZRfKpkS/6NXMlOImXUpInpnzXjBzvh+/q R9xSP3RVfY0SRWroNHdHkyvu0iS/0ftoVvc9Wy+J0y+NLHob/xPd8A3DS8LgrCpIHO71ttPJyBe 42IF/57UUl5IMCC5Raj4UR1fsZffRyUoP7c946Hv0ylkhnaiu2mT5GGdFBd5dg01vrZUQy7nXLU I6IQF6+wUkNI7Odf2hJB3LIGirbatUCuDMqNDCYL3ih2h1zHHsD5Qib2a04e21ZGa4qMtFYIY0q 7M/TOHWkU7iG1DE+lOtgRLIJL/nIEM9h40Fo61FiJGU+r72U+56fMC5m5j+uN9uWZZNXkyxJvpn yiPmyJzmNY72UdnBH69/yM31mKI+BWzmQqDHj2IyVqlA5AeJJ1rYGstFFTA/1VvcDYDF7ygjil6 96zUufmIgs8QtT/MURQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-29_02,2026-01-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 phishscore=0 adultscore=0 impostorscore=0 bulkscore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2601290134 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=lists.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=iii@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @ibm.com) X-ZM-MESSAGEID: 1769713838548158500 Content-Type: text/plain; charset="utf-8" DIVIDE TO INTEGER computes floating point remainder and is used by LuaJIT, so add it to QEMU. Put the main logic into fpu/, because it is way more convenient to operate on FloatParts than to convert floats back-and-forth. Signed-off-by: Ilya Leoshkevich --- fpu/softfloat.c | 144 +++++++++++++++++++++++++++++++ include/fpu/softfloat.h | 11 +++ target/s390x/helper.h | 1 + target/s390x/tcg/fpu_helper.c | 56 ++++++++++++ target/s390x/tcg/insn-data.h.inc | 5 +- target/s390x/tcg/translate.c | 26 ++++++ 6 files changed, 242 insertions(+), 1 deletion(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 8094358c2e4..dd744c657ef 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -5361,6 +5361,150 @@ 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 *parts_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) { + parts_default_nan(r, 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, r_precise_buf; + int float_exception_flags =3D 0; + bool is_q_smallish; + uint32_t r_flags; + int saved_flags; + + /* Compute precise quotient */ + q_buf =3D *a; + q =3D parts_div(&q_buf, b, status); + + /* + * 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 *q; + saved_flags =3D status->float_exception_flags; + parts_round_to_int(n, + is_q_smallish ? final_quotient_rounding_mode : + float_round_to_zero, + 0, status, fmt); + float_exception_flags =3D saved_flags; + + /* Compute precise remainder */ + r_precise_buf =3D *b; + status->float_exception_flags =3D 0; + r_precise =3D parts_muladd_scalbn(&r_precise_buf, n, a, 0, + float_muladd_negate_product, statu= s); + + /* Round remainder to the target format */ + *r =3D *r_precise; + parts_uncanon(r, status, fmt); + r->frac &=3D (1ULL << fmt->frac_size) - 1; + parts_canonicalize(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 (parts_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, pb, pr, pn; = \ + = \ + floatN ## _unpack_canonical(&pa, a, status); = \ + floatN ## _unpack_canonical(&pb, b, status); = \ + 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/include/fpu/softfloat.h b/include/fpu/softfloat.h index c18ab2cb609..66b0c47b5eb 100644 --- a/include/fpu/softfloat.h +++ b/include/fpu/softfloat.h @@ -1372,4 +1372,15 @@ 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/target/s390x/helper.h b/target/s390x/helper.h index 1a8a76abb98..6a7426fdac7 100644 --- a/target/s390x/helper.h +++ b/target/s390x/helper.h @@ -46,6 +46,7 @@ DEF_HELPER_FLAGS_3(sxb, TCG_CALL_NO_WG, i128, env, i128, = i128) DEF_HELPER_FLAGS_3(deb, TCG_CALL_NO_WG, i64, env, i64, i64) DEF_HELPER_FLAGS_3(ddb, TCG_CALL_NO_WG, i64, env, i64, i64) DEF_HELPER_FLAGS_3(dxb, TCG_CALL_NO_WG, i128, env, i128, i128) +DEF_HELPER_6(dib, void, env, i32, i32, i32, i32, i32) DEF_HELPER_FLAGS_3(meeb, TCG_CALL_NO_WG, i64, env, i64, i64) DEF_HELPER_FLAGS_3(mdeb, TCG_CALL_NO_WG, i64, env, i64, i64) DEF_HELPER_FLAGS_3(mdb, TCG_CALL_NO_WG, i64, env, i64, i64) diff --git a/target/s390x/tcg/fpu_helper.c b/target/s390x/tcg/fpu_helper.c index 7a3ff501a46..122994960a6 100644 --- a/target/s390x/tcg/fpu_helper.c +++ b/target/s390x/tcg/fpu_helper.c @@ -315,6 +315,62 @@ Int128 HELPER(dxb)(CPUS390XState *env, Int128 a, Int12= 8 b) return RET128(ret); } =20 +void HELPER(dib)(CPUS390XState *env, uint32_t r1, uint32_t r2, uint32_t r3, + uint32_t m4, uint32_t bits) +{ + int final_quotient_rounding_mode =3D s390_get_bfp_rounding_mode(env, m= 4); + bool mask_underflow =3D (env->fpc >> 24) & S390_IEEE_MASK_UNDERFLOW; + bool mask_inexact =3D (env->fpc >> 24) & S390_IEEE_MASK_INEXACT; + float32 a32, b32, n32, r32; + float64 a64, b64, n64, r64; + int dxc =3D -1; + uint32_t cc; + + if (bits =3D=3D 32) { + a32 =3D env->vregs[r1][0] >> 32; + b32 =3D env->vregs[r2][0] >> 32; + + float32_s390_divide_to_integer( + a32, b32, + final_quotient_rounding_mode, + mask_underflow, mask_inexact, + &r32, &n32, &cc, &dxc, &env->fpu_status); + } else { + a64 =3D env->vregs[r1][0]; + b64 =3D env->vregs[r2][0]; + + float64_s390_divide_to_integer( + a64, b64, + final_quotient_rounding_mode, + mask_underflow, mask_inexact, + &r64, &n64, &cc, &dxc, &env->fpu_status); + } + + /* Flush the results if needed */ + if ((env->fpu_status.float_exception_flags & float_flag_invalid) && + ((env->fpc >> 24) & S390_IEEE_MASK_INVALID)) { + /* The action for invalid operation is "Suppress" */ + } else { + /* The action for other exceptions is "Complete" */ + if (bits =3D=3D 32) { + env->vregs[r1][0] =3D deposit64(env->vregs[r1][0], 32, 32, r32= ); + env->vregs[r3][0] =3D deposit64(env->vregs[r3][0], 32, 32, n32= ); + } else { + env->vregs[r1][0] =3D r64; + env->vregs[r3][0] =3D n64; + } + env->cc_op =3D cc; + } + + /* Raise an exception if needed */ + if (dxc =3D=3D -1) { + handle_exceptions(env, false, GETPC()); + } else { + env->fpu_status.float_exception_flags =3D 0; + tcg_s390_data_exception(env, dxc, GETPC()); + } +} + /* 32-bit FP multiplication */ uint64_t HELPER(meeb)(CPUS390XState *env, uint64_t f1, uint64_t f2) { diff --git a/target/s390x/tcg/insn-data.h.inc b/target/s390x/tcg/insn-data.= h.inc index baaafe922e9..0d5392eac54 100644 --- a/target/s390x/tcg/insn-data.h.inc +++ b/target/s390x/tcg/insn-data.h.inc @@ -9,7 +9,7 @@ * OPC =3D (op << 8) | op2 where op is the major, op2 the minor opcode * NAME =3D name of the opcode, used internally * FMT =3D format of the opcode (defined in insn-format.h.inc) - * FAC =3D facility the opcode is available in (defined in DisasFacility) + * FAC =3D facility the opcode is available in (define in translate.c) * I1 =3D func in1_xx fills o->in1 * I2 =3D func in2_xx fills o->in2 * P =3D func prep_xx initializes o->*out* @@ -361,6 +361,9 @@ C(0xb91d, DSGFR, RRE, Z, r1p1, r2_32s, r1_P, 0, divs64, 0) C(0xe30d, DSG, RXY_a, Z, r1p1, m2_64, r1_P, 0, divs64, 0) C(0xe31d, DSGF, RXY_a, Z, r1p1, m2_32s, r1_P, 0, divs64, 0) +/* DIVIDE TO INTEGER */ + D(0xb35b, DIDBR, RRF_b, Z, 0, 0, 0, 0, dib, 0, 64) + D(0xb353, DIEBR, RRF_b, Z, 0, 0, 0, 0, dib, 0, 32) =20 /* EXCLUSIVE OR */ C(0x1700, XR, RR_a, Z, r1, r2, new, r1_32, xor, nz32) diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index 540c5a569c0..dee0e710f39 100644 --- a/target/s390x/tcg/translate.c +++ b/target/s390x/tcg/translate.c @@ -2283,6 +2283,32 @@ static DisasJumpType op_dxb(DisasContext *s, DisasOp= s *o) return DISAS_NEXT; } =20 +static DisasJumpType op_dib(DisasContext *s, DisasOps *o) +{ + const bool fpe =3D s390_has_feat(S390_FEAT_FLOATING_POINT_EXT); + uint8_t m4 =3D get_field(s, m4); + + if (get_field(s, r1) =3D=3D get_field(s, r2) || + get_field(s, r1) =3D=3D get_field(s, r3) || + get_field(s, r2) =3D=3D get_field(s, r3)) { + gen_program_exception(s, PGM_SPECIFICATION); + return DISAS_NORETURN; + } + + if (m4 =3D=3D 2 || (!fpe && m4 =3D=3D 3) || m4 > 7) { + gen_program_exception(s, PGM_SPECIFICATION); + return DISAS_NORETURN; + } + + gen_helper_dib(tcg_env, tcg_constant_i32(get_field(s, r1)), + tcg_constant_i32(get_field(s, r2)), + tcg_constant_i32(get_field(s, r3)), tcg_constant_i32(m4= ), + tcg_constant_i32(s->insn->data)); + set_cc_static(s); + + return DISAS_NEXT; +} + static DisasJumpType op_ear(DisasContext *s, DisasOps *o) { int r2 =3D get_field(s, r2); --=20 2.52.0 From nobody Sun Feb 8 05:28:52 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=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1769713812; cv=none; d=zohomail.com; s=zohoarc; b=f0+1V14s0JXgICbl9nHS3nP72ps6sCddha3P14ScItKvAKGGMCFvyiAKzvyfLc8mmO7WYQjahJ/GMRDcUgXr/pVVjPn8hrXiuH+MyGoDE8qiBQXI6FFiD4DuMvbQSyRWhZ84osjxgB4qhodQPdH92KwLZLD4uXbcayu7/nHNGBM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769713812; 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=uDFpOrTKD4tfvio491w45htkLbYV8H4eGvyMdZDlOOU=; b=T03k/PLfHTWWPMvPXI+x2MqBUOqNNXL5+BFDhFA9xqnRM4oqTEumrjxVHhA3th+PX4NPeGLKWKYrkxY9GIo7wxY3O7Iq1noO0yWrMO4p4Hscca0onSUsY149UJQsuN1mBr2LbOI7GKROJ0G0eYiOPwDSeeEtqoTyTtwIaCmakjw= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769713812516468.86896956581063; Thu, 29 Jan 2026 11:10:12 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlXOi-00046x-0V; Thu, 29 Jan 2026 14:09:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlXOQ-0003Uq-Rh; Thu, 29 Jan 2026 14:09:28 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlXOM-0003Co-Jo; Thu, 29 Jan 2026 14:09:26 -0500 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 60TFCrcJ029514; Thu, 29 Jan 2026 19:09:11 GMT Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4bvnt82eq3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 Jan 2026 19:09:10 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 60TGtG4n019733; Thu, 29 Jan 2026 19:09:09 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4bw9dnb7me-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 Jan 2026 19:09:09 +0000 Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 60TJ97sD50921746 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 29 Jan 2026 19:09:07 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BB03020043; Thu, 29 Jan 2026 19:09:07 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4622B20040; Thu, 29 Jan 2026 19:09:07 +0000 (GMT) Received: from heavy.ibm.com (unknown [9.87.137.8]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 29 Jan 2026 19:09:07 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=uDFpOr TKD4tfvio491w45htkLbYV8H4eGvyMdZDlOOU=; b=Lv8nMOd6K8gZG+eY8fNTZl uHbt+/8pQYMfMT4fSP6digTAJ+ro42g/2fRnomhbUZ2+VEUSjXhqbtDFGihxHA0k PRSHZLoltEIT48uaI9gGCrDN2C9EioALxBNyXnq1tkFMzNqEGHJ3gPMqhmqUudTo L8ISl/NmDzVJWgVpRd/e1nC1gpSAMakS2HJA9LZwOabg1KtAmFgQBPoaFHAAo64+ 5MgqwS+Zt6DO/S3rS8jFgKgbNXDY5sEVaPUuhbczc71tWou8AHzzbYuxlfhSsn/w vn/FCrXUXiI6UZLneX3xZnBGP+HOvoijZ2euuoj9Zj61UUnRRTQCowE81QDUXRSw == From: Ilya Leoshkevich To: Thomas Huth , Richard Henderson Cc: David Hildenbrand , qemu-s390x@nongnu.org, qemu-devel@nongnu.org, Ilya Leoshkevich , =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [PATCH v3 5/5] tests/tcg/s390x: Test DIVIDE TO INTEGER Date: Thu, 29 Jan 2026 19:57:25 +0100 Message-ID: <20260129190902.196262-6-iii@linux.ibm.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129190902.196262-1-iii@linux.ibm.com> References: <20260129190902.196262-1-iii@linux.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: CfgZzyB10utF821AGcje08DlC3VmFrq9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI5MDEzNCBTYWx0ZWRfX9wujPdMKcsvw 4L3pX4VDpxB3Fv2ms1Xd5oC58IbY4fjUZyb5Pa1dWJ79OLRlUxMbGY2kPceqmipVYy94fFL0nMN SXS6Lk5EMuTEbX5YpHhsoc+34By2Z6sZMSxie69MeDfO4ZMcSg6xZHz832KD7UBrNDVNnMFeW6V hzPbRmkdpCUo7TmT0qwfJypkefc7hokmuQQLQFKX7G8zq9jd9DWW/SRmtruTmmOiPBPzdMWMnAt a5oDOPBJ/zGZxTiuXWbq5SAf+eUwz54IqCQ4y1inxO4udPxUX3Rrb58kF9XzcZcG5wuraaTO89f eTRKaxwOhm0LQjsJ4CH8zL4Wm7VFVFnNp534EwGhpMXpNvrhLzVPC4UajKZODNbpDWschjk6jfZ Gt8+mEKuPPlJ53cjoYugehM1XdXBs6w4hzI8ZWlYGYQwEtfDBbR5IOMj/cWDdALAsdIhH54+cgl E5X6iXwz+rzhY6jiZnQ== X-Authority-Analysis: v=2.4 cv=Zs3g6t7G c=1 sm=1 tr=0 ts=697bb057 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=VnNF1IyMAAAA:8 a=xC6-lGDZH8Trbaw0IpYA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: CfgZzyB10utF821AGcje08DlC3VmFrq9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-29_02,2026-01-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 lowpriorityscore=0 adultscore=0 phishscore=0 suspectscore=0 bulkscore=0 impostorscore=0 priorityscore=1501 malwarescore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2601290134 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=lists.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=iii@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @ibm.com) X-ZM-MESSAGEID: 1769713813792154100 Add a test to prevent regressions. Data is generated using a libFuzzer-based fuzzer and hopefully covers all the important corner cases. Acked-by: Alex Benn=C3=A9e Signed-off-by: Ilya Leoshkevich --- tests/tcg/s390x/Makefile.target | 5 + tests/tcg/s390x/divide-to-integer.c | 265 ++++++++++++++++++++++++++++ 2 files changed, 270 insertions(+) create mode 100644 tests/tcg/s390x/divide-to-integer.c diff --git a/tests/tcg/s390x/Makefile.target b/tests/tcg/s390x/Makefile.tar= get index da5fe71a407..0ca030ded01 100644 --- a/tests/tcg/s390x/Makefile.target +++ b/tests/tcg/s390x/Makefile.target @@ -49,14 +49,19 @@ TESTS+=3Dcvd TESTS+=3Dcvb TESTS+=3Dts TESTS+=3Dex-smc +TESTS+=3Ddivide-to-integer =20 cdsg: CFLAGS+=3D-pthread cdsg: LDFLAGS+=3D-pthread =20 +# The following tests contain inline assembly that requires inlining, +# and thus cannot be built with -O0. rxsbg: CFLAGS+=3D-O2 +divide-to-integer: CFLAGS+=3D-O2 =20 cgebra: LDFLAGS+=3D-lm clgebr: LDFLAGS+=3D-lm +divide-to-integer: LDFLAGS+=3D-lm =20 include $(S390X_SRC)/pgm-specification.mak $(PGM_SPECIFICATION_TESTS): pgm-specification-user.o diff --git a/tests/tcg/s390x/divide-to-integer.c b/tests/tcg/s390x/divide-t= o-integer.c new file mode 100644 index 00000000000..62b4787ec0e --- /dev/null +++ b/tests/tcg/s390x/divide-to-integer.c @@ -0,0 +1,265 @@ +/* + * Test DIEBR and DIDBR instructions. + * + * Most inputs were discovered by fuzzing and exercise various corner case= s in + * the helpers. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include +#include +#include +#include + +static void sigfpe_handler(int sig, siginfo_t *info, void *puc) +{ + struct ucontext *uc =3D puc; + unsigned short *xr_insn; + int r; + + xr_insn =3D (unsigned short *)(uc->uc_mcontext.regs.psw.addr - 6); + r =3D *xr_insn & 0xf; + uc->uc_mcontext.regs.gprs[r] =3D sig; +} + +#define DIVIDE_TO_INTEGER(name, floatN) = \ +static inline __attribute__((__always_inline__)) int = \ +name(floatN *r1, floatN r2, floatN *r3, int m4, int *sig) = \ +{ = \ + int cc; = \ + = \ + asm(/* Make the initial CC predictable for suppression tests */ = \ + "xr %[sig],%[sig]\n" = \ + #name " %[r1],%[r3],%[r2],%[m4]\n" = \ + "ipm %[cc]\n" = \ + "srl %[cc],28" = \ + /* = \ + * Use earlyclobbers to prevent the compiler from reusing floating= \ + * point registers. This instruction doesn't like it. = \ + */ = \ + : [r1] "+&f" (*r1), [r3] "+&f" (*r3), [sig] "=3Dr" (*sig), [cc] "= =3Dd" (cc)\ + : [r2] "f" (r2), [m4] "i" (m4) = \ + : "cc"); = \ + = \ + return cc; = \ +} + +DIVIDE_TO_INTEGER(diebr, float) +DIVIDE_TO_INTEGER(didbr, double) + +#define TEST_DIVIDE_TO_INTEGER(name, intN, int_fmt, floatN, float_fmt) = \ +static inline __attribute__((__always_inline__)) int = \ +test_ ## name(unsigned intN r1i, unsigned intN r2i, int m4, int fpc, = \ + unsigned intN r1o, unsigned intN r3o, int cco, unsigned int = fpco,\ + int sigo) = \ +{ = \ + union { = \ + floatN f; = \ + unsigned intN i; = \ + } r1, r2, r3; = \ + int cc, err =3D 0, sig; = \ + = \ + r1.i =3D r1i; = \ + r2.i =3D r2i; = \ + r3.i =3D 0x12345678; = \ + printf("[ RUN ] %" float_fmt "(0x%" int_fmt = \ + ") / %" float_fmt "(0x%" int_fmt ")\n", r1.f, r1.i, r2.f, r2.i)= ; \ + asm volatile("sfpc %[fpc]" : : [fpc] "r" (fpc)); = \ + cc =3D name(&r1.f, r2.f, &r3.f, m4, &sig); = \ + asm volatile("stfpc %[fpc]" : [fpc] "=3DQ" (fpc)); = \ + if (r1.i !=3D r1o) { = \ + printf("[ FAILED ] remainder 0x%" int_fmt = \ + " !=3D expected 0x%" int_fmt "\n", r1.i, r1o); = \ + err +=3D 1; = \ + } = \ + if (r3.i !=3D r3o) { = \ + printf("[ FAILED ] quotient 0x%" int_fmt = \ + " !=3D expected 0x%" int_fmt "\n", r3.i, r3o); = \ + err +=3D 1; = \ + } = \ + if (cc !=3D cco) { = \ + printf("[ FAILED ] cc %d !=3D expected %d\n", cc, cco); = \ + err +=3D 1; = \ + } = \ + if (fpc !=3D fpco) { = \ + printf("[ FAILED ] fpc 0x%x !=3D expected 0x%x\n", fpc, fpco); = \ + err +=3D 1; = \ + } = \ + if (sig !=3D sigo) { = \ + printf("[ FAILED ] signal 0x%x !=3D expected 0x%x\n", sig, sigo)= ; \ + err +=3D 1; = \ + } = \ + = \ + return err; = \ +} + +TEST_DIVIDE_TO_INTEGER(diebr, int, "x", float, "f") +TEST_DIVIDE_TO_INTEGER(didbr, long, "lx", double, "lf") + +int main(void) +{ + struct sigaction act =3D { + .sa_sigaction =3D sigfpe_handler, + .sa_flags =3D SA_SIGINFO, + }; + int err =3D 0; + + /* Set up SIG handler */ + if (sigaction(SIGFPE, &act, NULL)) { + printf("[ FAILED ] sigaction(SIGFPE) failed\n"); + return EXIT_FAILURE; + } + + /* 451 / 460 */ + err +=3D test_diebr(0x43e1f1f1, 0x43e61616, 7, 0, + 0x43e1f1f1, 0, 0, 0, 0); + + /* 480 / 0 */ + err +=3D test_diebr(0x43f00000, 0, 0, 0, + 0x7fc00000, 0x7fc00000, 1, 0x800000, 0); + + /* QNaN / QNaN */ + err +=3D test_diebr(0xffffffff, 0xffffffff, 0, 0, + 0xffffffff, 0xffffffff, 1, 0, 0); + + /* -2.08E-8 / -2.08E-8 */ + err +=3D test_diebr(0xb2b2b2b2, 0xb2b2b2b2, 0, 0, + 0x80000000, 0x3f800000, 0, 0, 0); + + /* + * Test partial remainder without quotient scaling (cc2). + * + * a =3D 12401981 / 268435456 + * b =3D -5723991 / 72057594037927936 + * q =3D a / b =3D -3329131425038336 / 5723991 =3D~ -581610178.1 + * n =3D round(q, float32, nearest_even) =3D -581610176 + * r_precise =3D a - b * n =3D 189155 / 1125899906842624 + * r =3D round(r_precise, float32, nearest_even) =3D r_precise + */ + err +=3D test_diebr(0x3d3d3d3d, 0xaeaeaeae, 0, 0, + 0x2f38b8c0, 0xce0aaaab, 2, 0, 0); + + /* 1.07E-31 / 2.19 */ + err +=3D test_diebr(0x0c0c0c0c, 0x400c0c0c, 6, 0, + 0xc00c0c0c, 0x3f800000, 0, 0x80000, 0); + + /* + * Test partial remainder with quotient scaling (cc3). + * + * a =3D 298343530578310714772108083200 + * b =3D -592137/10384593717069655257060992658440192 + * q =3D a / b + * =3D -103272545105730134013704301472178067414107728960487231565332= 4800 / + * 197379 + * =3D~ -5232195173029052432817285601415452880707052369324357280426.6 + * n =3D round(q, float32, nearest_even) + * =3D -5232194943010009439437691768433469154159343131709361094656 + * n / 2^192 =3D -6992213 / 8388608 + * r_precise =3D a - b * n =3D 13115851209189604982784 + * r =3D round(r_precise, float32, nearest_even) =3D r_precise + */ + err +=3D test_diebr(0x7070ffff, 0x90909090, 0, 0, + 0x6431c0c0, 0xbf5562aa, 3, 0, 0); + + /* + * Test large, but representable quotient. + * + * a =3D -12040119 / 549755813888 + * b =3D 1 / 38685626227668133590597632 + * q =3D a / b =3D -847248053779631702016 + * n =3D round(q, float32, to_odd) =3D q + * r_precise =3D a - b * n =3D -0 + * r =3D round(r_precise, float32, nearest_even) =3D -0 + */ + err +=3D test_diebr(0xb7b7b7b7, 0x15000000, 7, 0, + 0x80000000, 0xe237b7b7, 0, 0, 0); + + /* 0 / 0 */ + err +=3D test_diebr(0, 0, 1, 0, + 0x7fc00000, 0x7fc00000, 1, 0x800000, 0); + + /* 4.3E-33 / -2.08E-8 with SIGFPE */ + err +=3D test_diebr(0x09b2b2b2, 0xb2b2b2b2, 0, 0xfc000007, + 0xb2b2b2b1, 0xbf800000, 0, 0xfc000807, SIGFPE); + + /* + * Test tiny remainder scaling when FPC Underflow Mask is set. + * + * 1.19E-39 / -1.28E-9 =3D { r =3D 1.19E-39 * 2^192, n =3D -0 } + */ + err +=3D test_diebr(0x000d0100, 0xb0b0b0b0, 6, 0xfc000000, + 0x5ed01000, 0x80000000, 0, 0xfc001000, SIGFPE); + + /* + * Test "inexact and incremented" DXC. + * + * a =3D 53555504 + * b =3D -520849213389117849600 + * q =3D a / b =3D -3347219 / 32553075836819865600 + * n =3D round(q, float32, to_odd) =3D -1 + * r_precise =3D a - b * n =3D -520849213389064294096 + * r =3D round(r_precise, float32, to_odd) =3D -520849213389117849600 + * abs(r) - abs(r_precise) =3D 53555504 + */ + err +=3D test_diebr(0x4c4c4c4c, 0xe1e1e1e1, 0, 0xfc000007, + 0xe1e1e1e1, 0xbf800000, 0, 0xfc000c07, SIGFPE); + + /* 0 / 0 with SIGFPE */ + err +=3D test_diebr(0, 0, 0, 0xfc000007, + 0, 0x12345678, 0, 0xfc008007, SIGFPE); + + /* 5.76E-16 / 5.39E+34 */ + err +=3D test_diebr(0x26262626, 0x79262626, 6, 0, + 0xf9262626, 0x3f800000, 0, 0x80000, 0); + + /* -4.97E+17 / 2.03E-38 */ + err +=3D test_diebr(0xdcdcdcdc, 0x00dcdcdc, 7, 0xfc000000, + 0x80000000, 0xbb800000, 1, 0xfc000000, 0); + + /* -1.23E+17 / SNaN */ + err +=3D test_diebr(0xdbdb240b, 0xffac73ff, 4, 0, + 0xffec73ff, 0xffec73ff, 1, 0x800000, 0); + + /* 2.34E-38 / 3.27E-33 with SIGFPE */ + err +=3D test_diebr(0x00ff0987, 0x0987c6f6, 6, 0x08000000, + 0x8987c6b6, 0x3f800000, 0, 0x8000800, SIGFPE); + + /* -5.93E+11 / -2.7E+4 */ + err +=3D test_diebr(0xd30a0040, 0xc6d30a00, 0, 0xc4000000, + 0xc74a4400, 0x4ba766c6, 2, 0xc4000000, 0); + + /* 9.86E-32 / -inf */ + err +=3D test_diebr(0x0c000029, 0xff800000, 0, 0, + 0xc000029, 0x80000000, 0, 0, 0); + + /* QNaN / SNaN */ + err +=3D test_diebr(0xffff94ff, 0xff94ff24, 4, 7, + 0xffd4ff24, 0xffd4ff24, 1, 0x800007, 0); + + /* 2.8E-43 / -inf */ + err +=3D test_diebr(0x000000c8, 0xff800000, 0, 0x7c000007, + 0x000000c8, 0x80000000, 0, 0x7c000007, 0); + + /* -1.7E+38 / -inf */ + err +=3D test_diebr(0xff00003d, 0xff800000, 0, 0, + 0xff00003d, 0, 0, 0, 0); + + /* 1.94E-304 / 1.94E-304 */ + err +=3D test_didbr(0x00e100e100e100e1, 0x00e100e100e100e1, 0, 1, + 0, 0x3ff0000000000000, 0, 1, 0); + + /* 4.82E-299 / 5.29E-308 */ + err +=3D test_didbr(0x0200230200230200, 0x0023020023020023, 0, 0, + 0x8001a017d247b3f4, 0x41cb2aa05f000000, 0, 0, 0); + + /* -1.38E-75 / -3.77E+208 */ + err +=3D test_didbr(0xb063eb3d63b063eb, 0xeb3d63b063eb3d63, 3, 0xe8000= 000, + 0x6b3d63b063eb3d63, 0x3ff0000000000000, 0, 0xe8000c0= 0, + SIGFPE); + + /* 4.78E-299 / 6.88E-315 */ + err +=3D test_didbr(0x0200000000000000, 0x0000000053020000, 0, 0, + 0x8000000020820000, 0x4338ac20dd47c6c1, 0, 0, 0); + + return err ? EXIT_FAILURE : EXIT_SUCCESS; +} --=20 2.52.0