From patchwork Tue Feb 3 20:42:52 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 436027 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 D929A1401F0 for ; Wed, 4 Feb 2015 07:44:28 +1100 (AEDT) Received: from localhost ([::1]:33132 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIkKg-00027M-QR for incoming@patchwork.ozlabs.org; Tue, 03 Feb 2015 15:44:26 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33133) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIkJZ-0000EB-8j for qemu-devel@nongnu.org; Tue, 03 Feb 2015 15:43:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YIkJT-0004ys-8e for qemu-devel@nongnu.org; Tue, 03 Feb 2015 15:43:17 -0500 Received: from mail-qg0-x22f.google.com ([2607:f8b0:400d:c04::22f]:65485) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIkJT-0004yj-4H for qemu-devel@nongnu.org; Tue, 03 Feb 2015 15:43:11 -0500 Received: by mail-qg0-f47.google.com with SMTP id l89so2673910qgf.6 for ; Tue, 03 Feb 2015 12:43:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=lv9RTk1D92YzWHDPtpjGv1Di3VjsV48gUFJiR5xJlu0=; b=r7uyngrWW3DL6Z+5K3OXpUayAYXzRKeAjT59xDDvByocyVXp37n8DzPkj+hFyxd0XW X3gR26RCEFbuooFsaIQGYKZtTn/b3t8DPzNhGae5mo9VINLIvSyHKMovqsYU0YGaW5Nl SIXGU2cit5gd8hNvDg0vCbFcZ9VLqn1Q7YCaJwEdiariwChqLTN/zTOKUlgNe1IEyXJJ JvIrxiXvNFCS41HchjGg2wa085HXMWuQpsoUMMlahFqhO+VrWpeqTSIXsWMjsyhc/8w0 r1stjE8uh57cYiaBaCVDKWZv21E8sc2DtjpnS5OXBUfLwGArs7tgSEin0HgWAL1oycjc Wgxg== X-Received: by 10.224.135.200 with SMTP id o8mr2008009qat.1.1422996190740; Tue, 03 Feb 2015 12:43:10 -0800 (PST) Received: from pike.twiddle.home.com (50-205-143-34-static.hfc.comcastbusiness.net. [50.205.143.34]) by mx.google.com with ESMTPSA id a6sm22229337qgf.13.2015.02.03.12.43.09 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 03 Feb 2015 12:43:10 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 3 Feb 2015 12:42:52 -0800 Message-Id: <1422996181-22383-2-git-send-email-rth@twiddle.net> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1422996181-22383-1-git-send-email-rth@twiddle.net> References: <1422996181-22383-1-git-send-email-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400d:c04::22f Cc: kbastian@mail.uni-paderborn.de, peter.maydell@linaro.org Subject: [Qemu-devel] [PULL 01/10] target-s390: Implement SAM specification exception 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 Also, these are user-mode instructions; allow their use in CONFIG_USER_ONLY. Signed-off-by: Richard Henderson --- target-s390x/insn-data.def | 8 ++++---- target-s390x/translate.c | 31 +++++++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/target-s390x/insn-data.def b/target-s390x/insn-data.def index 4d2feb6..42b99b2 100644 --- a/target-s390x/insn-data.def +++ b/target-s390x/insn-data.def @@ -566,6 +566,10 @@ /* SET ACCESS */ C(0xb24e, SAR, RRE, Z, 0, r2_o, 0, 0, sar, 0) +/* SET ADDRESSING MODE */ + D(0x010c, SAM24, E, Z, 0, 0, 0, 0, sam, 0, 0) + D(0x010d, SAM31, E, Z, 0, 0, 0, 0, sam, 0, 1) + D(0x010e, SAM64, E, Z, 0, 0, 0, 0, sam, 0, 3) /* SET FPC */ C(0xb384, SFPC, RRE, Z, 0, r1_o, 0, 0, sfpc, 0) /* SET FPC AND SIGNAL */ @@ -743,10 +747,6 @@ C(0xb22a, RRBE, RRE, Z, 0, r2_o, 0, 0, rrbe, 0) /* SERVICE CALL LOGICAL PROCESSOR (PV hypercall) */ C(0xb220, SERVC, RRE, Z, r1_o, r2_o, 0, 0, servc, 0) -/* SET ADDRESSING MODE */ - D(0x010c, SAM24, E, Z, 0, 0, 0, 0, sam, 0, 0) - D(0x010d, SAM31, E, Z, 0, 0, 0, 0, sam, 0, 1) - D(0x010e, SAM64, E, Z, 0, 0, 0, 0, sam, 0, 3) /* SET ADDRESS SPACE CONTROL FAST */ C(0xb279, SACF, S, Z, 0, a2, 0, 0, sacf, 0) /* SET CLOCK */ diff --git a/target-s390x/translate.c b/target-s390x/translate.c index ab01bc0..1338bb5 100644 --- a/target-s390x/translate.c +++ b/target-s390x/translate.c @@ -2925,19 +2925,42 @@ static ExitStatus op_sacf(DisasContext *s, DisasOps *o) /* Addressing mode has changed, so end the block. */ return EXIT_PC_STALE; } +#endif static ExitStatus op_sam(DisasContext *s, DisasOps *o) { int sam = s->insn->data; - TCGv_i64 tsam = tcg_const_i64(sam); + TCGv_i64 tsam; + uint64_t mask; - /* Overwrite PSW_MASK_64 and PSW_MASK_32 */ - tcg_gen_deposit_i64(psw_mask, psw_mask, tsam, 31, 2); + switch (sam) { + case 0: + mask = 0xffffff; + break; + case 1: + mask = 0x7fffffff; + break; + default: + mask = -1; + break; + } + + /* Bizzare but true, we check the address of the current insn for the + specification exception, not the next to be executed. Thus the PoO + documents that Bad Things Happen two bytes before the end. */ + if (s->pc & ~mask) { + gen_program_exception(s, PGM_SPECIFICATION); + return EXIT_NORETURN; + } + s->next_pc &= mask; + tsam = tcg_const_i64(sam); + tcg_gen_deposit_i64(psw_mask, psw_mask, tsam, 31, 2); tcg_temp_free_i64(tsam); + + /* Always exit the TB, since we (may have) changed execution mode. */ return EXIT_PC_STALE; } -#endif static ExitStatus op_sar(DisasContext *s, DisasOps *o) {