From patchwork Wed Dec 17 16:17:45 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bastian Koppelmann X-Patchwork-Id: 422294 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id D50991400B7 for ; Thu, 18 Dec 2014 02:18:11 +1100 (AEDT) Received: from localhost ([::1]:50089 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y1GMc-0007E1-23 for incoming@patchwork.ozlabs.org; Wed, 17 Dec 2014 10:18:10 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54320) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y1GMC-0006fx-NU for qemu-devel@nongnu.org; Wed, 17 Dec 2014 10:17:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Y1GM6-0004nk-Pq for qemu-devel@nongnu.org; Wed, 17 Dec 2014 10:17:44 -0500 Received: from mail.uni-paderborn.de ([131.234.142.9]:34018) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y1GM6-0004nf-KC for qemu-devel@nongnu.org; Wed, 17 Dec 2014 10:17:38 -0500 From: Bastian Koppelmann To: qemu-devel@nongnu.org Date: Wed, 17 Dec 2014 16:17:45 +0000 Message-Id: <1418833065-2109-1-git-send-email-kbastian@mail.uni-paderborn.de> X-Mailer: git-send-email 2.1.3 X-IMT-Spam-Score: 0.0 () X-PMX-Version: 6.2.0.2453472, Antispam-Engine: 2.7.2.2107409, Antispam-Data: 2014.12.17.150923 X-IMT-Authenticated-Sender: uid=kbastian,ou=People,o=upb,c=de X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 131.234.142.9 Cc: agraf@suse.de, rth@twiddle.net Subject: [Qemu-devel] [PATCH] target-s390x: Add Extract PSW instruction X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Never versions of the linux kernel need this instruction, so let's add it to the tcg frontend. Signed-off-by: Bastian Koppelmann --- target-s390x/insn-data.def | 3 ++- target-s390x/translate.c | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/target-s390x/insn-data.def b/target-s390x/insn-data.def index 4d2feb6..338d510 100644 --- a/target-s390x/insn-data.def +++ b/target-s390x/insn-data.def @@ -287,7 +287,8 @@ C(0xb24f, EAR, RRE, Z, 0, 0, new, r1_32, ear, 0) /* EXTRACT FPC */ C(0xb38c, EFPC, RRE, Z, 0, 0, new, r1_32, efpc, 0) - +/* EXTRACT PSW */ + C(0xb98d, EPSW, RRE, Z, 0, 0, new, r1_32, epsw, 0) /* FIND LEFTMOST ONE */ C(0xb983, FLOGR, RRE, EI, 0, r2_o, r1_P, 0, flogr, 0) diff --git a/target-s390x/translate.c b/target-s390x/translate.c index dbf1993..539a794 100644 --- a/target-s390x/translate.c +++ b/target-s390x/translate.c @@ -2051,6 +2051,25 @@ static ExitStatus op_efpc(DisasContext *s, DisasOps *o) return NO_EXIT; } +static ExitStatus op_epsw(DisasContext *s, DisasOps *o) +{ + TCGv tmp = tcg_temp_new(); + int r1 = get_field(s->fields, r1); + int r2 = get_field(s->fields, r2); + + tcg_gen_shli_tl(tmp, psw_mask, 32); + tcg_gen_andi_tl(regs[r1], regs[r1], ~0xffffffffull); + tcg_gen_or_tl(regs[r1], regs[r1], tmp); + + if (r2 != 0) { + tcg_gen_andi_tl(tmp, psw_mask, ~0xffffffffull); + tcg_gen_andi_tl(regs[r2], regs[r2], ~0xffffffffull); + tcg_gen_or_tl(regs[r2], regs[r2], tmp); + } + tcg_temp_free(tmp); + return NO_EXIT; +} + static ExitStatus op_ex(DisasContext *s, DisasOps *o) { /* ??? Perhaps a better way to implement EXECUTE is to set a bit in