From patchwork Thu Oct 27 00:42:15 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 687403 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 3t47YR1b2hz9t2G for ; Thu, 27 Oct 2016 11:48:43 +1100 (AEDT) Received: from localhost ([::1]:38240 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bzYs4-0005jn-Fq for incoming@patchwork.ozlabs.org; Wed, 26 Oct 2016 20:48:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57110) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bzYmO-00018A-P1 for qemu-devel@nongnu.org; Wed, 26 Oct 2016 20:42:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bzYmL-0000ky-NH for qemu-devel@nongnu.org; Wed, 26 Oct 2016 20:42:48 -0400 Received: from mout.kundenserver.de ([212.227.126.131]:59230) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1bzYmL-0000kD-Dw for qemu-devel@nongnu.org; Wed, 26 Oct 2016 20:42:45 -0400 Received: from Quad.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue005) with ESMTPSA (Nemesis) id 0MW7OX-1cNSKo1Nft-00XL2v; Thu, 27 Oct 2016 02:42:35 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 27 Oct 2016 02:42:15 +0200 Message-Id: <1477528950-8115-3-git-send-email-laurent@vivier.eu> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1477528950-8115-1-git-send-email-laurent@vivier.eu> References: <1477528950-8115-1-git-send-email-laurent@vivier.eu> X-Provags-ID: V03:K0:e2APIjIZEWoPCt1JPlOK5c3eIFPZ2p+pLvVD5Yhbg4LfIHf5oOi LzPXXCe/vF61B+qNhdruqBo/HwjobS5t27Vadqzc3Y7ydl/+TYWbADSl+ehwqskRIKxcTIc 68Qq/ozFAFOdMLkYID+UTIPPUOA7xVuMm5royvhHPXV6wy7YYg1teZ2GdOTxz8S8qFhcggI 8sY914tZTYJ6qeqOte0wA== X-UI-Out-Filterresults: notjunk:1; V01:K0:v6z4RUkxBK4=:vYXzAn2S1Bh74ueYf1Skzf xEShcnq/So2T4/xBUtDYk8cXQ3LAUHWqBias0jszq2Olrm1t1QEZLDeOUbHfIVy1W9OmnSOyJ /6VcqD91Om10r6SDAViDJQUgac57+hCBFpRO296bS6mUfOIpvvsmO/32aGk81n298KUWa91I5 PfDkYkshKYgVVSZooTVHI3EwZJBXkW9bwy7hmwiDosKygMJh6XQBuQfE3ggcKTTMoJkd2Its9 YkpIeFXMqrnpN9o7vu1AlaMu+Wve/2Iq1j7IbeB9nFoIouo1jWDVTVs5ifhfBJZA9eJZHNTOG y/cTTSOMu4emiHI96UvKEIUqM2RUYpD1/3pGJI+FrmA/lxc1uO4RQ9z4GLWccABkVyhvm7jWy eAJ5NBUPnJTDnC/IxLSfTkXu8TGy2/7Fc/m+M86rCjJqmfIMsZZoEPYj9VagVBP099LBM8M3v rKYqSD/lAXfKim38ZkmPBNVqvOOO4uEGTaCwuG3Sg2INZBoKqtanWAP2sXme5yvO6yPKVmBoa UL5mUo64AgzuUOECGO2WQb4kIClvWICLhQbNMwTXNZY+X5+ZUR0AXhT1R6UdCz2EGX5MfWPEW 9VIFVxjuJA/94xpylIQQNIBF5cty+xLMSRAyBSTmbHKeFSIyTMAo1NuQ218njndjj9RNBQ4Xe hti5gddjagjd6a30zKcqEqKfefJIaz/dour2IG7Pi1x4xEX3uC5unoxGNm/qFT/eqINM= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.126.131 Subject: [Qemu-devel] [PATCH v2 02/17] 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);