From nobody Wed Nov 5 10:07:10 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 1533870475612886.4956153614116; Thu, 9 Aug 2018 20:07:55 -0700 (PDT) Received: from localhost ([::1]:54020 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fnxmM-0001qu-Ir for importer@patchew.org; Thu, 09 Aug 2018 23:07:54 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44048) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fnxiN-000663-Cj for qemu-devel@nongnu.org; Thu, 09 Aug 2018 23:03:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fnxiM-00043g-G5 for qemu-devel@nongnu.org; Thu, 09 Aug 2018 23:03:47 -0400 Received: from mail-qt0-x22c.google.com ([2607:f8b0:400d:c0d::22c]:33368) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fnxiM-00042V-BP; Thu, 09 Aug 2018 23:03:46 -0400 Received: by mail-qt0-x22c.google.com with SMTP id c15-v6so8951194qtp.0; Thu, 09 Aug 2018 20:03:46 -0700 (PDT) Received: from WAL-L-PZ01.rocketsoftware.com ([2620:117:0:a::c]) by smtp.gmail.com with ESMTPSA id i1-v6sm4457425qtj.65.2018.08.09.20.03.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Aug 2018 20:03:44 -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=R/zYizD8qj0nGYRPK174l1I+UDVDEZJW4JT14os92wM=; b=agBK/5XYxl3yAcLrQVF5KDU2V++d9nwpzWK/DZ2jrkAMDMhIhDgBUlyV1nZL7MrGrY lNHUOc7HoWwo4ucupWlcT1yJ+iDqtloVesyyBQ4wDHXeswQ4yD3AM/LbWza8pQ/RTjeh AI35G+iLoxUTFGcicfGOdaz9iAbM7w1VqUwf1AvZ2/fVyXjW+heSHob20cLtOm0ae9AY gdBIiuUhvEGWNQx0fNT+uvUHDCrUcZUpDqOh1S4WsH/gPFyLrU+17cg9+lsv21rZ96mP PNiaU7wbW+dzxhVeU/TIopXNQXFcC9WsPT4cKimhdH+K8iwhWRnzyMdXJCg+ilC/64Pm 50vA== 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=R/zYizD8qj0nGYRPK174l1I+UDVDEZJW4JT14os92wM=; b=ePTL7J0izFvyeubNyEprf6LF5HbQkqmbupE3pg7OQzFncnuc15vfCHQ/9B6z8Y24a2 Qp7xueJrSiZBUCx+kkdq928dq6ps/687gecfUGPqNRNHX9gCClnjO68Weehmb1YtJF+R GdFtbPFhSvjzalwFYU++hcXlXsQ6adKkI5EsYN9Z4oZi41xZZX2L0nFkB1eySdYQHDtl Naifig+AqlGN9Sa1kUF38sx8kRRkwU5LGy/7jcv61zy+OsnlBWPCWvgRn1lOZJ0ukoV8 uUT8bq8v1wgxLxVD6X9LDTy3bYk3npKNoLMA541XeWJMWjoy6zq052pO1sVVtouZj6HK /Pag== X-Gm-Message-State: AOUpUlHUdoRl4q7jYFZqLtxsNInDNtgxCB00o6EM2V5LINex/pi5p/vC F/V6zpxiBjT8/t4+IDNjDvftHqm3MwM= X-Google-Smtp-Source: AA+uWPzBVbHZHMQ47YsGUN0k3ih8BLjg44R2sbT9MAo2ED3HFEouK09N3lbm7WzSos4ixx019Bi0cg== X-Received: by 2002:ac8:1acd:: with SMTP id h13-v6mr4638523qtk.206.1533870225373; Thu, 09 Aug 2018 20:03:45 -0700 (PDT) From: Pavel Zbitskiy To: qemu-devel@nongnu.org Date: Thu, 9 Aug 2018 23:01:36 -0400 Message-Id: <20180810030139.25916-5-pavel.zbitskiy@gmail.com> In-Reply-To: <20180810030139.25916-1-pavel.zbitskiy@gmail.com> References: <20180810030139.25916-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::22c 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 --- 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 d0d2c3412f..6f8fbda222 100644 --- a/target/s390x/translate.c +++ b/target/s390x/translate.c @@ -2437,20 +2437,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