From patchwork Sun May 24 23:47:31 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aurelien Jarno X-Patchwork-Id: 476025 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 3B04A140E6D for ; Mon, 25 May 2015 09:48:25 +1000 (AEST) Received: from localhost ([::1]:41193 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ywfd1-0004Pe-DV for incoming@patchwork.ozlabs.org; Sun, 24 May 2015 19:48:23 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58343) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YwfcO-0003Bi-DX for qemu-devel@nongnu.org; Sun, 24 May 2015 19:47:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YwfcN-00083f-7U for qemu-devel@nongnu.org; Sun, 24 May 2015 19:47:44 -0400 Received: from hall.aurel32.net ([2001:bc8:30d7:101::1]:40651) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YwfcN-00083a-2X for qemu-devel@nongnu.org; Sun, 24 May 2015 19:47:43 -0400 Received: from weber.rr44.fr ([2001:470:d4ed:0:7e05:7ff:fe0d:f152]) by hall.aurel32.net with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84) (envelope-from ) id 1YwfcG-0006oJ-UO; Mon, 25 May 2015 01:47:37 +0200 Received: from aurel32 by weber.rr44.fr with local (Exim 4.85) (envelope-from ) id 1YwfcG-0005tc-07; Mon, 25 May 2015 01:47:36 +0200 From: Aurelien Jarno To: qemu-devel@nongnu.org Date: Mon, 25 May 2015 01:47:31 +0200 Message-Id: <1432511251-22515-11-git-send-email-aurelien@aurel32.net> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1432511251-22515-1-git-send-email-aurelien@aurel32.net> References: <1432511251-22515-1-git-send-email-aurelien@aurel32.net> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:bc8:30d7:101::1 Cc: Alexander Graf , Aurelien Jarno , Richard Henderson Subject: [Qemu-devel] [PATCH 10/10] target-s390x: implement LAY and LAEY instructions 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 This complete the general-instructions-extension facility, enable it. Cc: Alexander Graf Cc: Richard Henderson Signed-off-by: Aurelien Jarno --- target-s390x/cpu.h | 2 +- target-s390x/insn-data.def | 3 +++ target-s390x/translate.c | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h index 3110c1f..43a1c70 100644 --- a/target-s390x/cpu.h +++ b/target-s390x/cpu.h @@ -200,7 +200,7 @@ static const uint64_t facilities_dw[] = { (0ULL << 32) | /* b31: Extract-CPU-time facility */ (0ULL << 31) | /* b32: Compare-and-swap-and-store facility */ (0ULL << 30) | /* b33: Compare-and-swap-and-store facility 2 */ - (0ULL << 29) | /* b34: General-instructions-extension facility */ + (1ULL << 29) | /* b34: General-instructions-extension facility */ (1ULL << 28) | /* b35: Execute-extensions facility */ (0ULL << 27) | /* b36: Enhanced-monitor facility */ (0ULL << 26) | /* b37: Floating-point extension facility */ diff --git a/target-s390x/insn-data.def b/target-s390x/insn-data.def index d57ce32..c44838d 100644 --- a/target-s390x/insn-data.def +++ b/target-s390x/insn-data.def @@ -357,6 +357,9 @@ /* LOAD ADDRESS */ C(0x4100, LA, RX_a, Z, 0, a2, 0, r1, mov2, 0) C(0xe371, LAY, RXY_a, LD, 0, a2, 0, r1, mov2, 0) +/* LOAD ADDRESS EXTENDED */ + C(0x5100, LAE, RX_a, Z, 0, a2, 0, r1, mov2e, 0) + C(0xe375, LAEY, RXY_a, GIE, 0, a2, 0, r1, mov2e, 0) /* LOAD ADDRESS RELATIVE LONG */ C(0xc000, LARL, RIL_b, Z, 0, ri2, 0, r1, mov2, 0) /* LOAD AND ADD */ diff --git a/target-s390x/translate.c b/target-s390x/translate.c index 78b8cdc..da7cc42 100644 --- a/target-s390x/translate.c +++ b/target-s390x/translate.c @@ -2566,6 +2566,41 @@ static ExitStatus op_mov2(DisasContext *s, DisasOps *o) return NO_EXIT; } +static ExitStatus op_mov2e(DisasContext *s, DisasOps *o) +{ + int b2 = get_field(s->fields, b2); + TCGv ar1 = tcg_temp_new_i64(); + + o->out = o->in2; + o->g_out = o->g_in2; + TCGV_UNUSED_I64(o->in2); + o->g_in2 = false; + + switch (s->tb->flags & FLAG_MASK_ASC) { + case PSW_ASC_PRIMARY >> 32: + tcg_gen_movi_i64(ar1, 0); + break; + case PSW_ASC_ACCREG >> 32: + tcg_gen_movi_i64(ar1, 1); + break; + case PSW_ASC_SECONDARY >> 32: + if (b2) { + tcg_gen_ld32u_i64(ar1, cpu_env, offsetof(CPUS390XState, aregs[b2])); + } else { + tcg_gen_movi_i64(ar1, 0); + } + break; + case PSW_ASC_HOME >> 32: + tcg_gen_movi_i64(ar1, 2); + break; + } + + tcg_gen_st32_i64(ar1, cpu_env, offsetof(CPUS390XState, aregs[1])); + tcg_temp_free_i64(ar1); + + return NO_EXIT; +} + static ExitStatus op_movx(DisasContext *s, DisasOps *o) { o->out = o->in1;