From patchwork Wed Oct 26 16:35:52 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 687249 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 3t3xHk6SRMz9t14 for ; Thu, 27 Oct 2016 04:06:10 +1100 (AEDT) Received: from localhost ([::1]:36161 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bzReS-0002T9-Hv for incoming@patchwork.ozlabs.org; Wed, 26 Oct 2016 13:06:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42751) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bzRBh-0002TK-N6 for qemu-devel@nongnu.org; Wed, 26 Oct 2016 12:36:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bzRBe-00055L-5U for qemu-devel@nongnu.org; Wed, 26 Oct 2016 12:36:25 -0400 Received: from mout.kundenserver.de ([212.227.126.135]:49676) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1bzRBd-00054k-T3 for qemu-devel@nongnu.org; Wed, 26 Oct 2016 12:36:22 -0400 Received: from Quad.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003) with ESMTPSA (Nemesis) id 0MVHuk-1cPE9a1Ofu-00Yfs5; Wed, 26 Oct 2016 18:36:12 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Wed, 26 Oct 2016 18:35:52 +0200 Message-Id: <1477499766-11722-3-git-send-email-laurent@vivier.eu> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1477499766-11722-1-git-send-email-laurent@vivier.eu> References: <1477499766-11722-1-git-send-email-laurent@vivier.eu> X-Provags-ID: V03:K0:fMBlfDmQb4F633znFfSGuFx+zDAMKIx8bYDH6jMS5K96PgqaCY8 ga1IFOSUlGZtX2e74icJNDwaz1ZjE6zuFlFrGSPAcQDmXZMD5lvL8IqxlWWSbCivfc37MAp rJ4rXKfLmgL47QV3WAGc8W8t9ljzM81zOBokgDmh/GbnRepAc8849miCb9HGDhT8IUQi/GQ tYXoR1FYMl/vxhcjv0eOw== X-UI-Out-Filterresults: notjunk:1; V01:K0:8wh8KJrHRao=:67Llr+krNWPpJEep53IgM5 UZg1Tv8FLlN9IZANmNtcOFjtg3qnFkL4cDxacNBO6w3jjKMxj0eoZyXJpKEM/eCYO5zlvKFXt g4NXk2hQ+qutkxmTcnfo/1M2Rjb2bMagPOzFm91RFz9p0/I6IifNQpEoHDYqVTqYZhwHk2kKm b19SWp0UsZPRJtgvQDwwRfmX+4NxMZ4xWWzGh/016avqNvxg8VNPJxKom73w3MTAWvBORehRi 77EqiAspyK6rvumlvij6DtIkv9zu+Ya65Drg3uncnsYjmCCDxZiuLiTbsAJGxs5M7gLmRDAaS Xp4pQlgf1qjG89jQwX8B9xTu0f+EmMRLT1iqNVIHlwNjyzsRcjCWEcU6JIRX4B8gQKnQs1eH+ FBT0czcO7GH/AMa/bqSPB5lsYX4TjAlLyaZOJMXxSJ+tP0GMD3eFCYmL53PuiOXVODsCZG+bV Owk9JFvApSJ7oUGJcMz2JHdLc/1O7EF+r5Tzxgfq7yEZ6zG60YErrlLT8z+ytlF3e0ERugyMD /7v/Ffc9QbaJoQscbBEIQHhbPFERhKKAdgF4Z5IEWPb80QqCK9b/fl0XapPYZ9MJiewdYYg8w 1Lzefl09st0oiUoe6NptpoHzBv98uyO7Obnn9rMWk2m1D042RdBwyehEgL5/nV2vH87VUvSko wPSEIMAOCSGq26QLbHmbS+B2JstiH0oDa91tElhe5ko/K6g1jlNSOvpRIm9XLkDOUQ7w= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.126.135 Subject: [Qemu-devel] [PATCH 02/16] target-m68k: add linkl 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: Laurent Vivier , gerg@uclinux.org, schwab@linux-m68k.org, agraf@suse.de, Richard Henderson Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson --- target-m68k/translate.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/target-m68k/translate.c b/target-m68k/translate.c index a128b67..0d3111d 100644 --- a/target-m68k/translate.c +++ b/target-m68k/translate.c @@ -1733,21 +1733,36 @@ DISAS_INSN(mull) gen_logic_cc(s, dest, OS_LONG); } -DISAS_INSN(link) +static void gen_link(DisasContext *s, uint16_t insn, int32_t offset) { - int16_t offset; TCGv reg; TCGv tmp; - offset = cpu_ldsw_code(env, s->pc); - s->pc += 2; reg = AREG(insn, 0); tmp = tcg_temp_new(); tcg_gen_subi_i32(tmp, QREG_SP, 4); gen_store(s, OS_LONG, tmp, reg); - if ((insn & 7) != 7) + if ((insn & 7) != 7) { tcg_gen_mov_i32(reg, tmp); + } tcg_gen_addi_i32(QREG_SP, tmp, offset); + tcg_temp_free(tmp); +} + +DISAS_INSN(link) +{ + int16_t offset; + + offset = read_im16(env, s); + gen_link(s, insn, offset); +} + +DISAS_INSN(linkl) +{ + int32_t offset; + + offset = read_im32(env, s); + gen_link(s, insn, offset); } DISAS_INSN(unlk) @@ -3059,6 +3074,7 @@ void register_m68k_insns (CPUM68KState *env) INSN(not, 4600, ff00, M68000); INSN(undef, 46c0, ffc0, M68000); INSN(move_to_sr, 46c0, ffc0, CF_ISA_A); + INSN(linkl, 4808, fff8, M68000); BASE(pea, 4840, ffc0); BASE(swap, 4840, fff8); INSN(bkpt, 4848, fff8, BKPT);