From nobody Wed Nov 5 14:32:20 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 1534820259803845.8042872446791; Mon, 20 Aug 2018 19:57:39 -0700 (PDT) Received: from localhost ([::1]:50391 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frwrS-0000Xo-Rb for importer@patchew.org; Mon, 20 Aug 2018 22:57:38 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54384) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frwlc-0004Ak-Aa for qemu-devel@nongnu.org; Mon, 20 Aug 2018 22:51:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frwlY-0004im-PX for qemu-devel@nongnu.org; Mon, 20 Aug 2018 22:51:36 -0400 Received: from mail-qk0-x241.google.com ([2607:f8b0:400d:c09::241]:41431) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1frwlY-0004iP-K1; Mon, 20 Aug 2018 22:51:32 -0400 Received: by mail-qk0-x241.google.com with SMTP id h138-v6so7422850qke.8; Mon, 20 Aug 2018 19:51:32 -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.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Aug 2018 19:51:31 -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=YQLliVHU55ssZlnms3jBVv+Ym3hnkhp3vCf4sXpDc/s=; b=i7oiFJ3V/17gdatuGBZqHq5jNTspIyzI/Y1ZdlCkJLov4++iOae6r0Imu/IXnQM8CY NuuzZln9yL4XtV9T4zQAeshgkAcFetYvm9Mhg7s/En/dVNha2LoJDVXibtV1/VGpBjmt wtmuthOm3ER9rGIR5t5ULUW33883XPWxbF+IEs6CLoW38CYGSTjA0tyrUBs6/FAafkhO wDE9FtA4umk/IAJf/93gSl0cpjKc6mPApyURdKQ8Btb3n9436RREczVmi3HLwQ7ZjaIE C+/xrgHJfLQKHjWx1WrGdkJB8kzMpyP90rt4PQwvFOC4xMGrjmEVNhtKSWy5O0nOfv1o SZzQ== 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=YQLliVHU55ssZlnms3jBVv+Ym3hnkhp3vCf4sXpDc/s=; b=RP6fLT30pKX1gECkp9aEoc+dza3zJuT9SVU1BpKBWDwsZ6RGZYZteXaom074abwxXx 6ckwhNO4WRstIMG8B7ElWmsMaRXgkyLPfJxuGognW8mxHzCZ7QHHa3sx8kTKWESp+9is bi2x9c3RILQGD5BDBXU3oczHe1LGVwou4skh6KTZ4M4w74Zd6jMaJ64NMggObG5Au9bG tp5cxLfCWlYkZT/WTkLMhwR3VY1DNX24KnVVadMLxaSmkCSfkcrE3SWnhIExr3tfmac8 ymUKhNtv7PWJUTLMm9u2Y2rhCS8X310tfPiXuilwxNhKPkXAFDf9dq1X7YL1/m+VgKnk bLzQ== X-Gm-Message-State: AOUpUlErqMQvbG8R6zd07unOu2ZS5slK7nIL34Z6eZwSzwhwweOe9xWD HmOLMAxmknVCav1uHaZjjevVMk7ok4E= X-Google-Smtp-Source: AA+uWPyKIiQqoHvqjPUXl0E6C7hfcMNu8zNXWmwZbd9jmOciIotE9VXD7mhoF0+eXbBul7ktq8BDEA== X-Received: by 2002:a37:b744:: with SMTP id h65-v6mr45284988qkf.161.1534819891876; Mon, 20 Aug 2018 19:51:31 -0700 (PDT) From: Pavel Zbitskiy To: qemu-devel@nongnu.org Date: Mon, 20 Aug 2018 22:51:01 -0400 Message-Id: <20180821025104.19604-5-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:c09::241 Subject: [Qemu-devel] [PATCH 4/7] target/s390x: fix IPM polluting irrelevant bits 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" Suppose psw.mask=3D0x0000000080000000, cc=3D2, r1=3D0 and we do "ipm 1". This command must touch only bits 32-39, so the expected output is r1=3D0x20000000. However, currently qemu yields r1=3D0x20008000, because irrelevant parts of PSW leak into r1 during program mask transfer. Signed-off-by: Pavel Zbitskiy Reviewed-by: David Hildenbrand --- target/s390x/translate.c | 17 +++++++---------- tests/tcg/s390x/Makefile.target | 1 + tests/tcg/s390x/ipm.c | 22 ++++++++++++++++++++++ 3 files changed, 30 insertions(+), 10 deletions(-) create mode 100644 tests/tcg/s390x/ipm.c diff --git a/target/s390x/translate.c b/target/s390x/translate.c index 929fc2db28..f58b36b789 100644 --- a/target/s390x/translate.c +++ b/target/s390x/translate.c @@ -2445,20 +2445,17 @@ static DisasJumpType op_insi(DisasContext *s, Disas= Ops *o) =20 static DisasJumpType op_ipm(DisasContext *s, DisasOps *o) { - TCGv_i64 t1; + TCGv_i64 t1, t2; =20 gen_op_calc_cc(s); - tcg_gen_andi_i64(o->out, o->out, ~0xff000000ull); - t1 =3D tcg_temp_new_i64(); - tcg_gen_shli_i64(t1, psw_mask, 20); - tcg_gen_shri_i64(t1, t1, 36); - tcg_gen_or_i64(o->out, o->out, t1); - - tcg_gen_extu_i32_i64(t1, cc_op); - tcg_gen_shli_i64(t1, t1, 28); - tcg_gen_or_i64(o->out, o->out, t1); + tcg_gen_extract_i64(t1, psw_mask, 40, 4); + t2 =3D tcg_temp_new_i64(); + tcg_gen_extu_i32_i64(t2, cc_op); + tcg_gen_deposit_i64(t1, t1, t2, 4, 60); + tcg_gen_deposit_i64(o->out, o->out, t1, 24, 8); tcg_temp_free_i64(t1); + tcg_temp_free_i64(t2); return DISAS_NEXT; } =20 diff --git a/tests/tcg/s390x/Makefile.target b/tests/tcg/s390x/Makefile.tar= get index f62f950d8e..c800a582e5 100644 --- a/tests/tcg/s390x/Makefile.target +++ b/tests/tcg/s390x/Makefile.target @@ -2,3 +2,4 @@ VPATH+=3D$(SRC_PATH)/tests/tcg/s390x CFLAGS+=3D-march=3DzEC12 -m64 TESTS+=3Dhello-s390x TESTS+=3Dcsst +TESTS+=3Dipm diff --git a/tests/tcg/s390x/ipm.c b/tests/tcg/s390x/ipm.c new file mode 100644 index 0000000000..742f3a18c5 --- /dev/null +++ b/tests/tcg/s390x/ipm.c @@ -0,0 +1,22 @@ +#include +#include + +int main(void) +{ + uint32_t op1 =3D 0x55555555; + uint32_t op2 =3D 0x44444444; + uint64_t cc =3D 0xffffffffffffffffull; + + asm volatile( + " clc 0(4,%[op1]),0(%[op2])\n" + " ipm %[cc]\n" + : [cc] "+r" (cc) + : [op1] "r" (&op1), + [op2] "r" (&op2) + : "cc"); + if (cc !=3D 0xffffffff20ffffffull) { + write(1, "bad cc\n", 7); + return 1; + } + return 0; +} --=20 2.18.0