From nobody Sat May 18 19:12:57 2024 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=1678750756; cv=none; d=zohomail.com; s=zohoarc; b=nlu6nMwHFGtGy2EQsoZGKhQbgCyl2POVYv4tHyx759tgJ7B1zC206IDS4Oe39w0pvPYtFR6kP7ZsKN4yV7lgl1lpE5mUwr31UsMvjV24WyKcACe6W4m5TPL0g+pwcwZwjZwbegcbOaktWNZ/E94t6zU5D7KRRQ1V75Dau2h4Bf4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678750756; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=cTgzSpQHMzBnzJjgHOzLUPz+PrdkEvzvzoO2DyMrtNI=; b=BFG47HCD5N77E5JpDDdQjGtfp84RvMgSWeWueC5cdEcHgAMywP/DxnxZxeGarLNxi7T0KhD7I+qGEVCUAWirsRXnG9WP1Dv7ODWQPgISUVR60nH5ro3MnjzfJHraF4s8QG7qry5xDKaLi3Mh1WxUtl1UdRV4GEvXJQPWOVucRcg= 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 1678750756950629.917194412594; Mon, 13 Mar 2023 16:39:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pbrkZ-0007JH-2I; Mon, 13 Mar 2023 19:38:43 -0400 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 1pbrkT-0007IN-Er; Mon, 13 Mar 2023 19:38:37 -0400 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 1pbrkR-0003Sv-J4; Mon, 13 Mar 2023 19:38:37 -0400 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32DNQiRq013046; Mon, 13 Mar 2023 23:38:32 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3padgv87r6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 13 Mar 2023 23:38:32 +0000 Received: from m0098410.ppops.net (m0098410.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 32DNSdBl022066; Mon, 13 Mar 2023 23:38:32 GMT Received: from ppma04ams.nl.ibm.com (63.31.33a9.ip4.static.sl-reverse.com [169.51.49.99]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3padgv87qn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 13 Mar 2023 23:38:31 +0000 Received: from pps.filterd (ppma04ams.nl.ibm.com [127.0.0.1]) by ppma04ams.nl.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 32DFkYfD028730; Mon, 13 Mar 2023 23:38:29 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma04ams.nl.ibm.com (PPS) with ESMTPS id 3p8h96m00t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 13 Mar 2023 23:38:29 +0000 Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 32DNcPVS20316638 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 13 Mar 2023 23:38:26 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D2F7320040; Mon, 13 Mar 2023 23:38:25 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 594842004B; Mon, 13 Mar 2023 23:38:25 +0000 (GMT) Received: from heavy.boeblingen.de.ibm.com (unknown [9.171.57.117]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 13 Mar 2023 23:38:25 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=cTgzSpQHMzBnzJjgHOzLUPz+PrdkEvzvzoO2DyMrtNI=; b=V+wYrwS7VnlrAvhQ+90h3bsbShNfCP4D7TXpSQ3kfRb1q3hfoIwQiJt2mTI1Qc7HSG6A YW9vPx3EgOsl+KcnIh3oE/cQ5rcqUYeSC7x/NPTlFJmGHiF8OhSrXtS7uI5emlKGKyKg MtXop5LzsMWtIovmtg8P0DFpvFvY3/I38dC4XHGS0+4fOMu6bdi8/07alhCOcoLpDNxo 9O6Uq3QqXfluGNbtWPbvZ0lvSv3ylXrLF/Yvak8rzEjzcqe+eLySW2jIIrar2vGrBnfu sYNUDKKQF1EsSneXxjuYC+zK8n5mjyV4FNAc9J52pbh4YREhn3nhiMB9pzUEHCorbtuG HQ== From: Ilya Leoshkevich To: Richard Henderson , David Hildenbrand Cc: qemu-s390x@nongnu.org, qemu-devel@nongnu.org, Ilya Leoshkevich , Nina Schoetterl-Glausch Subject: [PATCH 1/2] target/s390x: Fix EXECUTE of relative long instructions Date: Tue, 14 Mar 2023 00:38:18 +0100 Message-Id: <20230313233819.122329-2-iii@linux.ibm.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230313233819.122329-1-iii@linux.ibm.com> References: <20230313233819.122329-1-iii@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: 1kCYjaF5TRKrK9TxCxTa3cYFvJaKvlAG X-Proofpoint-ORIG-GUID: qFW3rTMPaMNWoN-Ls4Ib6lJo21g00WN- X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-03-13_11,2023-03-13_03,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 clxscore=1015 mlxlogscore=999 phishscore=0 adultscore=0 suspectscore=0 bulkscore=0 spamscore=0 priorityscore=1501 mlxscore=0 lowpriorityscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2303130186 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, 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: 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: 1678750758251100008 Content-Type: text/plain; charset="utf-8" The code uses the wrong base for relative addressing: it should use the target instruction address and not the EXECUTE's address. Fix by storing the target instruction address in the new CPUS390XState member and loading it from the code generated by in2_ri2(). Reported-by: Nina Schoetterl-Glausch Signed-off-by: Ilya Leoshkevich Reviewed-by: David Hildenbrand Reviewed-by: Richard Henderson --- target/s390x/cpu.h | 1 + target/s390x/tcg/mem_helper.c | 1 + target/s390x/tcg/translate.c | 10 +++++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h index 7d6d01325b2..8aaf8dd5a3b 100644 --- a/target/s390x/cpu.h +++ b/target/s390x/cpu.h @@ -87,6 +87,7 @@ struct CPUArchState { uint64_t cc_vr; =20 uint64_t ex_value; + uint64_t ex_target; =20 uint64_t __excp_addr; uint64_t psa; diff --git a/target/s390x/tcg/mem_helper.c b/target/s390x/tcg/mem_helper.c index 6835c26dda4..00afae2b640 100644 --- a/target/s390x/tcg/mem_helper.c +++ b/target/s390x/tcg/mem_helper.c @@ -2530,6 +2530,7 @@ void HELPER(ex)(CPUS390XState *env, uint32_t ilen, ui= nt64_t r1, uint64_t addr) that ex_value is non-zero, which flags that we are in a state that requires such execution. */ env->ex_value =3D insn | ilen; + env->ex_target =3D addr; } =20 uint32_t HELPER(mvcos)(CPUS390XState *env, uint64_t dest, uint64_t src, diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index 811049ea281..fefff95b91c 100644 --- a/target/s390x/tcg/translate.c +++ b/target/s390x/tcg/translate.c @@ -5888,7 +5888,15 @@ static void in2_a2(DisasContext *s, DisasOps *o) =20 static void in2_ri2(DisasContext *s, DisasOps *o) { - o->in2 =3D tcg_const_i64(s->base.pc_next + (int64_t)get_field(s, i2) *= 2); + int64_t delta =3D (int64_t)get_field(s, i2) * 2; + + if (unlikely(s->ex_value)) { + o->in2 =3D tcg_temp_new_i64(); + tcg_gen_ld_i64(o->in2, cpu_env, offsetof(CPUS390XState, ex_target)= ); + tcg_gen_addi_i64(o->in2, o->in2, delta); + } else { + o->in2 =3D tcg_const_i64(s->base.pc_next + delta); + } } #define SPEC_in2_ri2 0 =20 --=20 2.39.2 From nobody Sat May 18 19:12:57 2024 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=1678750757; cv=none; d=zohomail.com; s=zohoarc; b=CgBKG9HhEAMsF7v1bw4xGJOUee2qOtlgfAmN1kg3jRY2/eJ4r6DhvdmD2LblhQiM0O5CWBjPdfbZDAA/s9+ISy53DYjP2+rYdJfcFyLF1mJ5hLp6zC3jmJJI8NnYrhfrYPsJxZJ3YVur/COuc5WNmeG6B8Foa6CDr48Esx/TtuE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678750757; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=xP9B2t89C35NkSuoGDuh9oZ7d2NdyDL3JZ9VhMChmPs=; b=Ge32fJqJTQn1ZYXSwUs2JEHohMBTWxCvE16sAhEwtVrsNXGBXIRlHh+WoSJ6Vawxo/JpaozFJmZtnGbqW9+aFV/uilkaWPatzWSYWX4nUF/uKpGrjdHshu3ZWftWRGNdkuigFZ7WwjYNmw/mt9vhr1miWkynovRKdRGLLImb/B0= 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 1678750757124305.66975780289954; Mon, 13 Mar 2023 16:39:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pbrkd-0007Lc-Kv; Mon, 13 Mar 2023 19:38:47 -0400 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 1pbrkU-0007Ig-RF; Mon, 13 Mar 2023 19:38:39 -0400 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 1pbrkR-0003Sr-DQ; Mon, 13 Mar 2023 19:38:38 -0400 Received: from pps.filterd (m0098421.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32DNKkFe024061; Mon, 13 Mar 2023 23:38:33 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3paaud41jf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 13 Mar 2023 23:38:32 +0000 Received: from m0098421.ppops.net (m0098421.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 32DNJbF3010366; Mon, 13 Mar 2023 23:38:32 GMT Received: from ppma06ams.nl.ibm.com (66.31.33a9.ip4.static.sl-reverse.com [169.51.49.102]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3paaud41j4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 13 Mar 2023 23:38:32 +0000 Received: from pps.filterd (ppma06ams.nl.ibm.com [127.0.0.1]) by ppma06ams.nl.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 32DDiBsa030078; Mon, 13 Mar 2023 23:38:30 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma06ams.nl.ibm.com (PPS) with ESMTPS id 3p8gwfc0n8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 13 Mar 2023 23:38:30 +0000 Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 32DNcS1135783072 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 13 Mar 2023 23:38:28 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0D6D020040; Mon, 13 Mar 2023 23:38:28 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 92D012004B; Mon, 13 Mar 2023 23:38:27 +0000 (GMT) Received: from heavy.boeblingen.de.ibm.com (unknown [9.171.57.117]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 13 Mar 2023 23:38:27 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=xP9B2t89C35NkSuoGDuh9oZ7d2NdyDL3JZ9VhMChmPs=; b=gogy/Z073iXbxfGVizsM1i1ok56BPK5NZmR2To1A795sDf2r4jm87APisVfkEJpxixrA 1DmwK7Bs6c3caFJE5ZDkOr3BRacVLOTUaoXYkVrAYwX26hwysiEmWFaBeDvEhNspZgrz grWwIdRJBReNDiqWw7cuqMvZ2WXahRAjhZF3ryS0iZdwMU5JGqNthxTTkuLsN9m1xlJg s8Eb6PLVB4ZtzkdfTPIpRm3FwP9VXgfn51izIKSbv/BwStL4mPJiDgTXrTxHicrviDAT XNcgyRJ8qD43rf1L725tSrQONxiDfKxPoL3pYZ5TPttLSuI0t1YfiYeWMk/et0DbDBK0 Kw== From: Ilya Leoshkevich To: Richard Henderson , David Hildenbrand Cc: qemu-s390x@nongnu.org, qemu-devel@nongnu.org, Ilya Leoshkevich Subject: [PATCH 2/2] tests/tcg/s390x: Add ex-relative-long.c Date: Tue, 14 Mar 2023 00:38:19 +0100 Message-Id: <20230313233819.122329-3-iii@linux.ibm.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230313233819.122329-1-iii@linux.ibm.com> References: <20230313233819.122329-1-iii@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: LSi3n-KHWGszWHoCkXJlyrStZLPZQnLP X-Proofpoint-ORIG-GUID: T83nquHXVFCMX3NZi1WV1MYOBw649W72 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-03-13_11,2023-03-13_03,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 lowpriorityscore=0 mlxlogscore=999 suspectscore=0 adultscore=0 spamscore=0 impostorscore=0 phishscore=0 priorityscore=1501 clxscore=1015 mlxscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2303130186 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_MSPIKE_H2=-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: 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: 1678750758264100009 Content-Type: text/plain; charset="utf-8" Test EXECUTE and EXECUTE RELATIVE LONG with relative long instructions as targets. Signed-off-by: Ilya Leoshkevich --- tests/tcg/s390x/Makefile.target | 1 + tests/tcg/s390x/ex-relative-long.c | 149 +++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 tests/tcg/s390x/ex-relative-long.c diff --git a/tests/tcg/s390x/Makefile.target b/tests/tcg/s390x/Makefile.tar= get index 72ad309b273..ed2709ee2c3 100644 --- a/tests/tcg/s390x/Makefile.target +++ b/tests/tcg/s390x/Makefile.target @@ -28,6 +28,7 @@ TESTS+=3Ddiv TESTS+=3Dclst TESTS+=3Dlong-double TESTS+=3Dcdsg +TESTS+=3Dex-relative-long =20 cdsg: CFLAGS+=3D-pthread cdsg: LDFLAGS+=3D-pthread diff --git a/tests/tcg/s390x/ex-relative-long.c b/tests/tcg/s390x/ex-relati= ve-long.c new file mode 100644 index 00000000000..e47dac7e2c3 --- /dev/null +++ b/tests/tcg/s390x/ex-relative-long.c @@ -0,0 +1,149 @@ +/* Check EXECUTE with relative long instructions as targets. */ +#include +#include + +struct test { + const char *name; + long (*func)(long reg, long *cc); + long exp_reg; + long exp_mem; + long exp_cc; +}; + +/* Variable targeted by relative long instructions. */ +long mem; + +/* Initial %r2 value. */ +#define REG 0x1234567887654321 + +/* Initial "mem" value. */ +#define MEM 0xfedcba9889abcdef + +/* Initial cc value. */ +#define CC 0 + +/* Relative long instructions. */ +#define FOR_EACH_TEST(F) = \ + F(cgfrl, REG, MEM, 2) = \ + F(cghrl, REG, MEM, 2) = \ + F(cgrl, REG, MEM, 2) = \ + F(chrl, REG, MEM, 1) = \ + F(clgfrl, REG, MEM, 2) = \ + F(clghrl, REG, MEM, 2) = \ + F(clgrl, REG, MEM, 1) = \ + F(clhrl, REG, MEM, 2) = \ + F(clrl, REG, MEM, 1) = \ + F(crl, REG, MEM, 1) = \ + F(larl, (long)&mem, MEM, CC) = \ + F(lgfrl, 0xfffffffffedcba98, MEM, CC) = \ + F(lghrl, 0xfffffffffffffedc, MEM, CC) = \ + F(lgrl, MEM, MEM, CC) = \ + F(lhrl, 0x12345678fffffedc, MEM, CC) = \ + F(llghrl, 0x000000000000fedc, MEM, CC) = \ + F(llhrl, 0x123456780000fedc, MEM, CC) = \ + F(lrl, 0x12345678fedcba98, MEM, CC) = \ + F(stgrl, REG, REG, CC) = \ + F(sthrl, REG, 0x4321ba9889abcdef, CC) = \ + F(strl, REG, 0x8765432189abcdef, CC) + +/* Test functions. */ +#define DEFINE_EX_TEST(insn, exp_reg, exp_mem, exp_cc) = \ + static long test_ex_ ## insn(long reg, long *cc) = \ + { = \ + register long reg_val asm("r2"); = \ + long cc_val, mask, target; = \ + = \ + reg_val =3D reg; = \ + asm("xgr %[cc_val],%[cc_val]\n" /* initial cc */ = \ + "lghi %[mask],0x20\n" /* make target use %r2 */ = \ + "larl %[target],0f\n" = \ + "ex %[mask],0(%[target])\n" = \ + "jg 1f\n" = \ + "0: " #insn " %%r0,mem\n" = \ + "1: ipm %[cc_val]\n" = \ + : [cc_val] "=3D&r" (cc_val) = \ + , [mask] "=3D&r" (mask) = \ + , [target] "=3D&r" (target) = \ + , [reg_val] "+&r" (reg_val) = \ + : : "cc", "memory"); = \ + reg =3D reg_val; = \ + *cc =3D (cc_val >> 28) & 3; = \ + = \ + return reg_val; = \ + } + +#define DEFINE_EXRL_TEST(insn, exp_reg, exp_mem, exp_cc) = \ + static long test_exrl_ ## insn(long reg, long *cc) = \ + { = \ + register long reg_val asm("r2"); = \ + long cc_val, mask; = \ + = \ + reg_val =3D reg; = \ + asm("xgr %[cc_val],%[cc_val]\n" /* initial cc */ = \ + "lghi %[mask],0x20\n" /* make target use %r2 */ = \ + "exrl %[mask],0f\n" = \ + "jg 1f\n" = \ + "0: " #insn " %%r0,mem\n" = \ + "1: ipm %[cc_val]\n" = \ + : [cc_val] "=3D&r" (cc_val) = \ + , [mask] "=3D&r" (mask) = \ + , [reg_val] "+&r" (reg_val) = \ + : : "cc", "memory"); = \ + reg =3D reg_val; = \ + *cc =3D (cc_val >> 28) & 3; = \ + = \ + return reg_val; = \ + } + +FOR_EACH_TEST(DEFINE_EX_TEST) +FOR_EACH_TEST(DEFINE_EXRL_TEST) + +/* Test definitions. */ +#define REGISTER_EX_EXRL_TEST(ex_insn, insn, _exp_reg, _exp_mem, _exp_cc) = \ + { = \ + .name =3D #ex_insn " " #insn, = \ + .func =3D test_ ## ex_insn ## _ ## insn, = \ + .exp_reg =3D (long)(_exp_reg), = \ + .exp_mem =3D (long)(_exp_mem), = \ + .exp_cc =3D (long)(_exp_cc), = \ + }, + +#define REGISTER_EX_TEST(insn, exp_reg, exp_mem, exp_cc) = \ + REGISTER_EX_EXRL_TEST(ex, insn, exp_reg, exp_mem, exp_cc) + +#define REGISTER_EXRL_TEST(insn, exp_reg, exp_mem, exp_cc) = \ + REGISTER_EX_EXRL_TEST(exrl, insn, exp_reg, exp_mem, exp_cc) + +static const struct test tests[] =3D { + FOR_EACH_TEST(REGISTER_EX_TEST) + FOR_EACH_TEST(REGISTER_EXRL_TEST) +}; + +/* Loop over all tests and run them. */ +int main(void) +{ + const struct test *test; + int ret =3D EXIT_SUCCESS; + long reg, cc; + size_t i; + + for (i =3D 0; i < sizeof(tests) / sizeof(tests[0]); i++) { + test =3D &tests[i]; + mem =3D MEM; + cc =3D -1; + reg =3D test->func(REG, &cc); +#define ASSERT_EQ(expected, actual) do { = \ + if (expected !=3D actual) { = \ + fprintf(stderr, "%s: " #expected " (0x%lx) !=3D " #actual " (0x%lx= )\n", \ + test->name, expected, actual); = \ + ret =3D EXIT_FAILURE; = \ + } = \ +} while (0) + ASSERT_EQ(test->exp_reg, reg); + ASSERT_EQ(test->exp_mem, mem); + ASSERT_EQ(test->exp_cc, cc); +#undef ASSERT_EQ + } + + return ret; +} --=20 2.39.2