From nobody Wed Nov 5 14:24:47 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534820172153399.6985742664681; Mon, 20 Aug 2018 19:56:12 -0700 (PDT) Received: from localhost ([::1]:50387 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frwq3-00087Y-3S for importer@patchew.org; Mon, 20 Aug 2018 22:56:11 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54353) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frwlX-00047u-Qq for qemu-devel@nongnu.org; Mon, 20 Aug 2018 22:51:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frwlW-0004hO-TW for qemu-devel@nongnu.org; Mon, 20 Aug 2018 22:51:31 -0400 Received: from mail-qt0-x241.google.com ([2607:f8b0:400d:c0d::241]:45957) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1frwlW-0004h3-Ov; Mon, 20 Aug 2018 22:51:30 -0400 Received: by mail-qt0-x241.google.com with SMTP id y5-v6so18607691qti.12; Mon, 20 Aug 2018 19:51:30 -0700 (PDT) Received: from WAL-L-PZ01.rocketsoftware.com (inet-64-112-177-9.bos.netblazr.com. [64.112.177.9]) by smtp.gmail.com with ESMTPSA id d100-v6sm4897991qkh.34.2018.08.20.19.51.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Aug 2018 19:51:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=6MTOPPfWgEiD5Qa/dGXvBQi5ClyI+2IVfWZ0NTcoYMQ=; b=PHwJYkc+efXU3KUuHjxPM5t4Zgy4HIS/Kbh7YiQwUGzg43ubkKmx2Wz+pc2fWSQnCc nts6t2JHfl+FqTL2jRum0ab3MPtgaqfwbuC2Ck6wBCyOJy7uch/+FP4DOFXWH7EfHcMT 9zquYtoRNaoa3/OtJoyUEbLN5LvxlfOMJbP3tARJMU3UvBrW9Pgtm8bahGdQMjkCEg5I qArxoZq+5cvbDyrfrsfukOgKiohq0MWKTV6K9qnc6FNvdnfsLKRbuHXAdiSBpcik7Ay1 M3Gl7LCCKpPWY4n24L4NqUcTbHJgUb5StecvUiJImXbYjWI2fxMmzSqq8jdpqEUYebFr 8JyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=6MTOPPfWgEiD5Qa/dGXvBQi5ClyI+2IVfWZ0NTcoYMQ=; b=fz7SOjXrFvdnk7voBiIy2jZZVvK6k1qmkZy4kHwKAlrfErQ7bWbpReunUEX0BmDpXe V1bmrfh3mQcsYJLpJYkWyWF3aov1PD826EdbvLV43VzkZJrK8g8vrqzkN0XDVhY8+SjR xnBL+EiBZ/NlqYeXjXiF0m9racMd2CholjZgBDcLAxtGk1K1ZR/AyoQaczA6s+iaWt7L yzi+rhkJt05o4B2E3PK+R+EA90SD31e5Xql5p7qwUV2CoWEDJVjplDOyt445XRiYM4nu +kK2NOKsl6jyGQN2J+Bd2nlOO67pdg3REkLx4+Mt4vvLXnYzSEZ2tWoESSb+fXWujZS1 ZIKw== X-Gm-Message-State: AOUpUlGjPwAgyfLuzw/t4Y2Plv4I9apaA5/D8MjX90qSG1WKg2Kz9KpI vgGJnlIfehNZabK2TGTsKtFcV5WfmNE= X-Google-Smtp-Source: AA+uWPxFoQ06GkngF6P6Hoy4lERcrnu48DXmpQsml33osrfafmBd3NtT+iyXiqkoKhHK9HSNDaEvHg== X-Received: by 2002:ac8:234f:: with SMTP id b15-v6mr47178544qtb.336.1534819890244; Mon, 20 Aug 2018 19:51:30 -0700 (PDT) From: Pavel Zbitskiy To: qemu-devel@nongnu.org Date: Mon, 20 Aug 2018 22:51:00 -0400 Message-Id: <20180821025104.19604-4-pavel.zbitskiy@gmail.com> In-Reply-To: <20180821025104.19604-1-pavel.zbitskiy@gmail.com> References: <20180821025104.19604-1-pavel.zbitskiy@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::241 Subject: [Qemu-devel] [PATCH 3/7] target/s390x: fix CSST decoding and runtime alignment check X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Pavel Zbitskiy , david@redhat.com, cohuck@redhat.com, richard.henderson@linaro.org, Alexander Graf , qemu-s390x@nongnu.org, Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDMRC_1 RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" CSST is defined as: C(0xc802, CSST, SSF, CASS, la1, a2, 0, 0, csst, 0) It means that the first parameter is handled by in1_la1(). in1_la1() fills addr1 field, and not in1. Furthermore, when extract32() is used for the alignment check, the third parameter should specify the number of trailing bits that must be 0. For FC these numbers are: FC=3D0 (word, 4 bytes): 2 FC=3D1 (double word, 8 bytes): 3 FC=3D2 (quad word, 16 bytes): 4 For SC these numbers correspond to the size: SC=3D0: 0 SC=3D1: 1 SC=3D2: 2 SC=3D3: 3 SC=3D4: 4 Signed-off-by: Pavel Zbitskiy Reviewed-by: David Hildenbrand --- target/s390x/mem_helper.c | 2 +- target/s390x/translate.c | 4 +-- tests/tcg/s390x/Makefile.target | 1 + tests/tcg/s390x/csst.c | 43 +++++++++++++++++++++++++++++++++ 4 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 tests/tcg/s390x/csst.c diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c index e21a47fb4d..c94dbf3fcb 100644 --- a/target/s390x/mem_helper.c +++ b/target/s390x/mem_helper.c @@ -1442,7 +1442,7 @@ static uint32_t do_csst(CPUS390XState *env, uint32_t = r3, uint64_t a1, } =20 /* Sanity check the alignments. */ - if (extract32(a1, 0, 4 << fc) || extract32(a2, 0, 1 << sc)) { + if (extract32(a1, 0, fc + 2) || extract32(a2, 0, sc)) { goto spec_exception; } =20 diff --git a/target/s390x/translate.c b/target/s390x/translate.c index 111d575c41..929fc2db28 100644 --- a/target/s390x/translate.c +++ b/target/s390x/translate.c @@ -2059,9 +2059,9 @@ static DisasJumpType op_csst(DisasContext *s, DisasOp= s *o) TCGv_i32 t_r3 =3D tcg_const_i32(r3); =20 if (tb_cflags(s->base.tb) & CF_PARALLEL) { - gen_helper_csst_parallel(cc_op, cpu_env, t_r3, o->in1, o->in2); + gen_helper_csst_parallel(cc_op, cpu_env, t_r3, o->addr1, o->in2); } else { - gen_helper_csst(cc_op, cpu_env, t_r3, o->in1, o->in2); + gen_helper_csst(cc_op, cpu_env, t_r3, o->addr1, o->in2); } tcg_temp_free_i32(t_r3); =20 diff --git a/tests/tcg/s390x/Makefile.target b/tests/tcg/s390x/Makefile.tar= get index 9f4076901f..f62f950d8e 100644 --- a/tests/tcg/s390x/Makefile.target +++ b/tests/tcg/s390x/Makefile.target @@ -1,3 +1,4 @@ VPATH+=3D$(SRC_PATH)/tests/tcg/s390x CFLAGS+=3D-march=3DzEC12 -m64 TESTS+=3Dhello-s390x +TESTS+=3Dcsst diff --git a/tests/tcg/s390x/csst.c b/tests/tcg/s390x/csst.c new file mode 100644 index 0000000000..1dae9071fb --- /dev/null +++ b/tests/tcg/s390x/csst.c @@ -0,0 +1,43 @@ +#include +#include + +int main(void) +{ + uint64_t parmlist[] =3D { + 0xfedcba9876543210ull, + 0, + 0x7777777777777777ull, + 0, + }; + uint64_t op1 =3D 0x0123456789abcdefull; + uint64_t op2 =3D 0; + uint64_t op3 =3D op1; + uint64_t cc; + + asm volatile( + " lghi %%r0,%[flags]\n" + " la %%r1,%[parmlist]\n" + " csst %[op1],%[op2],%[op3]\n" + " ipm %[cc]\n" + : [op1] "+m" (op1), + [op2] "+m" (op2), + [op3] "+r" (op3), + [cc] "=3Dr" (cc) + : [flags] "K" (0x0301), + [parmlist] "m" (parmlist) + : "r0", "r1", "cc", "memory"); + cc =3D (cc >> 28) & 3; + if (cc) { + write(1, "bad cc\n", 7); + return 1; + } + if (op1 !=3D parmlist[0]) { + write(1, "bad op1\n", 8); + return 1; + } + if (op2 !=3D parmlist[2]) { + write(1, "bad op2\n", 8); + return 1; + } + return 0; +} --=20 2.18.0