From nobody Sat Feb 7 07:09:46 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=1770209405; cv=none; d=zohomail.com; s=zohoarc; b=WZDIqKw7+W+9QLtMpUkJOmCOcuR4/6mkvXCUBi8QvlhFzTcBVHMcmuzhGYra/PhjpgMwCrt3BxazewEhvGBF7sK+TElVGZWuSmY9pZGcHuXF6Qk0wy7jl0kQr6o3GTICb79w2fCYAU1CF2/6rFR33nDwgSHRxhVOvq9KimVmNaQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770209405; 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=WMMLBEnlB9senlYLt6cuRQlVO3rduv28qhpgXcZd+tQ=; b=Sx8elCEnKuvPoFGStp87Eya4HrdOGs8fcpnFj+vCuEshfFnPYxyjT8rHS6PSEnsPKxjTE7Ft5b5uTDp4WEGUtRzNQqgLD8DU8sXZlMnXy8thLiIrqlwAz/w1Uw9+s3nLwjO/BnFuNHfGHXXN7a10de2A/z8pmDgD1aoUvMuXINk= 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 1770209405269395.1468247983727; Wed, 4 Feb 2026 04:50:05 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vncKG-0000O0-N4; Wed, 04 Feb 2026 07:49: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 1vncKE-0000NI-N9; Wed, 04 Feb 2026 07:49:42 -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 1vncKD-0003Jj-8d; Wed, 04 Feb 2026 07:49:42 -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 6140s5nH011155; Wed, 4 Feb 2026 12:10:31 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 4c185gy8dx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 04 Feb 2026 12:10:31 +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 614CA5SX025710; Wed, 4 Feb 2026 12:10:31 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4c1w2mw3tw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 04 Feb 2026 12:10:30 +0000 Received: from smtpav04.fra02v.mail.ibm.com (smtpav04.fra02v.mail.ibm.com [10.20.54.103]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 614CASl048234806 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 4 Feb 2026 12:10:29 GMT Received: from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E3F7F20043; Wed, 4 Feb 2026 12:10:28 +0000 (GMT) Received: from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7C8D220040; Wed, 4 Feb 2026 12:10:28 +0000 (GMT) Received: from heavy.ibm.com (unknown [9.87.140.180]) by smtpav04.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 4 Feb 2026 12:10:28 +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=WMMLBE nlB9senlYLt6cuRQlVO3rduv28qhpgXcZd+tQ=; b=ZJk+FdsUEB2Sk9oaXe4Fnr lCW9ohdAZXuGtk/jXoH/glYcm00YSPKKNdQHltBRt2AT7tE4xFQD9IFKup8NZAhW zRhrWiTrRvquOUdSHw3Lw27DX0CSTJMRoo907cI+umYNSVIA0kF5hb1PQbfhWJjL aKg/H6USMn2fSMdM5idlNLTKtGyaLu9BvyXv4sIa/WGV98DPrnF0rlQzq6gBRZNs mz47tAd/1P3yqkbnGaok+9GsXyrv5tGkIpA7AiqOD83pFo79Cchool8jX4/T9Y9T Dh+aokkgzt6jOy5sBj9mlfn8BEz83nu5gLSIRzLggfwT8ZrpKzINDv5xrd4oaZWA == 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 v4 1/5] target/s390x: Dump Floating-Point-Control Register Date: Wed, 4 Feb 2026 13:07:44 +0100 Message-ID: <20260204121026.645382-2-iii@linux.ibm.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260204121026.645382-1-iii@linux.ibm.com> References: <20260204121026.645382-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-Authority-Analysis: v=2.4 cv=UdxciaSN c=1 sm=1 tr=0 ts=69833737 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=20KFwNOVAAAA:8 a=VnNF1IyMAAAA:8 a=WEarJFB7UarLcg5xSFgA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: I4pygt64l14HMM9GBcnndTQJZZWP4pcj X-Proofpoint-ORIG-GUID: I4pygt64l14HMM9GBcnndTQJZZWP4pcj X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjA0MDA5MCBTYWx0ZWRfXyKSpP5UA/QGp SO3WMyDxF3NMeG88oGTI3oY78/H1OrGSobNj9oE4xU789xCM6LO6ebDMcbWt350zMGosrC5Inuz zaGv9bH5IqPkAt2jRHQrz4VCFwY2LrrFdWgxJsLdbeIKsG9dCiBr5liTIzT5VbOovp6EywWI4Ey mwYfCL3qcoECMrIyEuniwiS/81Ygyw78DN0l0513+uf9cTuPzxdNruOYGlm6wWsH93dyI2P2do+ LEQTrXl1KaMksRNKcwAMyDZON+Gfhd/bswwQ850IrBbdSJQKz0qQq7Q5NtZSZ9g6jGjSUqHZhCj u/EnSHE7y50mrj8Y0Ge+BtnsWDjfSGugEh2ZqddmP3Hqcikg5Bk9VtLWoWR6edtryDf/h9eBqBb 1FqnmDxYP5uAP88iBXrz7g6DWDEInwfAj6EWAWgiaqOddOK2/ncs3mGhgGdIRGnSKWZgnNklNlC IXYLKUqmXOZxaBbzDAA== 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-02-04_02,2026-02-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 clxscore=1015 bulkscore=0 spamscore=0 phishscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2602040090 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: 1770209406199158500 Knowing the value of this register is very useful for debugging floating-point code. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Thomas Huth Signed-off-by: Ilya Leoshkevich --- 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 Sat Feb 7 07:09:46 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=1770207073; cv=none; d=zohomail.com; s=zohoarc; b=NP9TCR9MFKt55eZY7I5p7CnKBrzsgxTo2r/kigW+82gnZ0k99ZHWfxeISVUwwd4GOXipn06wpnrP1uzwn0dM/p/tB/guy5NCtLBS2FYMTLV6oXhEuRAYgJdLwI638menBV7JR8tXNVPeQJC0KoAyhmeQmSjC2sJsI7FcnvkJcbk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770207073; 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=cwX9q7/To/imUVZCLOGfQq71t0LH6eYW7EMGrK+pwsg=; b=T66OWXxjUhzWxpJWMdw+odGvNUbEnFDRTlSAgJVc66bj6ztdW7iO5wlxGbrxTCta6KtSBEtkq2I/ipFfeleTvYG46X0PN2rdlYrRBmgbzNMyVNUalYRYXnwBuouMbJJ3A0qpEqC3MqfKzrzbOT6pYmAnuO6kZinPJjzmk6y38do= 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 1770207073058620.7123494155117; Wed, 4 Feb 2026 04:11:13 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vnbiW-00033y-V2; Wed, 04 Feb 2026 07:10: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 1vnbiU-0002xy-1h; Wed, 04 Feb 2026 07:10:42 -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 1vnbiS-0006RM-4D; Wed, 04 Feb 2026 07:10:41 -0500 Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 613J7Q6T027389; Wed, 4 Feb 2026 12:10:32 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 4c175mybvf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 04 Feb 2026 12:10:32 +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 6147Ucto025812; Wed, 4 Feb 2026 12:10:31 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4c1w2mw3tx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 04 Feb 2026 12:10:31 +0000 Received: from smtpav04.fra02v.mail.ibm.com (smtpav04.fra02v.mail.ibm.com [10.20.54.103]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 614CATUF46596472 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 4 Feb 2026 12:10:29 GMT Received: from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5A0C920043; Wed, 4 Feb 2026 12:10:29 +0000 (GMT) Received: from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 02CED20040; Wed, 4 Feb 2026 12:10:29 +0000 (GMT) Received: from heavy.ibm.com (unknown [9.87.140.180]) by smtpav04.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 4 Feb 2026 12:10:28 +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=cwX9q7/To/imUVZCL OGfQq71t0LH6eYW7EMGrK+pwsg=; b=jEQ2c/ivjvuDNIn09MXQmp6czaf+zAkMW /WsVwitWIzWg5Oy5PFBqQAVyxRT6faV3I4WYGnHm6oO8DOfHA0vtLTX84aLWxeQs mugw9gry/Auk/YAs2nzAlPq9id+oYfbMKt/htQNOb68LRoAzCA54BLedNZaPfDdY cTUurTCaZf8NDcWpSkDqJg/nYfUVoerfnq0BG3HECJl68SOe/mRB0StGvujJzKP9 CjN2uQ43FCvqF/hVseTz0Hwn4oUWXU06Sbz88QG/8GmzvXZxuymds4UT6R8XX6E0 RxvEq3UGJ8wm8ucnotYPaGCxNxwIxCTSqYZeD5CGzhmoDaDdERqDw== From: Ilya Leoshkevich To: Thomas Huth , Richard Henderson Cc: David Hildenbrand , qemu-s390x@nongnu.org, qemu-devel@nongnu.org, Ilya Leoshkevich Subject: [PATCH v4 2/5] target/s390x: Extract s390_get_bfp_rounding_mode() Date: Wed, 4 Feb 2026 13:07:45 +0100 Message-ID: <20260204121026.645382-3-iii@linux.ibm.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260204121026.645382-1-iii@linux.ibm.com> References: <20260204121026.645382-1-iii@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: hwGlh2tN0R2MYjrZDY1FmjWJR67aERTZ X-Authority-Analysis: v=2.4 cv=VcX6/Vp9 c=1 sm=1 tr=0 ts=69833738 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=HzLeVaNsDn8A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=20KFwNOVAAAA:8 a=VnNF1IyMAAAA:8 a=legnL2kWL1UyQeN_ircA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: hwGlh2tN0R2MYjrZDY1FmjWJR67aERTZ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjA0MDA5MCBTYWx0ZWRfX3Yjm9lTXy8Fu AQtq+oI3eCVhCu4MF4sZO4hgDMYakXeyvCJeHF1PfuonTGC4qxynQErBruHa1IUmo9anrYi3fFf vCCo1H0hqQS+dlvdYZTlaOy9Ia55w9RnBkmZD322ickaTY8WzuvdJYJL9Pi7Qsm0IcU82o8C13K CqlimrZ9jJOb3+zAtJnLRjnyVYakH4HZPldJo4s/7napLqN6qkZE9gf4ckz9iYdsuT4o9NXoBHW tL3JLblgRpq43EdQZ+Vtjw2dtLmj5ipKWRQaswXklj6uhmR5z+qssiA1Yfvx6ljexNou1dLLKLH aak0ByTz0vf6EcWa6JTl1ngfcDjkpGsiD+rQu1upov/1AZWhgEOek2M8NoqTNYmeuirH1bMUdkl Fl10a4vSonIzbzQ8ogteNnuAcDQtPRCb9OGVzUd6e88EXk76ke199eFhP/6FRfYWa6HCU7cCEvy 8KQdJOrtsOBmaWMRiSA== 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-02-04_02,2026-02-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 spamscore=0 adultscore=0 bulkscore=0 phishscore=0 lowpriorityscore=0 impostorscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2602040090 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: 1770207076014154100 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 Reviewed-by: Thomas Huth Signed-off-by: Ilya Leoshkevich --- 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 Sat Feb 7 07:09:46 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=1770207074; cv=none; d=zohomail.com; s=zohoarc; b=JGFRTKf7MA24PaqmDjN1wfE35QMu7pLUEJbwjwFRAPgkbioFK8fsqp1cCnx3VaIBriI0Bguqadla88knF/nptrhoJJmVRU8fXMcmd7qgLAnJVJYyGY48E3HTGirYL1iqwPKdDy0YfRvTWEE5/a9XDCsnlAehCTBxgm7/ezLA8+c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770207074; 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=HOJ7ow0oEvswzLEZyG8gZwLQJQ1ov+TKF9192Y24jMU=; b=KNHMdnkeanvBI/SclPg60iDqh4eA+m/LF30M9FGFrbRKxQIzMMOQzMGE3XCqGUkF3UMFOcycdb5pdNNOrPeon+7ZZUSJft3avv6DIPOBKkRdRaAqY1VhoHQsfJWTc+UAb1LLAAg1LSRNw6vvslXNeEycW0LP8ubn6wldmSEN2aI= 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 1770207074370435.90657759462033; Wed, 4 Feb 2026 04:11:14 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vnbiX-000359-Nb; Wed, 04 Feb 2026 07:10:45 -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 1vnbiT-0002xB-TF; Wed, 04 Feb 2026 07:10:41 -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 1vnbiS-0006RL-4A; Wed, 04 Feb 2026 07:10:41 -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 614AG4XY027849; Wed, 4 Feb 2026 12:10:32 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 4c19cw7469-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 04 Feb 2026 12:10:32 +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 6148in0E006033; Wed, 4 Feb 2026 12:10:31 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4c1x9jcv7b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 04 Feb 2026 12:10:31 +0000 Received: from smtpav04.fra02v.mail.ibm.com (smtpav04.fra02v.mail.ibm.com [10.20.54.103]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 614CAThp46596474 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 4 Feb 2026 12:10:29 GMT Received: from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C09CA20043; Wed, 4 Feb 2026 12:10:29 +0000 (GMT) Received: from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6C34520040; Wed, 4 Feb 2026 12:10:29 +0000 (GMT) Received: from heavy.ibm.com (unknown [9.87.140.180]) by smtpav04.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 4 Feb 2026 12:10:29 +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=HOJ7ow0oEvswzLEZy G8gZwLQJQ1ov+TKF9192Y24jMU=; b=QVL3J7U8KRIxpfnKRnBO/We5HqEXoae32 ndv4uNlZ0fb7y6MpPtJzhTrMRalO7QrRnS7O9j9vL24gdDoqODGPsM6/GbrbiMmY mPijyQG9daXTVw7aJx1hm97YTnsOuTReTKJR6mDjJNDb8BEGHw6vzFrrUya+v3gC fDQ0jtMKbPHQx6UtUpUVMMaSr1VmgAEOqXV/3osJgyyGDkGXF7NbqYI3yjbdJtae ra1DcNgZHbbStU3V8uDYRVCSIFZsYKEqHlxp0xF/+4iCsr17u7jjmskwlvF6xHzv fHkCrKJ7Ef9XZJFoaDZ0TnfKa1FvS3jNPFP7GrHlYhZaR/0WMbMwA== From: Ilya Leoshkevich To: Thomas Huth , Richard Henderson Cc: David Hildenbrand , qemu-s390x@nongnu.org, qemu-devel@nongnu.org, Ilya Leoshkevich Subject: [PATCH v4 3/5] fpu: Restrict parts_round_to_int_normal to target precision Date: Wed, 4 Feb 2026 13:07:46 +0100 Message-ID: <20260204121026.645382-4-iii@linux.ibm.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260204121026.645382-1-iii@linux.ibm.com> References: <20260204121026.645382-1-iii@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjA0MDA5MCBTYWx0ZWRfX4Kk81EPq6ptk aTYD0u98puCPxDPIkuRaGWN2pRT+HdDmimWspQSrVAJKsUt0pKIu1mh/eX+xukQetuSkCxBGDxf s+3VhrOWdd9ueHE8YYMb43PFU8pLmZrgIFa9k29xRCWfCNrdX7OJgISJngt/ZIcL5Cq9xcirDlv tFuyZAxjcIsss+39SLYu02huHzBi6+pAucHIB7r5SooY6LqEAi5otLjT9I5RgZxcANuna/eHabx ahUbTbiD78dl6osJuZxjf/O4kTQjtIFhEdrrI1wwQFiTc7l+P6UI8yBgC5bEbvOTnIf6vOrWz5c KEKrlPUm5//ANqQCOXBr+oTf85Jf8PX6JA8Sk7iBJDOuugC5S9NjsTTnPLXNWOhgiTKOszA/gyy nz/d8M9gMRVbeJ5bN8rENHeJpbrcMNpnsBmAd1QzNX0GV3jlOFk6XUqzGy5MBTfHlbipB83BanE QXWp6ec2D33IHe3pvvw== X-Authority-Analysis: v=2.4 cv=UuRu9uwB c=1 sm=1 tr=0 ts=69833738 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=HzLeVaNsDn8A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=VnNF1IyMAAAA:8 a=Y7_wFDRbBJZQL2pu5q4A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: anOE4F1ScDoaJJyA7_KlgIw0X-1NRJdj X-Proofpoint-GUID: anOE4F1ScDoaJJyA7_KlgIw0X-1NRJdj 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-02-04_02,2026-02-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 adultscore=0 clxscore=1015 phishscore=0 malwarescore=0 lowpriorityscore=0 priorityscore=1501 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2602040090 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: 1770207075578158500 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. Reviewed-by: Richard Henderson Signed-off-by: Ilya Leoshkevich --- 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 Sat Feb 7 07:09:46 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=1770207073; cv=none; d=zohomail.com; s=zohoarc; b=depN0//tq6gkRqH9Qa8jLPebuYY6BAZ54ke00MBwt1iN8sQNXSKYzfFZ0X8JXs8/8EY9uTCsdNQ1FQs7iy5ii4QgJophzo8lAROwtDEJ+GfjxGnWNef8E64LHbU5BqZW3E7tysww9yyEMu+5YgPyQ+YntOJxzfl/zozaRFAOYPU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770207073; 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=znLZyxU1BTsFFG2Sm5nZSBoLywYdL90mdnzeqiENBrw=; b=AtUb8KxXSx2xkUA/DAVkPgVQJgPuxsnJAfYOYjEQF0KxkgS2HXG9A1fQ4Kk63+FmHGkz0ennT0aOgESGvvXnoIyaWQQgwPEqLFVvXuCEEqH3pbs3g/Lw+L8ZDHz+oiKmrh1Hpu6ycqlxkcdggTn/UhzfDJVOHS7UIPLkZ0ayf+w= 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 1770207073190899.9089903365162; Wed, 4 Feb 2026 04:11:13 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vnbig-00036W-6v; Wed, 04 Feb 2026 07:10:55 -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 1vnbiW-00032Q-2z; Wed, 04 Feb 2026 07:10:44 -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 1vnbiS-0006SA-O9; Wed, 04 Feb 2026 07:10:43 -0500 Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 6149hZv4024385; Wed, 4 Feb 2026 12:10:33 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 4c175mybvh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 04 Feb 2026 12:10:32 +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 6147dcCt004466; Wed, 4 Feb 2026 12:10:32 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4c1wjjw1k8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 04 Feb 2026 12:10:32 +0000 Received: from smtpav04.fra02v.mail.ibm.com (smtpav04.fra02v.mail.ibm.com [10.20.54.103]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 614CAUt660752152 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 4 Feb 2026 12:10:30 GMT Received: from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 372562004D; Wed, 4 Feb 2026 12:10:30 +0000 (GMT) Received: from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D475B20040; Wed, 4 Feb 2026 12:10:29 +0000 (GMT) Received: from heavy.ibm.com (unknown [9.87.140.180]) by smtpav04.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 4 Feb 2026 12:10:29 +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=znLZyxU1BTsFFG2Sm 5nZSBoLywYdL90mdnzeqiENBrw=; b=LlYcBtSK3vea53iYzBZBRSWj0PuSLjpLE QlB8QJN04sGxFVfhVuFy2t6sGkEg+rjb2SKvw+VxPr6x0Z5D59EspDV6NdbDPxGA WlB34vwo68zuS8CH4a10L/DxzrOVXbsnDNuRZnMRJyYYV8ycNamWLUjS1S6udOZ2 8wyPCOeLiLpC9AuP3+Mx3z926PL5GcgfB2wBRIMYycHq5EnJ6BR8M/MaFIXD8cLo eiuwmZofVXsRBPuUqy9ofAQc0tNP/F783eMmmbGI8NrmhHquyhZlIa74veBL5dyQ QWl4dpv3O8cPHKDFtdaxIaBLjGNVRW6/6foGHHCs+dqzA0NZSjVEA== From: Ilya Leoshkevich To: Thomas Huth , Richard Henderson Cc: David Hildenbrand , qemu-s390x@nongnu.org, qemu-devel@nongnu.org, Ilya Leoshkevich Subject: [PATCH v4 4/5] target/s390x: Implement DIVIDE TO INTEGER Date: Wed, 4 Feb 2026 13:07:47 +0100 Message-ID: <20260204121026.645382-5-iii@linux.ibm.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260204121026.645382-1-iii@linux.ibm.com> References: <20260204121026.645382-1-iii@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: mUdqtIAEncuJwKyh71R-1kvKWqvqZ43Q X-Authority-Analysis: v=2.4 cv=VcX6/Vp9 c=1 sm=1 tr=0 ts=69833738 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=HzLeVaNsDn8A:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=gfqx3tZHngwHFgT-_TgA:9 X-Proofpoint-GUID: mUdqtIAEncuJwKyh71R-1kvKWqvqZ43Q X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjA0MDA5MCBTYWx0ZWRfX61JKC2AfTUP6 QJ+72vvMWOWnXRt0rCSMEaSYfPqSpYF6MJe52J4E8LA5DCUmG9NUWkeBtIVYMp8XJnD9dKRPQBH p4WZkIcv/zT/t5YsmdH9YKVId+iUiVk0/mcQgKlRZoXu20KVHGuuSVthvnOsJwnjP4yPIXKyliJ UFpKwjOjyJ7YmR9TH7PC6TRXKVz03CEpScphEDP/rZVs+FR//mAceu8aRoL14eA3+EpKNxg305w OmYI0UMtArVub56pOls+gfvdrKPB8scI6APoQawiJlO9VDwXu/QvjglFiMPkDVfMcStRTPE+8Gw V6ARbB7b8UC8gJUKaRODfh1BekeR3y5ijs85nLdwlxSFrlStIrXBMcH8N8JYpCKsf2mdFnzm39n w5m3HsMmsLjGflV90K5sOY3MoYL0r1JZFwBkYxELS3ZATlwCNXWndXh8dm0xtH8qvK42T21iEaT oN2z7NmSclm+gfki0jQ== 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-02-04_02,2026-02-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 spamscore=0 adultscore=0 bulkscore=0 phishscore=0 lowpriorityscore=0 impostorscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2602040090 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: 1770207076086154101 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 | 142 +++++++++++++++++++++++++++++++ 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, 240 insertions(+), 1 deletion(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 8094358c2e4..87409753483 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -5361,6 +5361,148 @@ 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; + + /* 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; + parts_round_to_int_normal(n, + is_q_smallish ? + final_quotient_rounding_mode : + float_round_to_zero, + 0, fmt->frac_size); + + /* Compute precise remainder */ + r_precise_buf =3D *b; + 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; + status->float_exception_flags =3D 0; + parts_uncanon(r, status, fmt); + r_flags =3D status->float_exception_flags; + r->frac &=3D (1ULL << fmt->frac_size) - 1; + parts_canonicalize(r, status, fmt); + + /* 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 Sat Feb 7 07:09:46 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=1770207073; cv=none; d=zohomail.com; s=zohoarc; b=U9V4RFwUq2KFo2+kF516K8QvACV+I/m0tEy5SFj7sAqnFr5xyUsgQ4GzzYularh+hat6bOIAuwjvcU/0W7f2JKo2hG1ZPXB9x9khsGN4+KC6aHszDpRFgGkHeh2NPJtBsIoTuRSDJuH3waRkfdr4OcnbB46P28h6J83yEvFC+G4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770207073; 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=gY0PuFrxeZ8nQtNpLakhqTSx9W7H58wIGYM0OXWqzqIfJw0XtGFtJTXqmAQSIEHQZXzbxDuCQ1QDtP2zK25Jqwhxw/mUZzHcgg1/nwwJfBVl+i4N1Hi/XMpLQ0pjKmInAFIA5fyZXAlgcktDOIPyKVTY3FkDn6gGvOeiJlLdsjU= 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 1770207073744270.035095611522; Wed, 4 Feb 2026 04:11:13 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vnbig-00036O-6N; Wed, 04 Feb 2026 07:10:55 -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 1vnbiV-00031n-Or; Wed, 04 Feb 2026 07:10:43 -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 1vnbiS-0006SD-Mx; Wed, 04 Feb 2026 07:10:43 -0500 Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 6143YvYu012920; Wed, 4 Feb 2026 12:10:33 GMT Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4c175mybvj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 04 Feb 2026 12:10:33 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 614AuEYk029421; Wed, 4 Feb 2026 12:10:32 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4c1v2sd7wa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 04 Feb 2026 12:10:32 +0000 Received: from smtpav04.fra02v.mail.ibm.com (smtpav04.fra02v.mail.ibm.com [10.20.54.103]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 614CAUvl52101436 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 4 Feb 2026 12:10:30 GMT Received: from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A9EAE20040; Wed, 4 Feb 2026 12:10:30 +0000 (GMT) Received: from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4AF6C2004B; Wed, 4 Feb 2026 12:10:30 +0000 (GMT) Received: from heavy.ibm.com (unknown [9.87.140.180]) by smtpav04.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 4 Feb 2026 12:10:30 +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=CiRTZc6VO6/gbF4PruyRtz rlpJSbUgeoEtJl/juSQ/frOw0cKiRSunm7QznMB2surAGzQ1AtQ9VdCCOfCKKf8b 0wpbvEpHYflyPqTeSBPydIZmKHeDs9ihZ1IlG4Zz5UAbDZVrNnUIxhOW2GF0GCxM sEGnKvxGj/FaFZ9J8VRsdRnpxQQhnn+eL33n6VdkYQ69H/iODgpZmt0XD+tiWFx9 9oig9jcJ8jkaZ821OU7JFI1OP4HExU7+xVMqzpFSICXGmQOPoQuAKCgH0o+GT1XZ OcuzTKJAsUVDdxnk+wUT0SVGHxRG+FCyM4Wrx5fhy9lvdubzBvNQzVMrIk4iBELg == 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 v4 5/5] tests/tcg/s390x: Test DIVIDE TO INTEGER Date: Wed, 4 Feb 2026 13:07:48 +0100 Message-ID: <20260204121026.645382-6-iii@linux.ibm.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260204121026.645382-1-iii@linux.ibm.com> References: <20260204121026.645382-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-ORIG-GUID: kEfCT1UQ2-SYbgejyoJrvtCqzd_qzkiX X-Authority-Analysis: v=2.4 cv=VcX6/Vp9 c=1 sm=1 tr=0 ts=69833739 cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A: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-GUID: kEfCT1UQ2-SYbgejyoJrvtCqzd_qzkiX X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjA0MDA5MCBTYWx0ZWRfX5IetQI1BHcvV rA603Qtv0X4BMq6Px2g4k+kDEVYIykd2ABn2pwJOCcJJ8NIJOqkElbBhQvAownqJxkFqiMPFLc1 uKuSXhplJTEoeNJrj7egb3VUWipp/YlozszTl/xHdnRc8isnwBC7YjREdK8xcTvzylM2pqnK6Of zoGLZFoc5sT1tpOs7zjypQrk3UCWGXPtMgJJaQ1hCjvthqcPzYCB/0BRWZr9v4WhjJTfTeej+1h tvzCFN5MuFeRyMgsRVG30zHdN6mAXwZkQRwVWoYprYjaztURVlRMY7gtaSf9XjMHtAyrRoJJ4zo 0DiDdcPX3XW/W6HBtu5sFNIDbX1FKg/pPft6W+781hsD4UhAoc2Er/I9m/Sb8pKe+o2eqkjIVGs BAMiu1C/DP26QDblPeRgpG+GJUghYop8+d90weaYdc9B2H9GQSkJ8r5kzSo8OeZVyNhxuvby21P FlsUjtH/DKxo+icvP9g== 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-02-04_02,2026-02-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 spamscore=0 adultscore=0 bulkscore=0 phishscore=0 lowpriorityscore=0 impostorscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2602040090 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: 1770207076065154100 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