From patchwork Thu Jan 4 16:42:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855708 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDGc5PJgz9t32 for ; Fri, 5 Jan 2018 03:46:47 +1100 (AEDT) Received: from localhost ([::1]:49956 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8fE-0002j3-4h for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:46:44 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55291) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8ba-0007Xt-EA for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bX-0003Ua-4U for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:58 -0500 Received: from mout.kundenserver.de ([212.227.126.130]:54921) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8bW-0003Sy-P6 for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:55 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0Lv6gg-1ex5ih1RAI-010OLF; Thu, 04 Jan 2018 17:42:53 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:35 +0100 Message-Id: <20180104164251.26494-2-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:f+CAuWudvwr/qeLknfDOBSRZW0Y3rlodXmYI7NYhLnXDW3NCwLn vi8D+opdLcrhv4bEklmf11L+sB3mGCrwUD0YeKJ6xpoOhggyPkHJwUSKKABXvu6pHE9sYji WJzPRbbvgZx0RRSC89SNF0KAOmmb0cVmCFsA0rVChJa+cb5GRxsY/bijCg0VrZFMYlG8JI5 rqt4CG2kgbiFBkHz2nbrA== X-UI-Out-Filterresults: notjunk:1; V01:K0:tRpSw6QsGwY=:WngvitCtovn3vArh98jFOH 8RC6hyQPxqS3/YUEVFA/6rXPAstjBiUvmCdc3ZG2yqRzf+s6HoHvPa2gGBZgkjHBhD76UW7r5 rJEPqqxovp1FewPghXtJJoae5RBQ9rWGnUYi1GPJQPbhZph+YwjQimtJFVa9+/51XasxrY0wY lwjmOHlGdBG71P15YWrFQy56AfdvsKXb3hGYSWyJ8YNDxMLq783b2g2ZjlPQk5+G3hHm6Dcon kJCWKtM54X/lEq3W4XOwwjIC4uahO4rBi5eCxT5Uggneq2FV1xmB7vw4zaIJ0jdig4F0RRBOv CfXw3x6StzVpfmtpmeqhczxO3jXjJuiYeWY1hqlJE5Q+r0Pp+ZP4CviYQzQIwuXnP626Msv5e hChZso/PZPqXuktK+3x4PjbC4arB9GnPUPebTd0YVzAYDLNEi5mPCj3R+vAXzSegnekiK7cD/ Gwe1/h0Bnm/ORRLtrxpwxVX81MAR2qeBdE7T+KyukbIUqL6HPUrxq2x9kUVj3u1u3jmPYsApJ X/vHDpf0XiEnfGH/AzIkrtwk28Klf/Dndzep13wrJumKDFoGHGrKvBZV0yoTkdWNFxiHBJyst rl+nm3BrHXLHe+m2XzBzXqqQ9z6a94o77CMYcaFfWDdnAG/oV6pocrmLHWeONZWc2Hb8b8V3w Ze2aEVd77n3YUbDu5xVqqSm49YPk0l6afz+JQBmGildvZk6hwJdKMSSPLZuRKI9U7nF5THPha 08hHBGKqHefSblWh2+Gext+lr/qkszVcnrEfAK64aSMuhm8b/Gy607EBBiU= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.130 Subject: [Qemu-devel] [PULL 01/17] target-m68k: sync CC_OP before gen_jmp_tb() 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" And remove update_cc_op() from gen_exception() because there is one in gen_jmp_im(). Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-2-laurent@vivier.eu> --- target/m68k/translate.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index bbda7399ec..0e9d651a2a 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -270,7 +270,6 @@ static void gen_raise_exception(int nr) static void gen_exception(DisasContext *s, uint32_t where, int nr) { - update_cc_op(s); gen_jmp_im(s, where); gen_raise_exception(nr); } @@ -2897,6 +2896,7 @@ DISAS_INSN(branch) gen_jmp_tb(s, 0, s->pc); } else { /* Unconditional branch. */ + update_cc_op(s); gen_jmp_tb(s, 0, base + offset); } } @@ -4875,6 +4875,7 @@ static void gen_fjmpcc(DisasContext *s, int cond, TCGLabel *l1) DisasCompare c; gen_fcc_cond(&c, s, cond); + update_cc_op(s); tcg_gen_brcond_i32(c.tcond, c.v1, c.v2, l1); free_cond(&c); } From patchwork Thu Jan 4 16:42:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855713 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDHN1L9zz9t32 for ; Fri, 5 Jan 2018 03:47:28 +1100 (AEDT) Received: from localhost ([::1]:49994 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8fu-0003ZX-6n for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:47:26 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55306) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8bb-0007YZ-42 for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bX-0003Vi-UA for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:59 -0500 Received: from mout.kundenserver.de ([212.227.126.134]:56586) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8bX-0003Th-I7 for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:55 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MEaNR-1eiQ5M30kj-00Fjw6; Thu, 04 Jan 2018 17:42:53 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:36 +0100 Message-Id: <20180104164251.26494-3-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:/GQnJVt0ysdtoq66wHGZtCxQ89QLNQFfwGrGkGsj66KYZXGCkhU vzw6CTo5MvIYj69OwAuL6k+X3mToRyrYUt/znBik6E2tv/Iov5NKHH/xiRv065/PpXmR6+8 bEi5O3b7sDH60mFq9EOnwuBKIY+exge5lEwWgCo2Opso6DcRa6alfL2QjhuUogWEEc5V3p4 4KVNIhXgwE84aHwdOjlJw== X-UI-Out-Filterresults: notjunk:1; V01:K0:xrsMzOQIA8w=:Kpv3fUFJsx45TVff5V7gct eeacapgIEmCzVJLDYWQ+MWBOWQKpjDSoyu9guSRldH4yGGJJXCehoVcOq6i0IvzaC29svsLqE ggEZlk0qA0Sr7rGxRqO6YQUMTfXcVpd45qqee5csjAZAzYbYfvIAGrO8Ic4XFFD2hqdWHU2e0 YUA2MK5z7yIKCwOfy2J90kfCThLTujqiUpvzE0+23cpHTQt+vEpAyq2QtEhx2DmSGwV0h0ZVb 4tghx05RaXsDK9S6kDKOKdt5lVYhGfDqr4UbXUUtmvhHmHHxaDODt/Ad98+YcvYSI5BiQVrFd VAE2GxwWHNB/Ge2AZOqyzwJA2PNlPiqXmTLBUJBEBs8/1JhBjVFfNAqcbukn85UP5nBocGjdP UWN9M7BJEl1DYfTIuixhIcUECR6yIDKmZQV1llgm3aLavpJi1HpWwIhno6RRWenKfM+EFP9e+ MV/dHbx95/U71b+4kbIupyFhZ9X2u96IPeYok7ktc7S/+ew83JcOyzHiTa+e1+l1ZKoxPDoDx lPhKDVfugrXbWaUa4et/8EUGuN2eM1QcmErhjNA1rI+evjrhbvv2eKOcBhRKeR2GqeRijqGwH 9tGxe7ruMjnTsbbWONnu10FRXVhgYdyhOZKRw2vTIeatAs77rwQ9n33mfBN1DnFQvY/QzbqZb Fxz+juTzhO5vI83jJwCAGNZVGKCIHhij4euKy3fNZAaaFkI1S1KHWSiaGyttGs7XoQURYapUU poR0ZnbzisQnY5PL017I/knggzCv6xi0Sv8XktbrQvviRJH0ChY7VStpzRs= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.134 Subject: [Qemu-devel] [PULL 02/17] target/m68k: fix gen_get_ccr() 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" As gen_helper_get_ccr() is able to compute CCR from cc_op and flags, we don't need to flush flags before to call it. flush_flags() and get_ccr() use COMPUTE_CCR() to compute flags. get_ccr() computes CCR value, whereas flush_flags update live cc_op and flags. Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-3-laurent@vivier.eu> --- target/m68k/translate.c | 1 - 1 file changed, 1 deletion(-) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 0e9d651a2a..1e9fb01252 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -2478,7 +2478,6 @@ static TCGv gen_get_ccr(DisasContext *s) { TCGv dest; - gen_flush_flags(s); update_cc_op(s); dest = tcg_temp_new(); gen_helper_get_ccr(dest, cpu_env); From patchwork Thu Jan 4 16:42:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855716 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDKw1Y6cz9sQm for ; Fri, 5 Jan 2018 03:49:40 +1100 (AEDT) Received: from localhost ([::1]:50001 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8i2-0005Xp-96 for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:49:38 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55288) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8ba-0007Xp-BB for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bX-0003Vl-T2 for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:58 -0500 Received: from mout.kundenserver.de ([212.227.126.133]:63278) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8bX-0003U0-I4 for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:55 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0Louat-1f8NAT0PDH-00gn1w; Thu, 04 Jan 2018 17:42:54 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:37 +0100 Message-Id: <20180104164251.26494-4-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:oaTPpn58dZfmpTBjX3rOE/4wR7GZmCov1ZzXaGnNuNGdVVPhCZr NWYmg5w3NnSxoebLn+flKU0Ealg8ikth4VkvtCU5/S6irNl+vvwQfGu0Pgv8vVpUaJcYlnV LQFaj59vxZycwjSkm4kLXIObGnnfxk4O4nBys/61J3epQbeVY7l0+2q0oE5YzGvLrxr6WsY +pp5LpU+94KggwhZVYZVw== X-UI-Out-Filterresults: notjunk:1; V01:K0:HD5irGltZ4Q=:hMpT4uxtOFdWFXaQKF8CKG w4P3p5FfyfI4Fp4e23O6XsfkniLwaG5KJ5K1L7KjshvQ4kPLDvbiN4t+1yV/4ENeI3xxwMdTY Upi3lGcL/sUMQukdmI2m/DJWqAZvESkzM7c3/rg+OnyrIokfOeXDqthcf1SiQAE6eCJjacjrX pVUYqpU5bfgiyEjlU5WSk9FFRGv5ELxQaBTW9SY0a2nR5fSJ7uZlW2/AFlDldxovpqPlNPPny iMilPsl4A/atp8VXizIjodeEFSBw3N5NGtcWE/iTNThaSlBoBO6+zAAs11X7PxIDYlvbawvlz FLIrTGu3boPPvT8RXkOdT4qQN2y6+pDl2kCgvnW7i4WM6UYEPR6wE6V4yvdo4scOWNLK++px1 35O6P+07f9QyiqufnXvnVPNsL2SIKi1gEZN3TlvPzTkgk+V1Xu4y4vDgn5U5LO+ssX7Kjsxwa e507NHX+VBbg5sXFSew/GFzQ7emZM0Lfoege7LgGocWUyMS8DlHSvev2K1oM0BrFVxVK06U35 0eBUX5gvaYeShpSt42ONiHO/zOqHuGjTd684BZ7R+v2430eCsPTEaPwVxfjV7HMs12E1LpibV ACdck3O9UDkCvyI2Twjx1fZzbbqDd+h0TX7fQ6k+VhgsKKeQG3VAlowEr9nAZxGKpL6ajaS8g einqyhKZ24t+YZAyZwG/hZsDOZp+hJVeTSpqaQU+ka57c96k2QLx9NS93EGg57b5GRP90ip+B BxAkAFVQJmYChx+Vmz+5VapuxXCy3SNUfgEHdc4/Xc4CwJfFvWve3xB7Ec4= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.133 Subject: [Qemu-devel] [PULL 03/17] linux-user, m68k: correctly manage SR in context 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Use cpu_m68k_get_ccr()/cpu_m68k_set_ccr() to setup and restore correctly the value of SR in the context structure. Fix target_rt_setup_ucontext(). Fixes: 3219de458c ("linux-user: correctly manage SR in ucontext") Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-4-laurent@vivier.eu> --- linux-user/signal.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/linux-user/signal.c b/linux-user/signal.c index dae14d4a89..74fa03f96d 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -5612,13 +5612,14 @@ struct target_rt_sigframe static void setup_sigcontext(struct target_sigcontext *sc, CPUM68KState *env, abi_ulong mask) { + uint32_t sr = (env->sr & 0xff00) | cpu_m68k_get_ccr(env); __put_user(mask, &sc->sc_mask); __put_user(env->aregs[7], &sc->sc_usp); __put_user(env->dregs[0], &sc->sc_d0); __put_user(env->dregs[1], &sc->sc_d1); __put_user(env->aregs[0], &sc->sc_a0); __put_user(env->aregs[1], &sc->sc_a1); - __put_user(env->sr, &sc->sc_sr); + __put_user(sr, &sc->sc_sr); __put_user(env->pc, &sc->sc_pc); } @@ -5634,7 +5635,7 @@ restore_sigcontext(CPUM68KState *env, struct target_sigcontext *sc) __get_user(env->aregs[1], &sc->sc_a1); __get_user(env->pc, &sc->sc_pc); __get_user(temp, &sc->sc_sr); - env->sr = (env->sr & 0xff00) | (temp & 0xff); + cpu_m68k_set_ccr(env, temp); } /* @@ -5726,7 +5727,7 @@ static inline int target_rt_setup_ucontext(struct target_ucontext *uc, CPUM68KState *env) { target_greg_t *gregs = uc->tuc_mcontext.gregs; - uint32_t sr = cpu_m68k_get_ccr(env); + uint32_t sr = (env->sr & 0xff00) | cpu_m68k_get_ccr(env); __put_user(TARGET_MCONTEXT_VERSION, &uc->tuc_mcontext.version); __put_user(env->dregs[0], &gregs[0]); From patchwork Thu Jan 4 16:42:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855718 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDMF5rLBz9t34 for ; Fri, 5 Jan 2018 03:50:49 +1100 (AEDT) Received: from localhost ([::1]:50014 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8j9-0006XV-SG for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:50:47 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55323) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8bb-0007Yu-H1 for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bY-0003Wb-D0 for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:59 -0500 Received: from mout.kundenserver.de ([212.227.126.134]:50937) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8bX-0003UX-Tz for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:56 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0McAjL-1eE6Jd1w1f-00JakK; Thu, 04 Jan 2018 17:42:54 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:38 +0100 Message-Id: <20180104164251.26494-5-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:Er4OhhOkbGJBxI37RYR0LFtBrv0+prQBxDVpX50KaJV47EdpEFe lUvUcvOcswF9DOwEHhxbMPWcp53MsnKmIljvfPn8CpKrBbDUNFzjTlBtAUrriSFCDhC865s c4ol88CK2MTsf/r9rY8LnEG55+Pl0ijDc2J2z2YI7abQ3mmMQ7OGVGcosZsEDzRItM6dPbF azD57W9k/5cVmXLYl+IoA== X-UI-Out-Filterresults: notjunk:1; V01:K0:kMrWIutodUg=:bOHpFLE44tskBX8Eo+l2ba WtPHTsaJCAGOHlJ8Tbu12PWzSIQ3wStsYLNKPYn/cx9Eg0iH5cUNm683xj8ft5lZr6OcUMFOw OMnmKhnZ0OI9I9tsY+4eVyUJ5XxRrWUbQNMsW5uzHnAWMAZzg6Dk8B0hs6TxpI4FM3Ngo+DsF VfO54AvqkRuiaqNpl3vHdHEzQ85v1MTYXxGPMBkooCWFbmKxfVQdS9vs0HbjcHnnhMMv3jzrZ xbofOygeHMJL+8lvpvkjinBmV7HaYxA8a8KqBYsZsjpLjCt8h25ZAbALLsAVqbkZX7E4ci8g+ Rr59dBGgkSTrbipqOWl1/LhLpNh8HTq5sOKdnfY+Zwo1hqHoWdyWVDsSmg3VHA11O7FY0Ll/N vSMeX/yzSjtBkTiGm8GmXBZF0H29+cIVEpS1vcFvpv/JMKg0pRwdfIPR5kBuaSOfg6fBElRwK 41u4+Hus/KRT/n8T67udkyNZPvHnar5Cxs1djLbzDUBS5SRsnSSUULIzLEAcJO8In9ePMpydI ixmVpxPB66HSmi5TGxB68UMONcZgM0xWudvp9B9hviZYa+irMl9w93bPmwrK/p8nr9GeRMI1z gLzjUkAgX1Jhfva8gHbWW9xXEovFOM48cIhc1gBG7FjZKp+mxEPzYqwC1srEaKvn71qjVucCo q/r80cvIou6gw13HkvCyAkhnxQX0+Rmvel5hHv/pqsw7zxCn07FAErFBNKfNVz4rGTmJ1siYg qdb7miOaPWzmxnV7HbPP5maKb1Abt2kzWSIjp5MdGx9+Qu9ajGC/FTMkqOs= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.134 Subject: [Qemu-devel] [PULL 04/17] target/m68k: use insn_pc to generate instruction fault address 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-5-laurent@vivier.eu> --- target/m68k/translate.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 1e9fb01252..a1e424e3db 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -1509,12 +1509,12 @@ DISAS_INSN(dbcc) DISAS_INSN(undef_mac) { - gen_exception(s, s->pc - 2, EXCP_LINEA); + gen_exception(s, s->insn_pc, EXCP_LINEA); } DISAS_INSN(undef_fpu) { - gen_exception(s, s->pc - 2, EXCP_LINEF); + gen_exception(s, s->insn_pc, EXCP_LINEF); } DISAS_INSN(undef) @@ -1523,8 +1523,8 @@ DISAS_INSN(undef) for the 680x0 series, as well as those that are implemented but actually illegal for CPU32 or pre-68020. */ qemu_log_mask(LOG_UNIMP, "Illegal instruction: %04x @ %08x", - insn, s->pc - 2); - gen_exception(s, s->pc - 2, EXCP_UNSUPPORTED); + insn, s->insn_pc); + gen_exception(s, s->insn_pc, EXCP_UNSUPPORTED); } DISAS_INSN(mulw) @@ -2583,7 +2583,7 @@ DISAS_INSN(swap) DISAS_INSN(bkpt) { - gen_exception(s, s->pc - 2, EXCP_DEBUG); + gen_exception(s, s->insn_pc, EXCP_DEBUG); } DISAS_INSN(pea) @@ -2636,7 +2636,7 @@ DISAS_INSN(pulse) DISAS_INSN(illegal) { - gen_exception(s, s->pc - 2, EXCP_ILLEGAL); + gen_exception(s, s->insn_pc, EXCP_ILLEGAL); } /* ??? This should be atomic. */ @@ -2666,7 +2666,7 @@ DISAS_INSN(mull) if (ext & 0x400) { if (!m68k_feature(s->env, M68K_FEATURE_QUAD_MULDIV)) { - gen_exception(s, s->pc - 4, EXCP_UNSUPPORTED); + gen_exception(s, s->insn_pc, EXCP_UNSUPPORTED); return; } @@ -4240,7 +4240,7 @@ DISAS_INSN(move_from_sr) TCGv sr; if (IS_USER(s) && !m68k_feature(env, M68K_FEATURE_M68000)) { - gen_exception(s, s->pc - 2, EXCP_PRIVILEGE); + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } sr = gen_get_sr(s); @@ -4250,7 +4250,7 @@ DISAS_INSN(move_from_sr) DISAS_INSN(move_to_sr) { if (IS_USER(s)) { - gen_exception(s, s->pc - 2, EXCP_PRIVILEGE); + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } gen_set_sr(env, s, insn, 0); @@ -4260,7 +4260,7 @@ DISAS_INSN(move_to_sr) DISAS_INSN(move_from_usp) { if (IS_USER(s)) { - gen_exception(s, s->pc - 2, EXCP_PRIVILEGE); + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } tcg_gen_ld_i32(AREG(insn, 0), cpu_env, @@ -4270,7 +4270,7 @@ DISAS_INSN(move_from_usp) DISAS_INSN(move_to_usp) { if (IS_USER(s)) { - gen_exception(s, s->pc - 2, EXCP_PRIVILEGE); + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } tcg_gen_st_i32(AREG(insn, 0), cpu_env, @@ -4287,7 +4287,7 @@ DISAS_INSN(stop) uint16_t ext; if (IS_USER(s)) { - gen_exception(s, s->pc - 2, EXCP_PRIVILEGE); + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } @@ -4301,10 +4301,10 @@ DISAS_INSN(stop) DISAS_INSN(rte) { if (IS_USER(s)) { - gen_exception(s, s->pc - 2, EXCP_PRIVILEGE); + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } - gen_exception(s, s->pc - 2, EXCP_RTE); + gen_exception(s, s->insn_pc, EXCP_RTE); } DISAS_INSN(movec) @@ -4313,7 +4313,7 @@ DISAS_INSN(movec) TCGv reg; if (IS_USER(s)) { - gen_exception(s, s->pc - 2, EXCP_PRIVILEGE); + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } @@ -4331,7 +4331,7 @@ DISAS_INSN(movec) DISAS_INSN(intouch) { if (IS_USER(s)) { - gen_exception(s, s->pc - 2, EXCP_PRIVILEGE); + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } /* ICache fetch. Implement as no-op. */ @@ -4340,7 +4340,7 @@ DISAS_INSN(intouch) DISAS_INSN(cpushl) { if (IS_USER(s)) { - gen_exception(s, s->pc - 2, EXCP_PRIVILEGE); + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } /* Cache push/invalidate. Implement as no-op. */ @@ -4348,7 +4348,7 @@ DISAS_INSN(cpushl) DISAS_INSN(wddata) { - gen_exception(s, s->pc - 2, EXCP_PRIVILEGE); + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); } DISAS_INSN(wdebug) @@ -4356,7 +4356,7 @@ DISAS_INSN(wdebug) M68kCPU *cpu = m68k_env_get_cpu(env); if (IS_USER(s)) { - gen_exception(s, s->pc - 2, EXCP_PRIVILEGE); + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } /* TODO: Implement wdebug. */ @@ -4365,7 +4365,7 @@ DISAS_INSN(wdebug) DISAS_INSN(trap) { - gen_exception(s, s->pc - 2, EXCP_TRAP0 + (insn & 0xf)); + gen_exception(s, s->insn_pc, EXCP_TRAP0 + (insn & 0xf)); } static void gen_load_fcr(DisasContext *s, TCGv res, int reg) From patchwork Thu Jan 4 16:42:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855721 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDQf1nDjz9s7G for ; Fri, 5 Jan 2018 03:53:46 +1100 (AEDT) Received: from localhost ([::1]:50228 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8m0-0001Uk-Be for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:53:44 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55389) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8bd-0007b4-HI for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:04 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bZ-0003Xx-14 for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:01 -0500 Received: from mout.kundenserver.de ([212.227.126.135]:56239) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8bY-0003VN-Kh for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:56 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MRQIm-1eM60U3czY-00SiUB; Thu, 04 Jan 2018 17:42:55 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:39 +0100 Message-Id: <20180104164251.26494-6-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> MIME-Version: 1.0 X-Provags-ID: V03:K0:tNxFCEK4ybYeGUCFiinQyhxFd0PV8bEOXaDPpqmU5zNx7cWgvLL sL0gPS72ugrbLGUvFLBkPDlxQpGhg1q1ATY1muObM1ZxvPxSPpnP4ceVEj52h1JxrZG3EBL SoNxt6NYvri44kOGvblXzGZxdxf19JpIJwXZuOQT3JBA56W7yLPPTi0tduBBk49aaCQkkyZ 9vNvHtaN1QKSupozjIcnw== X-UI-Out-Filterresults: notjunk:1; V01:K0:W24QnMzMi4s=:c1tmVGvBeLJDdq8fILccSa FaKNZh2lKv6Z/BQi+g9muqokMOjdEjysJh8QX0TnWdczq/2Tuuc2EDLeWsOQregyLyuzeTiEp AwyE9R0fi6/7wHTrMv1AQURu3Zb1CmbFq22WMXghbT7X1wMvQ94Vsd4jz1Xr8aOZJ5G3qKawK CXLG6nZkIzxoT42n36H6f71upOjHK4tbyXtFflgFRWdY5+7m8B+skAjUXM4/DB7IUq5cU8I0E J74DuQY3QsYgB9OREUnb01x+vttNd0TcNtKMoUyyexexewApMqzSCv+sQ8PzRaY/csByWmyYu 7LnjsOLoTdyHvoFB1bVxtQfO1GHdxJuDB4oeLIAmVdyIZlzVU3O9PurpQZxQtdpR5eoVD/gGS ZP2tkXynd7qpQrTOu4ZqL8rv3u8cL+tRXBGT7bM30Q+lJErR0wnEK4gjYHTR/GT5MHltRXosL pz/niTg3gPzVZH9gDWvq3s+wSJ7eJEQj1pTjvWEYmaZkq45OhTJHCvVLY7qhJnMRj+/Tm1wIq 8OQyL8/LeOGbca8Hc01IvuX5Vhxqvzc3c+aURf4GeAXOSLlwI4mHViPOWMNIITJlpLjb0HdSe VdN5dDfzXZGYq4NzCzO8PZAsk2CX3nvPTue5rlPMh37fBeaov0bOVDr3GpShTWPRAO4iOtk5J BxLfjR4+I00mJVC0S4G2vn/0mqHuoZlD0osQC9EBfoQ0Y5zUQD9OUH/snLttutnNgJBX8nulh UdEAtXH+I7GoyAxSRSP2Jkxh1BUObOGIc68mzf7cvrj8wTtKM45cy8zXpP1+rra5tz4iTw5KM hczRDLD X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.135 Subject: [Qemu-devel] [PULL 05/17] target/m68k: add CPU_LOG_INT trace 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Display the interrupts/exceptions information in QEMU logs (-d int) Signed-off-by: Laurent Vivier Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-6-laurent@vivier.eu> --- target/m68k/cpu.h | 8 ++++ target/m68k/op_helper.c | 117 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 123 insertions(+), 2 deletions(-) diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h index 5d03764eab..acc2629216 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -45,6 +45,8 @@ #define EXCP_ADDRESS 3 /* Address error. */ #define EXCP_ILLEGAL 4 /* Illegal instruction. */ #define EXCP_DIV0 5 /* Divide by zero */ +#define EXCP_CHK 6 /* CHK, CHK2 Instructions */ +#define EXCP_TRAPCC 7 /* FTRAPcc, TRAPcc, TRAPV Instructions */ #define EXCP_PRIVILEGE 8 /* Privilege violation. */ #define EXCP_TRACE 9 #define EXCP_LINEA 10 /* Unimplemented line-A (MAC) opcode. */ @@ -53,6 +55,9 @@ #define EXCP_DEBEGBP 13 /* Breakpoint debug interrupt. */ #define EXCP_FORMAT 14 /* RTE format error. */ #define EXCP_UNINITIALIZED 15 +#define EXCP_SPURIOUS 24 /* Spurious interrupt */ +#define EXCP_INT_LEVEL_1 25 /* Level 1 Interrupt autovector */ +#define EXCP_INT_LEVEL_7 31 /* Level 7 Interrupt autovector */ #define EXCP_TRAP0 32 /* User trap #0. */ #define EXCP_TRAP15 47 /* User trap #15. */ #define EXCP_FP_BSUN 48 /* Branch Set on Unordered */ @@ -63,6 +68,9 @@ #define EXCP_FP_OVFL 53 /* Overflow */ #define EXCP_FP_SNAN 54 /* Signaling Not-A-Number */ #define EXCP_FP_UNIMP 55 /* Unimplemented Data type */ +#define EXCP_MMU_CONF 56 /* MMU Configuration Error */ +#define EXCP_MMU_ILLEGAL 57 /* MMU Illegal Operation Error */ +#define EXCP_MMU_ACCESS 58 /* MMU Access Level Violation Error */ #define EXCP_UNSUPPORTED 61 #define EXCP_RTE 0x100 diff --git a/target/m68k/op_helper.c b/target/m68k/op_helper.c index 63089511cb..123981af55 100644 --- a/target/m68k/op_helper.c +++ b/target/m68k/op_helper.c @@ -68,10 +68,116 @@ static void do_rte(CPUM68KState *env) helper_set_sr(env, fmt); } +static const char *m68k_exception_name(int index) +{ + switch (index) { + case EXCP_ACCESS: + return "Access Fault"; + case EXCP_ADDRESS: + return "Address Error"; + case EXCP_ILLEGAL: + return "Illegal Instruction"; + case EXCP_DIV0: + return "Divide by Zero"; + case EXCP_CHK: + return "CHK/CHK2"; + case EXCP_TRAPCC: + return "FTRAPcc, TRAPcc, TRAPV"; + case EXCP_PRIVILEGE: + return "Privilege Violation"; + case EXCP_TRACE: + return "Trace"; + case EXCP_LINEA: + return "A-Line"; + case EXCP_LINEF: + return "F-Line"; + case EXCP_DEBEGBP: /* 68020/030 only */ + return "Copro Protocol Violation"; + case EXCP_FORMAT: + return "Format Error"; + case EXCP_UNINITIALIZED: + return "Unitialized Interruot"; + case EXCP_SPURIOUS: + return "Spurious Interrupt"; + case EXCP_INT_LEVEL_1: + return "Level 1 Interrupt"; + case EXCP_INT_LEVEL_1 + 1: + return "Level 2 Interrupt"; + case EXCP_INT_LEVEL_1 + 2: + return "Level 3 Interrupt"; + case EXCP_INT_LEVEL_1 + 3: + return "Level 4 Interrupt"; + case EXCP_INT_LEVEL_1 + 4: + return "Level 5 Interrupt"; + case EXCP_INT_LEVEL_1 + 5: + return "Level 6 Interrupt"; + case EXCP_INT_LEVEL_1 + 6: + return "Level 7 Interrupt"; + case EXCP_TRAP0: + return "TRAP #0"; + case EXCP_TRAP0 + 1: + return "TRAP #1"; + case EXCP_TRAP0 + 2: + return "TRAP #2"; + case EXCP_TRAP0 + 3: + return "TRAP #3"; + case EXCP_TRAP0 + 4: + return "TRAP #4"; + case EXCP_TRAP0 + 5: + return "TRAP #5"; + case EXCP_TRAP0 + 6: + return "TRAP #6"; + case EXCP_TRAP0 + 7: + return "TRAP #7"; + case EXCP_TRAP0 + 8: + return "TRAP #8"; + case EXCP_TRAP0 + 9: + return "TRAP #9"; + case EXCP_TRAP0 + 10: + return "TRAP #10"; + case EXCP_TRAP0 + 11: + return "TRAP #11"; + case EXCP_TRAP0 + 12: + return "TRAP #12"; + case EXCP_TRAP0 + 13: + return "TRAP #13"; + case EXCP_TRAP0 + 14: + return "TRAP #14"; + case EXCP_TRAP0 + 15: + return "TRAP #15"; + case EXCP_FP_BSUN: + return "FP Branch/Set on unordered condition"; + case EXCP_FP_INEX: + return "FP Inexact Result"; + case EXCP_FP_DZ: + return "FP Divide by Zero"; + case EXCP_FP_UNFL: + return "FP Underflow"; + case EXCP_FP_OPERR: + return "FP Operand Error"; + case EXCP_FP_OVFL: + return "FP Overflow"; + case EXCP_FP_SNAN: + return "FP Signaling NAN"; + case EXCP_FP_UNIMP: + return "FP Unimplemented Data Type"; + case EXCP_MMU_CONF: /* 68030/68851 only */ + return "MMU Configuration Error"; + case EXCP_MMU_ILLEGAL: /* 68851 only */ + return "MMU Illegal Operation"; + case EXCP_MMU_ACCESS: /* 68851 only */ + return "MMU Access Level Violation"; + case 64 ... 255: + return "User Defined Vector"; + } + return "Unassigned"; +} + static void do_interrupt_all(CPUM68KState *env, int is_hw) { CPUState *cs = CPU(m68k_env_get_cpu(env)); uint32_t sp; + uint32_t sr; uint32_t fmt; uint32_t retaddr; uint32_t vector; @@ -109,10 +215,17 @@ static void do_interrupt_all(CPUM68KState *env, int is_hw) vector = cs->exception_index << 2; + sr = env->sr | cpu_m68k_get_ccr(env); + if (qemu_loglevel_mask(CPU_LOG_INT)) { + static int count; + qemu_log("INT %6d: %s(%#x) pc=%08x sp=%08x sr=%04x\n", + ++count, m68k_exception_name(cs->exception_index), + vector, env->pc, env->aregs[7], sr); + } + fmt |= 0x40000000; fmt |= vector << 16; - fmt |= env->sr; - fmt |= cpu_m68k_get_ccr(env); + fmt |= sr; env->sr |= SR_S; if (is_hw) { From patchwork Thu Jan 4 16:42:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855720 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDPX5T2fz9t3B for ; Fri, 5 Jan 2018 03:52:48 +1100 (AEDT) Received: from localhost ([::1]:50031 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8l4-0008Vx-Qg for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:52:46 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55341) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8bc-0007ZO-0p for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bZ-0003Yd-Dv for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:59 -0500 Received: from mout.kundenserver.de ([212.227.126.130]:55839) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8bY-0003W7-TG for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:57 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0LiGlL-1fJPnY1CR1-00nPnA; Thu, 04 Jan 2018 17:42:55 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:40 +0100 Message-Id: <20180104164251.26494-7-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:yCXysh2T8JIcFP5NQ2xILwUCk4eIYa8LFSc2O4TP+K1O50Ft7DI cRyrJz83cF/IQqNaHqMi4wVftyM4e8jgdLJvCZRmq6KJd3kID5+d0Tx9pInWbWO0UKqY18x KMCH2i2TKl9U8iqWs366aQPQp9+g2/fECZR50UyhXzO6stSZZ5Nn2sxs7pbGEXrwZG68ioB qHd+JR5w6Xk6jhovy77sA== X-UI-Out-Filterresults: notjunk:1; V01:K0:5vF7mgXzPgM=:zH3htggDpgK7aCGQ21TKLP fHfSXNKT8aU6AqBoWn12y7t28egyGB7ZxP2Vcl5SCPmOoezAgJSXOl2WQtCtXu2A94OT4l1WP npI364B2J+l7RLXzxsEjta5V4WFT9vCzwoFoR4dKZwozW2GqjEBaDwXl67aUH301uRpyziO5R ubNEciAFyz1vY9/ayYCOgcHVD/K0AJQhIpTgTj1/WIsVeaqdiQuNfSGXRyDNY/k5QV7ClbALe sbTdWDYrqKH7YoSzfeQNTyXVDi5R+ykMhmLVdOf+nea68agL2kz0hZLt3G8Sa6kGy6njpGuAI ZP4nwHIqG4eIDv/zfSixWuc0NYqNmnbRJEBfJsHHUyiIaDBXNlgiiPw7Bv5eRGVX/KK7czScW VcQjXgmISONEeQVjiWHG11uPPwCoVT6xI4MpiQNuGZfKrGvOUDzNF7mLqX5F6s6EAfJVSP/I1 CdgpPyxHIaWqzVYdW282ulydZWFBlkkSXHIf/HImRyfJ/8mVR/YIYqjdkjvmqqfi1r7dfTM6w rMnviUh9WUK1HLhWmobC75hXrXGyMEsGA2lQdKvTEsCyUHptyDFm/kP+TwGKFtUFJ5APsNm/C zsU/0ogxiheVNedTN+NqpwP+7yAAyK/S/wc5Jd3Y8dorhb0USw5cTUnGJIjD7d3etC6WjnBDb /xO01hUKzVQaEWXNxIQHOfaZm03P3eX3SFQdEJDCIwm5gSAYMdCHVIqp1T8YpZLTjox5Z/ubE f1nmWT2qEKcarHV6XFxrG3n5c9dt9TggYyM3Qh8SiT7o+kPsH9mPqIjZyxw= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.130 Subject: [Qemu-devel] [PULL 06/17] target/m68k: manage 680x0 stack frames 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 680x0 manages several stack frame formats: - format 0: four-word stack frame - format 1: four-word throwaway stack frame - format 2: six-word stack frame - format 3: Floating-Point post-instruction stack frame - format 4: eight-word stack frame - format 7: access-error stack frame Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-7-laurent@vivier.eu> --- target/m68k/cpu.h | 1 + target/m68k/helper.c | 10 ++- target/m68k/op_helper.c | 160 ++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 164 insertions(+), 7 deletions(-) diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h index acc2629216..cd4b3a7c7b 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -178,6 +178,7 @@ int cpu_m68k_signal_handler(int host_signum, void *pinfo, void *puc); uint32_t cpu_m68k_get_ccr(CPUM68KState *env); void cpu_m68k_set_ccr(CPUM68KState *env, uint32_t); +void cpu_m68k_set_sr(CPUM68KState *env, uint32_t); void cpu_m68k_set_fpcr(CPUM68KState *env, uint32_t val); diff --git a/target/m68k/helper.c b/target/m68k/helper.c index 7e50ff5871..af57ffcea9 100644 --- a/target/m68k/helper.c +++ b/target/m68k/helper.c @@ -316,13 +316,17 @@ uint32_t HELPER(sats)(uint32_t val, uint32_t v) return val; } -void HELPER(set_sr)(CPUM68KState *env, uint32_t val) +void cpu_m68k_set_sr(CPUM68KState *env, uint32_t sr) { - env->sr = val & 0xffe0; - cpu_m68k_set_ccr(env, val); + env->sr = sr & 0xffe0; + cpu_m68k_set_ccr(env, sr); m68k_switch_sp(env); } +void HELPER(set_sr)(CPUM68KState *env, uint32_t val) +{ + cpu_m68k_set_sr(env, val); +} /* MAC unit. */ /* FIXME: The MAC unit implementation is a bit of a mess. Some helpers diff --git a/target/m68k/op_helper.c b/target/m68k/op_helper.c index 123981af55..5c7b27b9ca 100644 --- a/target/m68k/op_helper.c +++ b/target/m68k/op_helper.c @@ -54,7 +54,7 @@ void tlb_fill(CPUState *cs, target_ulong addr, MMUAccessType access_type, } } -static void do_rte(CPUM68KState *env) +static void cf_rte(CPUM68KState *env) { uint32_t sp; uint32_t fmt; @@ -65,7 +65,46 @@ static void do_rte(CPUM68KState *env) sp |= (fmt >> 28) & 3; env->aregs[7] = sp + 8; - helper_set_sr(env, fmt); + cpu_m68k_set_sr(env, fmt); +} + +static void m68k_rte(CPUM68KState *env) +{ + uint32_t sp; + uint16_t fmt; + uint16_t sr; + + sp = env->aregs[7]; +throwaway: + sr = cpu_lduw_kernel(env, sp); + sp += 2; + env->pc = cpu_ldl_kernel(env, sp); + sp += 4; + if (m68k_feature(env, M68K_FEATURE_QUAD_MULDIV)) { + /* all except 68000 */ + fmt = cpu_lduw_kernel(env, sp); + sp += 2; + switch (fmt >> 12) { + case 0: + break; + case 1: + env->aregs[7] = sp; + cpu_m68k_set_sr(env, sr); + goto throwaway; + case 2: + case 3: + sp += 4; + break; + case 4: + sp += 8; + break; + case 7: + sp += 52; + break; + } + } + env->aregs[7] = sp; + cpu_m68k_set_sr(env, sr); } static const char *m68k_exception_name(int index) @@ -173,7 +212,7 @@ static const char *m68k_exception_name(int index) return "Unassigned"; } -static void do_interrupt_all(CPUM68KState *env, int is_hw) +static void cf_interrupt_all(CPUM68KState *env, int is_hw) { CPUState *cs = CPU(m68k_env_get_cpu(env)); uint32_t sp; @@ -189,7 +228,7 @@ static void do_interrupt_all(CPUM68KState *env, int is_hw) switch (cs->exception_index) { case EXCP_RTE: /* Return from an exception. */ - do_rte(env); + cf_rte(env); return; case EXCP_HALT_INSN: if (semihosting_enabled() @@ -247,6 +286,119 @@ static void do_interrupt_all(CPUM68KState *env, int is_hw) env->pc = cpu_ldl_kernel(env, env->vbr + vector); } +static inline void do_stack_frame(CPUM68KState *env, uint32_t *sp, + uint16_t format, uint16_t sr, + uint32_t addr, uint32_t retaddr) +{ + CPUState *cs = CPU(m68k_env_get_cpu(env)); + switch (format) { + case 4: + *sp -= 4; + cpu_stl_kernel(env, *sp, env->pc); + *sp -= 4; + cpu_stl_kernel(env, *sp, addr); + break; + case 3: + case 2: + *sp -= 4; + cpu_stl_kernel(env, *sp, addr); + break; + } + *sp -= 2; + cpu_stw_kernel(env, *sp, (format << 12) + (cs->exception_index << 2)); + *sp -= 4; + cpu_stl_kernel(env, *sp, retaddr); + *sp -= 2; + cpu_stw_kernel(env, *sp, sr); +} + +static void m68k_interrupt_all(CPUM68KState *env, int is_hw) +{ + CPUState *cs = CPU(m68k_env_get_cpu(env)); + uint32_t sp; + uint32_t retaddr; + uint32_t vector; + uint16_t sr, oldsr; + + retaddr = env->pc; + + if (!is_hw) { + switch (cs->exception_index) { + case EXCP_RTE: + /* Return from an exception. */ + m68k_rte(env); + return; + case EXCP_TRAP0 ... EXCP_TRAP15: + /* Move the PC after the trap instruction. */ + retaddr += 2; + break; + } + } + + vector = cs->exception_index << 2; + + sr = env->sr | cpu_m68k_get_ccr(env); + if (qemu_loglevel_mask(CPU_LOG_INT)) { + static int count; + qemu_log("INT %6d: %s(%#x) pc=%08x sp=%08x sr=%04x\n", + ++count, m68k_exception_name(cs->exception_index), + vector, env->pc, env->aregs[7], sr); + } + + /* + * MC68040UM/AD, chapter 9.3.10 + */ + + /* "the processor first make an internal copy" */ + oldsr = sr; + /* "set the mode to supervisor" */ + sr |= SR_S; + /* "suppress tracing" */ + sr &= ~SR_T; + /* "sets the processor interrupt mask" */ + if (is_hw) { + sr |= (env->sr & ~SR_I) | (env->pending_level << SR_I_SHIFT); + } + cpu_m68k_set_sr(env, sr); + sp = env->aregs[7]; + + sp &= ~1; + if (cs->exception_index == EXCP_ADDRESS) { + do_stack_frame(env, &sp, 2, oldsr, 0, retaddr); + } else if (cs->exception_index == EXCP_ILLEGAL || + cs->exception_index == EXCP_DIV0 || + cs->exception_index == EXCP_CHK || + cs->exception_index == EXCP_TRAPCC || + cs->exception_index == EXCP_TRACE) { + /* FIXME: addr is not only env->pc */ + do_stack_frame(env, &sp, 2, oldsr, env->pc, retaddr); + } else if (is_hw && oldsr & SR_M && + cs->exception_index >= EXCP_SPURIOUS && + cs->exception_index <= EXCP_INT_LEVEL_7) { + do_stack_frame(env, &sp, 0, oldsr, 0, retaddr); + oldsr = sr; + env->aregs[7] = sp; + cpu_m68k_set_sr(env, sr &= ~SR_M); + sp = env->aregs[7] & ~1; + do_stack_frame(env, &sp, 1, oldsr, 0, retaddr); + } else { + do_stack_frame(env, &sp, 0, oldsr, 0, retaddr); + } + + env->aregs[7] = sp; + /* Jump to vector. */ + env->pc = cpu_ldl_kernel(env, env->vbr + vector); +} + +static void do_interrupt_all(CPUM68KState *env, int is_hw) +{ + if (m68k_feature(env, M68K_FEATURE_M68000)) { + m68k_interrupt_all(env, is_hw); + return; + } + cf_interrupt_all(env, is_hw); +} + void m68k_cpu_do_interrupt(CPUState *cs) { M68kCPU *cpu = M68K_CPU(cs); From patchwork Thu Jan 4 16:42:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855719 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDMW1f6Gz9sQm for ; Fri, 5 Jan 2018 03:51:03 +1100 (AEDT) Received: from localhost ([::1]:50021 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8jN-0006pz-9t for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:51:01 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55395) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8bd-0007bC-Ln for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bZ-0003ZC-Oq for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:01 -0500 Received: from mout.kundenserver.de ([212.227.126.130]:56582) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8bZ-0003Wm-CZ for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:57 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0M05pA-1elV7j37Fc-00uJXn; Thu, 04 Jan 2018 17:42:56 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:41 +0100 Message-Id: <20180104164251.26494-8-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:wVm658/V1ZUNQdBiq3P1XGKLURtcvPHJxTqZZLlKPwBoqbGswta p/COuupMZYin8Y7QFAYCcEK1tFVqqr/MUb+BiUTZ3wBK7p9bqXdX9H2HGsLyV+Ob2etkKS9 F2Gtgzxx4hFk69XjXqr4XyluZwWOJbK5X4sTGvE/fyPqHFxtSGkJSTKVH5og5n7cFqlvmF/ l4G4ZLYOBTkf2d6oe3sBw== X-UI-Out-Filterresults: notjunk:1; V01:K0:EGkZgc/ld94=:qQ/+sJ5K/Vdq9QM8zb6yC2 K0eqfJZR8mVmecNvSjmXEDl85HQWZMBUVqWfz+rq3Z6sR7Jb3paj/Ex5DWIwjYad90sA7v/TL FT2RPcUzKXQKK+QRMNXcBP7sXQCaP5RD3+V3rWSOm2aifcVhgS6npRWEpBLcmXbUE1ArKEIBy RN/7DOMJ8w3uC5xDcX4oS6TFC0sjtx3pzCrTXVJNZrLTh0edA1iV0BCs2RpOTN/g0hP0nq+ho as7NKbR5cSq13KraMsywjoGD5m570a549a2fC6kgW41DniKMuT/IQ4yka1XYNfRv/fKddf2rJ JZn+Ipbme2OVDgOsLgC1b3wkLPwT2oYTwC59wv3pbvgyqql21mt4yFi0p17ROL7HxHJY6//ud bOm0R0eAetIkOtc1GgJ9yHZB+gWITJE3E9Tzo/l5N5I5mImdwhKrADYTiujm/iTzS0PzAbeYR hwEIwKmPHrKSb1g9FLl7Ag/xONAD7z+/sNGoJaswb+XxEZ0XpWVa/yX8g+DT1F7IinFPFHatd 1p5QTzpITpufKcuZqzgF4LCBM7AqveWIu8oMKq/qMS1aKdbL1Zxm9X2+nf+Xd+J1r0bUQGVx4 cOZSjXibPmWDfMKFl59bt/J6ECY4E7pQJc2XKQRfnc5bFRJwt/WxfPhzNZFhr6xUgMylDoaJg tibkvJ2NrertrKAV/0XXUUUUU7ElxUFihRQlR02MEd3G1kGlzpgMLtJLKUcF2hRNWO5kkJetO 7adG8KMWKbp+MnoHcT0CkriM6NsEtvHWgwG/ppAE5Rjx7RfBP+f/AxmSRwE= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.130 Subject: [Qemu-devel] [PULL 07/17] target/m68k: add chk and chk2 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" chk and chk2 compare a value to boundaries, and trigger a CHK exception if the value is out of bounds. Signed-off-by: Laurent Vivier Suggested-by: Richard Henderson Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-8-laurent@vivier.eu> --- linux-user/main.c | 7 +++++ target/m68k/cpu.c | 2 ++ target/m68k/cpu.h | 1 + target/m68k/helper.h | 3 ++ target/m68k/op_helper.c | 61 +++++++++++++++++++++++++++++++++++++++ target/m68k/translate.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++- 6 files changed, 150 insertions(+), 1 deletion(-) diff --git a/linux-user/main.c b/linux-user/main.c index 71696ed33d..99a551b04f 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -2985,6 +2985,13 @@ void cpu_loop(CPUM68KState *env) info._sifields._sigfault._addr = env->pc; queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info); break; + case EXCP_CHK: + info.si_signo = TARGET_SIGFPE; + info.si_errno = 0; + info.si_code = TARGET_FPE_INTOVF; + info._sifields._sigfault._addr = env->pc; + queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info); + break; case EXCP_DIV0: info.si_signo = TARGET_SIGFPE; info.si_errno = 0; diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c index 0a3dd83548..57ffcb2114 100644 --- a/target/m68k/cpu.c +++ b/target/m68k/cpu.c @@ -134,6 +134,7 @@ static void m68020_cpu_initfn(Object *obj) m68k_set_feature(env, M68K_FEATURE_CAS); m68k_set_feature(env, M68K_FEATURE_BKPT); m68k_set_feature(env, M68K_FEATURE_RTD); + m68k_set_feature(env, M68K_FEATURE_CHK2); } #define m68030_cpu_initfn m68020_cpu_initfn #define m68040_cpu_initfn m68020_cpu_initfn @@ -156,6 +157,7 @@ static void m68060_cpu_initfn(Object *obj) m68k_set_feature(env, M68K_FEATURE_CAS); m68k_set_feature(env, M68K_FEATURE_BKPT); m68k_set_feature(env, M68K_FEATURE_RTD); + m68k_set_feature(env, M68K_FEATURE_CHK2); } static void m5208_cpu_initfn(Object *obj) diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h index cd4b3a7c7b..68396bdd70 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -305,6 +305,7 @@ enum m68k_features { M68K_FEATURE_CAS, M68K_FEATURE_BKPT, M68K_FEATURE_RTD, + M68K_FEATURE_CHK2, }; static inline int m68k_feature(CPUM68KState *env, int feature) diff --git a/target/m68k/helper.h b/target/m68k/helper.h index eebe52dae5..78483da003 100644 --- a/target/m68k/helper.h +++ b/target/m68k/helper.h @@ -94,3 +94,6 @@ DEF_HELPER_FLAGS_4(bfchg_mem, TCG_CALL_NO_WG, i32, env, i32, s32, i32) DEF_HELPER_FLAGS_4(bfclr_mem, TCG_CALL_NO_WG, i32, env, i32, s32, i32) DEF_HELPER_FLAGS_4(bfset_mem, TCG_CALL_NO_WG, i32, env, i32, s32, i32) DEF_HELPER_FLAGS_4(bfffo_mem, TCG_CALL_NO_WG, i64, env, i32, s32, i32) + +DEF_HELPER_3(chk, void, env, s32, s32) +DEF_HELPER_4(chk2, void, env, s32, s32, s32) diff --git a/target/m68k/op_helper.c b/target/m68k/op_helper.c index 5c7b27b9ca..7e97d03f82 100644 --- a/target/m68k/op_helper.c +++ b/target/m68k/op_helper.c @@ -947,3 +947,64 @@ uint64_t HELPER(bfffo_mem)(CPUM68KState *env, uint32_t addr, is already zero. */ return n | ffo; } + +void HELPER(chk)(CPUM68KState *env, int32_t val, int32_t ub) +{ + /* From the specs: + * X: Not affected, C,V,Z: Undefined, + * N: Set if val < 0; cleared if val > ub, undefined otherwise + * We implement here values found from a real MC68040: + * X,V,Z: Not affected + * N: Set if val < 0; cleared if val >= 0 + * C: if 0 <= ub: set if val < 0 or val > ub, cleared otherwise + * if 0 > ub: set if val > ub and val < 0, cleared otherwise + */ + env->cc_n = val; + env->cc_c = 0 <= ub ? val < 0 || val > ub : val > ub && val < 0; + + if (val < 0 || val > ub) { + CPUState *cs = CPU(m68k_env_get_cpu(env)); + + /* Recover PC and CC_OP for the beginning of the insn. */ + cpu_restore_state(cs, GETPC()); + + /* flags have been modified by gen_flush_flags() */ + env->cc_op = CC_OP_FLAGS; + /* Adjust PC to end of the insn. */ + env->pc += 2; + + cs->exception_index = EXCP_CHK; + cpu_loop_exit(cs); + } +} + +void HELPER(chk2)(CPUM68KState *env, int32_t val, int32_t lb, int32_t ub) +{ + /* From the specs: + * X: Not affected, N,V: Undefined, + * Z: Set if val is equal to lb or ub + * C: Set if val < lb or val > ub, cleared otherwise + * We implement here values found from a real MC68040: + * X,N,V: Not affected + * Z: Set if val is equal to lb or ub + * C: if lb <= ub: set if val < lb or val > ub, cleared otherwise + * if lb > ub: set if val > ub and val < lb, cleared otherwise + */ + env->cc_z = val != lb && val != ub; + env->cc_c = lb <= ub ? val < lb || val > ub : val > ub && val < lb; + + if (env->cc_c) { + CPUState *cs = CPU(m68k_env_get_cpu(env)); + + /* Recover PC and CC_OP for the beginning of the insn. */ + cpu_restore_state(cs, GETPC()); + + /* flags have been modified by gen_flush_flags() */ + env->cc_op = CC_OP_FLAGS; + /* Adjust PC to end of the insn. */ + env->pc += 4; + + cs->exception_index = EXCP_CHK; + cpu_loop_exit(cs); + } +} diff --git a/target/m68k/translate.c b/target/m68k/translate.c index a1e424e3db..7f52065375 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -4203,6 +4203,80 @@ DISAS_INSN(ff1) gen_helper_ff1(reg, reg); } +DISAS_INSN(chk) +{ + TCGv src, reg; + int opsize; + + switch ((insn >> 7) & 3) { + case 3: + opsize = OS_WORD; + break; + case 2: + if (m68k_feature(env, M68K_FEATURE_CHK2)) { + opsize = OS_LONG; + break; + } + /* fallthru */ + default: + gen_exception(s, s->insn_pc, EXCP_ILLEGAL); + return; + } + SRC_EA(env, src, opsize, 1, NULL); + reg = gen_extend(DREG(insn, 9), opsize, 1); + + gen_flush_flags(s); + gen_helper_chk(cpu_env, reg, src); +} + +DISAS_INSN(chk2) +{ + uint16_t ext; + TCGv addr1, addr2, bound1, bound2, reg; + int opsize; + + switch ((insn >> 9) & 3) { + case 0: + opsize = OS_BYTE; + break; + case 1: + opsize = OS_WORD; + break; + case 2: + opsize = OS_LONG; + break; + default: + gen_exception(s, s->insn_pc, EXCP_ILLEGAL); + return; + } + + ext = read_im16(env, s); + if ((ext & 0x0800) == 0) { + gen_exception(s, s->insn_pc, EXCP_ILLEGAL); + return; + } + + addr1 = gen_lea(env, s, insn, OS_UNSIZED); + addr2 = tcg_temp_new(); + tcg_gen_addi_i32(addr2, addr1, opsize_bytes(opsize)); + + bound1 = gen_load(s, opsize, addr1, 1); + tcg_temp_free(addr1); + bound2 = gen_load(s, opsize, addr2, 1); + tcg_temp_free(addr2); + + reg = tcg_temp_new(); + if (ext & 0x8000) { + tcg_gen_mov_i32(reg, AREG(ext, 12)); + } else { + gen_ext(reg, DREG(ext, 12), opsize, 1); + } + + gen_flush_flags(s); + gen_helper_chk2(cpu_env, reg, bound1, bound2); + tcg_temp_free(reg); +} + static TCGv gen_get_sr(DisasContext *s) { TCGv ccr; @@ -5306,7 +5380,7 @@ void register_m68k_insns (CPUM68KState *env) BASE(undef, 0000, 0000); INSN(arith_im, 0080, fff8, CF_ISA_A); INSN(arith_im, 0000, ff00, M68000); - INSN(undef, 00c0, ffc0, M68000); + INSN(chk2, 00c0, f9c0, CHK2); INSN(bitrev, 00c0, fff8, CF_ISA_APLUSC); BASE(bitop_reg, 0100, f1c0); BASE(bitop_reg, 0140, f1c0); @@ -5339,6 +5413,7 @@ void register_m68k_insns (CPUM68KState *env) BASE(move, 1000, f000); BASE(move, 2000, f000); BASE(move, 3000, f000); + INSN(chk, 4000, f040, M68000); INSN(strldsr, 40e7, ffff, CF_ISA_APLUSC); INSN(negx, 4080, fff8, CF_ISA_A); INSN(negx, 4000, ff00, M68000); From patchwork Thu Jan 4 16:42:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855723 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDSf2507z9s7G for ; Fri, 5 Jan 2018 03:55:30 +1100 (AEDT) Received: from localhost ([::1]:50280 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8ng-0003Zl-9G for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:55:28 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55386) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8bd-0007b0-Fi for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8ba-0003Zx-6Z for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:01 -0500 Received: from mout.kundenserver.de ([212.227.126.134]:50011) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8bZ-0003Xd-No for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:58 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0McRqW-1eFTEG0pd2-00Hfs7; Thu, 04 Jan 2018 17:42:56 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:42 +0100 Message-Id: <20180104164251.26494-9-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:yMthnqEVL1udd77h61zv319zWnYTyb/Pmc4l4WmU8krncz/km9h ErizGTlESscBEPceAht8hm9do6kyzD5lDII1oHf4FxlB2TcpV2IGS78qEFRcv9XvDiLgaAv DtcNhKms8rTUAkw8pZwp0dqNBqbCE4fEUzpNxb7iNCzydRPVyF2S2q+sQDFKc/mE0yvN1FW 7Xpu62bihaCDb/oJq1oeA== X-UI-Out-Filterresults: notjunk:1; V01:K0:BDOBgbE5E34=:oGa8L5w+UN++YR9/fXiW8L z7xAtmXpRJhBT6n6UdZdV1VoI0LoUZbnq0Vi0OFPH3s8JGNh4ed9MCFQymDJ548M9QGaymf1t ybG+UJJN74MpJ1Q+qyHbzrbGF5fGjr9XffRE5iJyOk/rzyuV3fF1EazrU9/zn8CVwOCfLOwZd dPSxwMCy27WijI5HDb0CkqEFHE2qL7vVs7nD7K5zJZfRiefzhGM/BpRAu/jyYBZn0TxgUirWn q/AUSGgtrBdBDUlGTO9llCTujkihLLN0vN24SPKkAwaW3Xkh3w+6Q7mimD9bzcFKMpKuHAiR8 ZDRIyDo3IegaUjPyQBSrViRwE3nhFdWZr7hg84a9W72yb+QwVBlwR2g1nPo2pzOMnEUzyxJlR Puu/b/kEuzeXpiT+3qjjCgLdVu8zt1wEttE4lAv/t4YRKqUP7Llt3fNSCcdfcyZUiu30BX7F7 GuVIPN3cP27CZlS7v9c52E6XZhlfKufWm03nVV8QYulz9Dvx2eecWD4DYtQfcWrY5OSeyz3Jv wlUMojBPPpoIVmriE78HwXf6lNMdKtO0m89iqo4kpfRLwo+dYqxQmce+zYDN3sETkIeVQbWiw +sX+7ARgONt8/Pdv/KW4Uf7M1X+fSb4dwqfcGcewzozT6GLd0mRwh8Jzzr4dTkisIyG3RiLEy SgQjyoY4M1xFzcfISo90IndG/s7ABAMKqTeeFVFs2Q+xzF0wFT1Tf0GRuwlc0flYFev8coD1Q V1L7mZEOS46Snt4rOP1ptIXyCtvtfNY9MQ40Q9z/Cxl6qZed5frxzJdj1II= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.134 Subject: [Qemu-devel] [PULL 08/17] target/m68k: add move16 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" move16 moves the source line to the destination line. Lines are aligned to 16-byte boundaries and are 16 bytes long. Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-9-laurent@vivier.eu> --- target/m68k/cpu.c | 10 ++++++- target/m68k/cpu.h | 1 + target/m68k/translate.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c index 57ffcb2114..1936efd170 100644 --- a/target/m68k/cpu.c +++ b/target/m68k/cpu.c @@ -137,7 +137,15 @@ static void m68020_cpu_initfn(Object *obj) m68k_set_feature(env, M68K_FEATURE_CHK2); } #define m68030_cpu_initfn m68020_cpu_initfn -#define m68040_cpu_initfn m68020_cpu_initfn + +static void m68040_cpu_initfn(Object *obj) +{ + M68kCPU *cpu = M68K_CPU(obj); + CPUM68KState *env = &cpu->env; + + m68020_cpu_initfn(obj); + m68k_set_feature(env, M68K_FEATURE_M68040); +} static void m68060_cpu_initfn(Object *obj) { diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h index 68396bdd70..2ac4ab191e 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -306,6 +306,7 @@ enum m68k_features { M68K_FEATURE_BKPT, M68K_FEATURE_RTD, M68K_FEATURE_CHK2, + M68K_FEATURE_M68040, /* instructions specific to MC68040 */ }; static inline int m68k_feature(CPUM68KState *env, int feature) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 7f52065375..0ef933a545 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -4277,6 +4277,76 @@ DISAS_INSN(chk2) tcg_temp_free(reg); } +static void m68k_copy_line(TCGv dst, TCGv src, int index) +{ + TCGv addr; + TCGv_i64 t0, t1; + + addr = tcg_temp_new(); + + t0 = tcg_temp_new_i64(); + t1 = tcg_temp_new_i64(); + + tcg_gen_andi_i32(addr, src, ~15); + tcg_gen_qemu_ld64(t0, addr, index); + tcg_gen_addi_i32(addr, addr, 8); + tcg_gen_qemu_ld64(t1, addr, index); + + tcg_gen_andi_i32(addr, dst, ~15); + tcg_gen_qemu_st64(t0, addr, index); + tcg_gen_addi_i32(addr, addr, 8); + tcg_gen_qemu_st64(t1, addr, index); + + tcg_temp_free_i64(t0); + tcg_temp_free_i64(t1); + tcg_temp_free(addr); +} + +DISAS_INSN(move16_reg) +{ + int index = IS_USER(s); + TCGv tmp; + uint16_t ext; + + ext = read_im16(env, s); + if ((ext & (1 << 15)) == 0) { + gen_exception(s, s->insn_pc, EXCP_ILLEGAL); + } + + m68k_copy_line(AREG(ext, 12), AREG(insn, 0), index); + + /* Ax can be Ay, so save Ay before incrementing Ax */ + tmp = tcg_temp_new(); + tcg_gen_mov_i32(tmp, AREG(ext, 12)); + tcg_gen_addi_i32(AREG(insn, 0), AREG(insn, 0), 16); + tcg_gen_addi_i32(AREG(ext, 12), tmp, 16); + tcg_temp_free(tmp); +} + +DISAS_INSN(move16_mem) +{ + int index = IS_USER(s); + TCGv reg, addr; + + reg = AREG(insn, 0); + addr = tcg_const_i32(read_im32(env, s)); + + if ((insn >> 3) & 1) { + /* MOVE16 (xxx).L, (Ay) */ + m68k_copy_line(reg, addr, index); + } else { + /* MOVE16 (Ay), (xxx).L */ + m68k_copy_line(addr, reg, index); + } + + tcg_temp_free(addr); + + if (((insn >> 3) & 2) == 0) { + /* (Ay)+ */ + tcg_gen_addi_i32(reg, reg, 16); + } +} + static TCGv gen_get_sr(DisasContext *s) { TCGv ccr; @@ -5578,6 +5648,8 @@ void register_m68k_insns (CPUM68KState *env) INSN(fsave, f300, ffc0, FPU); INSN(intouch, f340, ffc0, CF_ISA_A); INSN(cpushl, f428, ff38, CF_ISA_A); + INSN(move16_mem, f600, ffe0, M68040); + INSN(move16_reg, f620, fff8, M68040); INSN(wddata, fb00, ff00, CF_ISA_A); INSN(wdebug, fbc0, ffc0, CF_ISA_A); #undef INSN From patchwork Thu Jan 4 16:42:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855727 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDXx2MY7z9t32 for ; Fri, 5 Jan 2018 03:59:13 +1100 (AEDT) Received: from localhost ([::1]:50381 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8rH-00074s-AD for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:59:11 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55429) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8be-0007bo-Ef for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:09 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8ba-0003as-L2 for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:02 -0500 Received: from mout.kundenserver.de ([212.227.126.187]:56652) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8ba-0003YR-70 for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:58 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MQs4Q-1eKS7S2XfC-00UMNV; Thu, 04 Jan 2018 17:42:56 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:43 +0100 Message-Id: <20180104164251.26494-10-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:C9WWxknTiDj7knmQJK+3BgckSD7qsB20qi/S7ItTkoID3ppHYQn dYkIuu96nJcMu8MZTK3nWbYCdXKCoag+F2s3zX02pv+r8203wKtGVHRUMYAijy94NLzApi+ hEAuVURk/yv1jgcJfJcWuPybKj4TgDGvvXXQ4uKiJp0b90c1aVVwhtR3LwaZABs04G7p+zu yoBca2ip9taQPhwls6NMw== X-UI-Out-Filterresults: notjunk:1; V01:K0:ic+MxSKYpPE=:J1Qg168VOpg0XFBoh0XJu4 5cr+Sh3Ucf8BE0MBVVN8VsCLZICZfUupnrCXP4xFZMhKaw68d253QXZNLuB9ExBIHfJxZxdDf CszFLXsI45xlrRROpSEQCYmc9Qdiy3fA/5DG0YtRQEtzoBdAhOIDZK+XlZ3yHJthMz8vRx6/z J4MXTQ//L6DlLrZ5nq7wM17mUFE8lqFJbIDgwOSaIwJy9YiqOOu+W4MtQxR4iP3cAex91Wim3 Os4P4O+PWbEnj57cJWZRDzH6AEezpMfcc7HImzOZ1qORAh44QCXQieKlUWpe9FC6XXrSFGlPa tZ/KWoytB5F8v+dHZHQPEzwdXEUjCnBCfkQ1j6i4942pLshpD2DpAD1I0NEQN0ELLBtcUFLyg EjWk8QBInT4QGVkTcEY7qQzg+DWxCWANpau6RhSK6T//O9GCpWs+v02BOSaf3uI6u8KxKMHEj DivoX98WGIgpGnScfKDPbAkpYmg1EUMVDCwVEIS+zKsL5GFyJ6UPDdQdygIJqVfuFVFY9PVcw rFWTkpTRSUIRgDVMgx/wfEr7uptC42W2Ezjj3zygrazwI8alNaR2PUV2wvvx69TktcUrMPT1M 3VbjC0+3ssaLFf9EF3b95QN9sVgwaMQaeVT0MqLxyQsL8CBy7AKFDkuTD1uHxLF9Y2gNgmktn B39bu6t2v46UtO8GML7gwWTOlBXhNjY3B97O9zBhB3DWNew4s3KN1xs3X+BwQuZdyds2n7N/J DVvPnr+GMZSOPeWM9Oiun9ZgewjQ9LwHMIOkzvNIosmJmPeBhF5+mnWR4XU= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.187 Subject: [Qemu-devel] [PULL 09/17] target/m68k: softmmu cleanup 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" don't compile supervisor only instructions in linux-user mode Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-10-laurent@vivier.eu> --- target/m68k/translate.c | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 0ef933a545..f77005215f 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -4391,6 +4391,7 @@ DISAS_INSN(move_from_sr) DEST_EA(env, insn, OS_WORD, sr, NULL); } +#if defined(CONFIG_SOFTMMU) DISAS_INSN(move_to_sr) { if (IS_USER(s)) { @@ -4423,6 +4424,11 @@ DISAS_INSN(move_to_usp) DISAS_INSN(halt) { + if (IS_USER(s)) { + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); + return; + } + gen_exception(s, s->pc, EXCP_HALT_INSN); } @@ -4506,6 +4512,7 @@ DISAS_INSN(wdebug) /* TODO: Implement wdebug. */ cpu_abort(CPU(cpu), "WDEBUG not implemented"); } +#endif DISAS_INSN(trap) { @@ -5063,10 +5070,16 @@ DISAS_INSN(fscc) tcg_temp_free(tmp); } +#if defined(CONFIG_SOFTMMU) DISAS_INSN(frestore) { M68kCPU *cpu = m68k_env_get_cpu(env); + if (IS_USER(s)) { + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); + return; + } + /* TODO: Implement frestore. */ cpu_abort(CPU(cpu), "FRESTORE not implemented"); } @@ -5075,9 +5088,15 @@ DISAS_INSN(fsave) { M68kCPU *cpu = m68k_env_get_cpu(env); + if (IS_USER(s)) { + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); + return; + } + /* TODO: Implement fsave. */ cpu_abort(CPU(cpu), "FSAVE not implemented"); } +#endif static inline TCGv gen_mac_extract_word(DisasContext *s, TCGv val, int upper) { @@ -5502,7 +5521,9 @@ void register_m68k_insns (CPUM68KState *env) INSN(not, 4680, fff8, CF_ISA_A); INSN(not, 4600, ff00, M68000); INSN(undef, 46c0, ffc0, M68000); +#if defined(CONFIG_SOFTMMU) INSN(move_to_sr, 46c0, ffc0, CF_ISA_A); +#endif INSN(nbcd, 4800, ffc0, M68000); INSN(linkl, 4808, fff8, M68000); BASE(pea, 4840, ffc0); @@ -5517,7 +5538,9 @@ void register_m68k_insns (CPUM68KState *env) BASE(tst, 4a00, ff00); INSN(tas, 4ac0, ffc0, CF_ISA_B); INSN(tas, 4ac0, ffc0, M68000); +#if defined(CONFIG_SOFTMMU) INSN(halt, 4ac8, ffff, CF_ISA_A); +#endif INSN(pulse, 4acc, ffff, CF_ISA_A); BASE(illegal, 4afc, ffff); INSN(mull, 4c00, ffc0, CF_ISA_A); @@ -5528,14 +5551,16 @@ void register_m68k_insns (CPUM68KState *env) BASE(trap, 4e40, fff0); BASE(link, 4e50, fff8); BASE(unlk, 4e58, fff8); +#if defined(CONFIG_SOFTMMU) INSN(move_to_usp, 4e60, fff8, USP); INSN(move_from_usp, 4e68, fff8, USP); - BASE(nop, 4e71, ffff); BASE(stop, 4e72, ffff); BASE(rte, 4e73, ffff); + INSN(movec, 4e7b, ffff, CF_ISA_A); +#endif + BASE(nop, 4e71, ffff); INSN(rtd, 4e74, ffff, RTD); BASE(rts, 4e75, ffff); - INSN(movec, 4e7b, ffff, CF_ISA_A); BASE(jump, 4e80, ffc0); BASE(jump, 4ec0, ffc0); INSN(addsubq, 5000, f080, M68000); @@ -5639,19 +5664,21 @@ void register_m68k_insns (CPUM68KState *env) BASE(undef_fpu, f000, f000); INSN(fpu, f200, ffc0, CF_FPU); INSN(fbcc, f280, ffc0, CF_FPU); - INSN(frestore, f340, ffc0, CF_FPU); - INSN(fsave, f300, ffc0, CF_FPU); INSN(fpu, f200, ffc0, FPU); INSN(fscc, f240, ffc0, FPU); INSN(fbcc, f280, ff80, FPU); +#if defined(CONFIG_SOFTMMU) + INSN(frestore, f340, ffc0, CF_FPU); + INSN(fsave, f300, ffc0, CF_FPU); INSN(frestore, f340, ffc0, FPU); INSN(fsave, f300, ffc0, FPU); INSN(intouch, f340, ffc0, CF_ISA_A); INSN(cpushl, f428, ff38, CF_ISA_A); - INSN(move16_mem, f600, ffe0, M68040); - INSN(move16_reg, f620, fff8, M68040); INSN(wddata, fb00, ff00, CF_ISA_A); INSN(wdebug, fbc0, ffc0, CF_ISA_A); +#endif + INSN(move16_mem, f600, ffe0, M68040); + INSN(move16_reg, f620, fff8, M68040); #undef INSN } From patchwork Thu Jan 4 16:42:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855726 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDWz0zKdz9t32 for ; Fri, 5 Jan 2018 03:58:23 +1100 (AEDT) Received: from localhost ([::1]:50318 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8qT-000696-6y for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:58:21 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55441) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8be-0007cP-Rx for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bb-0003bT-3l for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:02 -0500 Received: from mout.kundenserver.de ([212.227.126.131]:65240) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8ba-0003ZP-Mn for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:58 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0LsdiP-1evhkG09mb-012KHm; Thu, 04 Jan 2018 17:42:57 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:44 +0100 Message-Id: <20180104164251.26494-11-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:t+XFz1DNh2MTPQ5V1TS+zgbPvM9UFCu2kSw8HzIy4qSusUmpe81 if/6c81Iq842mZLMSorc8R7WG+CMZAjCTPmsXUYjJ39B+yfJ3YJ9A/eClBLKmQKlnbJD3oU 0Fkm19AgOa0eYm+xR4KjnzRVzJlMwY8uVHAMaIXu+bo0j2i/rFYb4K/I5eavLkF6E3126CD 6oO5QGnxjIWOEEkFkUc7A== X-UI-Out-Filterresults: notjunk:1; V01:K0:Zb43RNNAwXg=:pLZKb41wInwQivpkIWCLbV nbBVnjGoD/vOhBoKJTZHnNVWWRkelJ6Ob9f2gT54nQ0onrkwn3yrfApeOb3/uM4muP4xgbIii UtX6Cvd3TozELW/bVp2OAURNPnVVa3Hy6wvYHbPJogMAqyBy8kY7+Q1wYzhPqUcBTxkAu+q77 AFX5SIYZRzXhx2mqDu2Y7j9uez9ANgZq6uCgZ76x3GhyY74yDd2i8E8qI4DpkIvoNcQ7Tlav1 7TvbwAXvATQy1mpfcJ2J8M1oT5Vmc+kb9QkqrFcfNfNuQlMpXqsTxggzwc7QitOWuTjbpW1I1 pJKSFdk9KdYLjtL9Y9CKALTIAfK/oV5kCgrdVMxhVmhDoaB/npnsyn1b/4vheJ4ZJb5j2F7uu b48Gla1bjNmzy7L6n3cLIwN5pwKasfCKQz0a59qwaT2bT/lzkJfSdYjW5NBayRhZJeOIa7Tj8 OT6PyGOsx6H+YCGZbYcFEv+agmr+8WEl6HMU8EoBFvmeNsBH4vfy0BUEVbOWVx7fl6j7ofz/A UiSiloMDgeNkivk1dqMcvVJf0jzKaUu5JF17a9knzS3Vf5Ajv/uDfdtTrsRfeyRy+a1EBlkcG 5jJG7Gx1kkv2F3gaPAZ63DsDWZSjiGXZ+TOqNXUgi7JrxkxAiqXBvMPeVR9oQA0t1AezKhKVi 0po4UurJrIyPFi9PaVoulypejEN+NhwrAACwS5AdRKfEUBvtglKAnmfo24aZ0OyyqD4Ve8der A15cs1/EaeiIzpBxYCY+CzjDzNfPZI4mGd2GXUT+Nb7KK0Sl9q17+FtihMM= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.131 Subject: [Qemu-devel] [PULL 10/17] target/m68k: add cpush/cinv 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add cache lines invalidate and cache lines push as no-op operations, as we don't have cache. These instructions are 68040 only. Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-11-laurent@vivier.eu> --- target/m68k/translate.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index f77005215f..98efe6b976 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -4496,6 +4496,24 @@ DISAS_INSN(cpushl) /* Cache push/invalidate. Implement as no-op. */ } +DISAS_INSN(cpush) +{ + if (IS_USER(s)) { + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); + return; + } + /* Cache push/invalidate. Implement as no-op. */ +} + +DISAS_INSN(cinv) +{ + if (IS_USER(s)) { + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); + return; + } + /* Invalidate cache line. Implement as no-op. */ +} + DISAS_INSN(wddata) { gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); @@ -5674,6 +5692,8 @@ void register_m68k_insns (CPUM68KState *env) INSN(fsave, f300, ffc0, FPU); INSN(intouch, f340, ffc0, CF_ISA_A); INSN(cpushl, f428, ff38, CF_ISA_A); + INSN(cpush, f420, ff20, M68040); + INSN(cinv, f400, ff20, M68040); INSN(wddata, fb00, ff00, CF_ISA_A); INSN(wdebug, fbc0, ffc0, CF_ISA_A); #endif From patchwork Thu Jan 4 16:42:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855706 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDCD0QVMz9sQm for ; Fri, 5 Jan 2018 03:43:51 +1100 (AEDT) Received: from localhost ([::1]:49715 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8cP-0007fS-Qh for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:43:49 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55403) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8bd-0007bL-Rp for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bb-0003c1-BE for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:01 -0500 Received: from mout.kundenserver.de ([212.227.126.134]:49267) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8ba-0003Zf-Rv for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:59 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0Mgrgq-1eJqwT1iqG-00M5iR; Thu, 04 Jan 2018 17:42:57 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:45 +0100 Message-Id: <20180104164251.26494-12-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:193lsnYf3tAopT/kzy6OCI24g5ig80hpxww8MBZ/8ZkeB8IDuTT /PV0LkPoMvhCXpEJTUvBnxcLe/Rd3OBl/xuQqqlp8J0bHxX83Sn4fsCri6XkuIhk/Rz5SlP KAGSt2enESZqC0G6M8J410FH/ebyXetA0bIpjeT3/mqJaNiyi95qOgbtdT7eEGh83eH1vto AGV3DPIjvnMGlsjQVxv9g== X-UI-Out-Filterresults: notjunk:1; V01:K0:0WUsljRGwcA=:vq66WKaGpSCPsUsuuO1Y/6 1uAA8BOccdQ6SRMY+LH88okjax7nyx+I/kCrvQhTs+ySx3r8f186suIzzcws9XOPRlrifHgJ4 EVuOD5+Cby/Z9vbYaJ2x60VX2LTJaofnCfj7KXLwWTtnKhWG95BJQM9ebl+5xIsbzN0rR0KsJ o2PN8Tm0kAdNOUwjD/FYSl4TtFKn0dK/tgeDNzG9k5vRvh58h3CQgAl6r5y+DSdOOLlG7Hswn xJXWeqh/N7UzBvBQ9pypyJN7HMoIgRF7EnG4o1SyW7LEelOUb75aOOP1DwGsmxc4g2gakHQvA dArRsK+u30EBoyZoLn+Fk7yn3ltZDhbd7WZWFvoBOiSW6AT7ozJIs/7WAUcgqOoBhvivu63HT wVBdtm32Ec5IoD7L4exuLyRj7vcOwdn2esCHHY6RSonJHAxgmq76XRlZnUlEkiX73jSwxKHMy HxRHWfzHYLKork9d5ItPdAb+3zp0PyWoJerdt5vxEJ4GW4VRDrEmASq5s2ZzQF/L44gGC17fN 2PDsYcNc2bE72M8/0D1UUjXKwUEhHVhoxfB+NDxtmM1KpUAbtWtNKhf+B2Yf2IH1V78WawVHU /A/Y6a5HQ8JpNKsUeth5akEMVjm1+536mUtsHzhP72H9/MGill5djaPRBpt4kPIfzKPAgnEZ1 7sHXhGqFM4e5HJ0OIVZ2xTF9P0Kc6gPPfM+g58JTD1tEqURTmhdZJR8QZCykryDl4En8Gyy2X c9+Ug6Z3Yx0kidqf0jnCLraDSzHwdgPNYpb7OxbkNaUH1TjVYM7YX3yeELk= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.134 Subject: [Qemu-devel] [PULL 11/17] target/m68k: add reset 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" The instruction traps if the CPU is not in Supervisor state but the helper is empty because there is no easy way to reset all the peripherals without resetting the CPU itself. Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-12-laurent@vivier.eu> --- target/m68k/helper.c | 7 +++++++ target/m68k/helper.h | 4 ++++ target/m68k/translate.c | 13 +++++++++++++ 3 files changed, 24 insertions(+) diff --git a/target/m68k/helper.c b/target/m68k/helper.c index af57ffcea9..52b054e1a3 100644 --- a/target/m68k/helper.c +++ b/target/m68k/helper.c @@ -711,3 +711,10 @@ void HELPER(set_mac_extu)(CPUM68KState *env, uint32_t val, uint32_t acc) res |= (uint64_t)(val & 0xffff0000) << 16; env->macc[acc + 1] = res; } + +#if defined(CONFIG_SOFTMMU) +void HELPER(reset)(CPUM68KState *env) +{ + /* FIXME: reset all except CPU */ +} +#endif diff --git a/target/m68k/helper.h b/target/m68k/helper.h index 78483da003..d27ea37d60 100644 --- a/target/m68k/helper.h +++ b/target/m68k/helper.h @@ -97,3 +97,7 @@ DEF_HELPER_FLAGS_4(bfffo_mem, TCG_CALL_NO_WG, i64, env, i32, s32, i32) DEF_HELPER_3(chk, void, env, s32, s32) DEF_HELPER_4(chk2, void, env, s32, s32, s32) + +#if defined(CONFIG_SOFTMMU) +DEF_HELPER_FLAGS_1(reset, TCG_CALL_NO_RWG, void, env) +#endif diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 98efe6b976..e8f7d07f3f 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -2762,6 +2762,18 @@ DISAS_INSN(unlk) tcg_temp_free(src); } +#if defined(CONFIG_SOFTMMU) +DISAS_INSN(reset) +{ + if (IS_USER(s)) { + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); + return; + } + + gen_helper_reset(cpu_env); +} +#endif + DISAS_INSN(nop) { } @@ -5572,6 +5584,7 @@ void register_m68k_insns (CPUM68KState *env) #if defined(CONFIG_SOFTMMU) INSN(move_to_usp, 4e60, fff8, USP); INSN(move_from_usp, 4e68, fff8, USP); + INSN(reset, 4e70, ffff, M68000); BASE(stop, 4e72, ffff); BASE(rte, 4e73, ffff); INSN(movec, 4e7b, ffff, CF_ISA_A); From patchwork Thu Jan 4 16:42:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855728 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDZx6Sgwz9s7G for ; Fri, 5 Jan 2018 04:00:57 +1100 (AEDT) Received: from localhost ([::1]:50466 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8sx-0008Rp-Vc for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 12:00:56 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55440) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8be-0007cG-Qe for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bb-0003cz-Ql for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:02 -0500 Received: from mout.kundenserver.de ([212.227.126.131]:64820) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8bb-0003aL-De for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:42:59 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0M2YnR-1enz2C3FVV-00sNbG; Thu, 04 Jan 2018 17:42:57 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:46 +0100 Message-Id: <20180104164251.26494-13-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:cKHhq4K/oqm6pphwlW1VKM0hbWOowAqqW8tdMLCHWQ2SKUS4TIO 03h0+B1LcI2T4Vj2y65Pq+4mq5oxbpXzQLuGU/LAAv+QK6Bzi+jNmEXwhNLxWLluRIj0srL vJJ1EqIm9vY1CVSXqylnl9hyf319eP2WIlThpzQ2zj4HhqfDwzPizVRh2C5g57YWZgzlC4R X2wrH6i7jfVtU0leJgnIw== X-UI-Out-Filterresults: notjunk:1; V01:K0:hV48FiJphRQ=:DtD8thcbuM5q/3xNStqmCE ssttR4oYd13c3HvliHMTJb2Vvts+6ntWo1+wlU2w0MMe5dNLPtlGbhMTaQRTBko6tD4xQ9AVt zYKVRE3ZLuNgg998b/kwrUs/Ofmtrjc3eCUmSJoT15zMI7+wLnqKZr/3Y6CCnLQUMteopjrtX ZReR1fMIg0XFSpEATFaulIqQunNS0uh6AVU0qsNK8EIOUb6iIqWKFT42bSwGgvjTqalRKbrFx +h/1ZWLoMk/Zo24XQLOy2AxJVJQUpuqLp3SmsnsL9VgeaiX9bkKJRW2TPJVMruyB4onxlFBHB GPm+QsKyiSvENuwxRJHJNszJZC3ucop7cT2UGR+Vw15AWgUF8zmQ1Inpsb0rDNhlnqwD7mT8T B8TckzzPc0spLvNwhICoNx0+l5k30D6oreQJ1xHEGaXHTuPxeSC4vB/Hk8gFqjCoMDSDqe39Q J0h9rtf0fYx7ljGlS9odk5NCwqrGpXxgzHmjR/Us3xTKpuumeMHsVPQlVQ/GNpNkAJ12vMKKk WuDZubqcVcRPjQF2Rwi8O3l0gAzSWOR6t0YhAUoXIQeArSqdJsrAY/vJTh/ZNEaUzCOTfkWNA 7RT6kt+/nsv6+Y0fcKAP+W+vF0rwRW5EhP7seBgjfm34B3sWbSONLU2dSmLkZ8mdtDKbN3BDQ C7CKtLmX2+Qmwvq+fFLca5lDdylIlp02eRAo1GajDhfPhb/GqkgmkL1YcPw2T9Xn9raxq/fsT HR30Vzj85vIG8IzYU+BOXjvcgIpNLNXaOaPEN6AaNOKx/Z5+uDucckM9umU= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.131 Subject: [Qemu-devel] [PULL 12/17] target/m68k: implement fsave/frestore 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-13-laurent@vivier.eu> --- target/m68k/translate.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index e8f7d07f3f..b8ed85c237 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -5103,28 +5103,35 @@ DISAS_INSN(fscc) #if defined(CONFIG_SOFTMMU) DISAS_INSN(frestore) { - M68kCPU *cpu = m68k_env_get_cpu(env); + TCGv addr; if (IS_USER(s)) { gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } - - /* TODO: Implement frestore. */ - cpu_abort(CPU(cpu), "FRESTORE not implemented"); + if (m68k_feature(s->env, M68K_FEATURE_M68040)) { + SRC_EA(env, addr, OS_LONG, 0, NULL); + /* FIXME: check the state frame */ + } else { + disas_undef(env, s, insn); + } } DISAS_INSN(fsave) { - M68kCPU *cpu = m68k_env_get_cpu(env); - if (IS_USER(s)) { gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } - /* TODO: Implement fsave. */ - cpu_abort(CPU(cpu), "FSAVE not implemented"); + if (m68k_feature(s->env, M68K_FEATURE_M68040)) { + /* always write IDLE */ + TCGv idle = tcg_const_i32(0x41000000); + DEST_EA(env, insn, OS_LONG, idle, NULL); + tcg_temp_free(idle); + } else { + disas_undef(env, s, insn); + } } #endif From patchwork Thu Jan 4 16:42:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855709 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDGh0XJDz9t32 for ; Fri, 5 Jan 2018 03:46:52 +1100 (AEDT) Received: from localhost ([::1]:49958 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8fK-0002rS-1k for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:46:50 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55436) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8be-0007c9-O6 for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bc-0003dt-8x for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:02 -0500 Received: from mout.kundenserver.de ([212.227.126.133]:53421) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8bb-0003b3-NE for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:00 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MBo9r-1eebOn0bIt-00Al3g; Thu, 04 Jan 2018 17:42:58 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:47 +0100 Message-Id: <20180104164251.26494-14-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:+EiCe3YlrjWz6GxAzBNrCGGgBI5uX9IzyL7MmW892gR+/aRYdpd Zbztb/m8zLESS3hOG6vfSQPVvpu8oLS3ds1nKq4k4EVMCxN9dm9yz0mv35P4AFopheVf1YN TiRjJ+amI26DIhC1mCqxvdE6ZrytPQ2pmQaFJ/R7WZUeiJfQ6T9uHbqmZNhYvZNeKpRwcej cxkZya+68LhWjEQgQFhZg== X-UI-Out-Filterresults: notjunk:1; V01:K0:SH3RDRYXJT8=:iEen37kquEKqTBTEtAZo9g tinR8EEHB21Lbh/c3mFDdraD7JNi66jZ0TpI5QhX3G9LvgnDhf9C9LERah0eKNz9r/0gKcdzc JviAXUjocNEJJpWo0rvOZBJt1Fhs2hRB3kFE9wtj/Q3dbZQTYULqzDlFfzlgELHjCuvc6aFMS z4zwuDuh06fX08HOEzv6/1hx2nfaC03wBUh13UNKVEHFr4jf3JjALAXgptAFvi8QKcHg9B0UN KdkIoXluALNgtcFfg79fB2XAiWTca3JPMWxZjh/dLkoxa0TDqkBWl+j/lEMljPskFuAIJFCgW oQybEN3CFtyGRKA2UQi1y4ugWKChjERacPSPOgoprQSuk33VUDsBBulS8p0UxOopKwOhA8/xc oFkfhV1FzttJlUNIu0ERlPYsbVjAsFmPtmUyHu0Knge9Ro9Hxg6CfnbDaHWhp482gb211KK36 bq+4pL6d7hSBgDeSFCEHE41fr6U9Y+8A6IxVnWh7qnhi2fxRE5edarobBX4zCLYiW7ib8+Jb1 ONZYBw7dVFpaPwAdW3Dv9Vqc+cpG1/AgpZD50TcXk+j6ycK8kUuaWwCZMeqFh1HxlUvXL3/Fv 64D+x6GBw7cI0tZo4cBoWkqyc4nCXEUHNJhM5PODjqkLtIiYPg5NtUqDCXT+/XtMZYxktbeeD 4zu5VN7pv2KVD3ZaSx13ZoXiYdZcORGHFAyq17szGi/E4SKuFh9noB8IX7IwLUX8if4iYQQ7d nOj0xXrVawNxh0MK7x99RPgUXCzaaQdXNQT8s8odtrvNvc32S2Pt0wpeIIU= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.133 Subject: [Qemu-devel] [PULL 13/17] target/m68k: move CCR/SR functions 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" The following patches will be clearer if we move functions before adding new ones. Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-14-laurent@vivier.eu> --- target/m68k/translate.c | 111 ++++++++++++++++++++++++------------------------ 1 file changed, 55 insertions(+), 56 deletions(-) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index b8ed85c237..1f867a4f7a 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -2131,6 +2131,61 @@ DISAS_INSN(bitop_im) } } +static TCGv gen_get_ccr(DisasContext *s) +{ + TCGv dest; + + update_cc_op(s); + dest = tcg_temp_new(); + gen_helper_get_ccr(dest, cpu_env); + return dest; +} + +static TCGv gen_get_sr(DisasContext *s) +{ + TCGv ccr; + TCGv sr; + + ccr = gen_get_ccr(s); + sr = tcg_temp_new(); + tcg_gen_andi_i32(sr, QREG_SR, 0xffe0); + tcg_gen_or_i32(sr, sr, ccr); + return sr; +} + +static void gen_set_sr_im(DisasContext *s, uint16_t val, int ccr_only) +{ + if (ccr_only) { + tcg_gen_movi_i32(QREG_CC_C, val & CCF_C ? 1 : 0); + tcg_gen_movi_i32(QREG_CC_V, val & CCF_V ? -1 : 0); + tcg_gen_movi_i32(QREG_CC_Z, val & CCF_Z ? 0 : 1); + tcg_gen_movi_i32(QREG_CC_N, val & CCF_N ? -1 : 0); + tcg_gen_movi_i32(QREG_CC_X, val & CCF_X ? 1 : 0); + } else { + gen_helper_set_sr(cpu_env, tcg_const_i32(val)); + } + set_cc_op(s, CC_OP_FLAGS); +} + +static void gen_set_sr(CPUM68KState *env, DisasContext *s, uint16_t insn, + int ccr_only) +{ + if ((insn & 0x38) == 0) { + if (ccr_only) { + gen_helper_set_ccr(cpu_env, DREG(insn, 0)); + } else { + gen_helper_set_sr(cpu_env, DREG(insn, 0)); + } + set_cc_op(s, CC_OP_FLAGS); + } else if ((insn & 0x3f) == 0x3c) { + uint16_t val; + val = read_im16(env, s); + gen_set_sr_im(s, val, ccr_only); + } else { + disas_undef(env, s, insn); + } +} + DISAS_INSN(arith_im) { int op; @@ -2474,16 +2529,6 @@ DISAS_INSN(clr) tcg_temp_free(zero); } -static TCGv gen_get_ccr(DisasContext *s) -{ - TCGv dest; - - update_cc_op(s); - dest = tcg_temp_new(); - gen_helper_get_ccr(dest, cpu_env); - return dest; -} - DISAS_INSN(move_from_ccr) { TCGv ccr; @@ -2510,40 +2555,6 @@ DISAS_INSN(neg) tcg_temp_free(dest); } -static void gen_set_sr_im(DisasContext *s, uint16_t val, int ccr_only) -{ - if (ccr_only) { - tcg_gen_movi_i32(QREG_CC_C, val & CCF_C ? 1 : 0); - tcg_gen_movi_i32(QREG_CC_V, val & CCF_V ? -1 : 0); - tcg_gen_movi_i32(QREG_CC_Z, val & CCF_Z ? 0 : 1); - tcg_gen_movi_i32(QREG_CC_N, val & CCF_N ? -1 : 0); - tcg_gen_movi_i32(QREG_CC_X, val & CCF_X ? 1 : 0); - } else { - gen_helper_set_sr(cpu_env, tcg_const_i32(val)); - } - set_cc_op(s, CC_OP_FLAGS); -} - -static void gen_set_sr(CPUM68KState *env, DisasContext *s, uint16_t insn, - int ccr_only) -{ - if ((insn & 0x38) == 0) { - if (ccr_only) { - gen_helper_set_ccr(cpu_env, DREG(insn, 0)); - } else { - gen_helper_set_sr(cpu_env, DREG(insn, 0)); - } - set_cc_op(s, CC_OP_FLAGS); - } else if ((insn & 0x3f) == 0x3c) { - uint16_t val; - val = read_im16(env, s); - gen_set_sr_im(s, val, ccr_only); - } else { - disas_undef(env, s, insn); - } -} - - DISAS_INSN(move_to_ccr) { gen_set_sr(env, s, insn, 1); @@ -4359,18 +4370,6 @@ DISAS_INSN(move16_mem) } } -static TCGv gen_get_sr(DisasContext *s) -{ - TCGv ccr; - TCGv sr; - - ccr = gen_get_ccr(s); - sr = tcg_temp_new(); - tcg_gen_andi_i32(sr, QREG_SR, 0xffe0); - tcg_gen_or_i32(sr, sr, ccr); - return sr; -} - DISAS_INSN(strldsr) { uint16_t ext; From patchwork Thu Jan 4 16:42:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855717 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDLS2FB7z9sQm for ; Fri, 5 Jan 2018 03:50:08 +1100 (AEDT) Received: from localhost ([::1]:50006 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8iU-0005vk-Ak for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:50:06 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55445) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8bf-0007d2-1m for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bc-0003ek-QU for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:03 -0500 Received: from mout.kundenserver.de ([212.227.126.133]:57770) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8bc-0003bm-90 for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:00 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0Lfnn4-1fGvt22Cq2-00pLjh; Thu, 04 Jan 2018 17:42:58 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:48 +0100 Message-Id: <20180104164251.26494-15-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:n0RlLXjQNjRJhePxcQCU6u+Y60Fi7cHNFn1ZuijIsokjRYdxdKG xyGOHpbvJGdiGnNkK8wCF1Bajllo/d54q0gi3nArNY5T5SaapF60Nc+7zmxaDmPqfbV0J0w vavHSIUiXbItbfeB644LILVYAdsAD2jOR/JXhLaW6CbAaLvljTqiKQY9qQeUMpK9Ep/XkIP OQpBgWFOaAeW32y+QqBcA== X-UI-Out-Filterresults: notjunk:1; V01:K0:+5Ff4kl1ea4=:tB3ZgAlH3hGLeK7tGhOEe5 ZOKTYbBikMCLWrnEEV5kFlTqz3uQxYHJclLvnKbBuuxOKdKrKy0y4GbS/C4m12QAcebVdKPdq YUq7woUW3uv0foJ5mghVkDEh34V+IDtb2u8x9zpTYHj6MLpHs2rrztrimB/Ur2z5gn0n/0Tes r6f9g2a0ck/juygWIUOarDt91l9SDLQh6quKxnJdBo2Wz5SZp0XEHUh4E5pkRMenWHQxxaze5 Kgb+tJ/uteTl/F14maoSDX4leBOTldt9A033Lc/jfTFdz50MfqwPeJtWiOj0fAHAa+LIOIYw9 K2LsNtxj35KBMbIc/4wwL+xCaWqVpecQPxsWIWs7IAdMhkIctV4EBQU1zIZXf68ylSTk6VqUU wP93VxWJ8SRqJT54JbkC/TdZXr4t4oZzPtyJfAoLuQkxI9NWR0kshst6g0KOk+1R8tlLxNArc AKG8P36rDxM3+fv86w1D9JFWAGorKcBY9M3RTzq3cQlk2KE18gEO5gVIb+zF0BXnRgWxhYH16 q7K9oHnwUptPn3xI9JHFnkWLpxeQXdGYO0IQGRbHL+rMi4gcelwq2FbP8Zm43JpcDh9PhlaWl KOh/Z4JA1eRamb47Xq/6fohKYN36JbkzMH19Bv+hPj8s18xA2r9HOBjfvBNyFWxqrksxY0qbn U80b/DAIfjPUKpT8MEX44rnOxZChqI8FKEJP4cB3nWlZrIza4n2IzvcEZr0g5IHUuSXGBv9vi IhSz/A5Z3sTOnItIdKrDzIYs8MTZ0ymBTeOMXiMVNmvm23IMqdpWzLwjvy8= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.133 Subject: [Qemu-devel] [PULL 14/17] target/m68k: add 680x0 "move to SR" instruction 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Some cleanup, and allows SR to be moved from any addressing mode. Previous code was wrong for coldfire: coldfire also allows to use addressing mode to set SR/CCR. It only supports Data register to get SR/CCR (move from) Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-15-laurent@vivier.eu> --- target/m68k/translate.c | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 1f867a4f7a..8f23cade04 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -2162,27 +2162,34 @@ static void gen_set_sr_im(DisasContext *s, uint16_t val, int ccr_only) tcg_gen_movi_i32(QREG_CC_N, val & CCF_N ? -1 : 0); tcg_gen_movi_i32(QREG_CC_X, val & CCF_X ? 1 : 0); } else { - gen_helper_set_sr(cpu_env, tcg_const_i32(val)); + TCGv sr = tcg_const_i32(val); + gen_helper_set_sr(cpu_env, sr); + tcg_temp_free(sr); } set_cc_op(s, CC_OP_FLAGS); } -static void gen_set_sr(CPUM68KState *env, DisasContext *s, uint16_t insn, - int ccr_only) +static void gen_set_sr(DisasContext *s, TCGv val, int ccr_only) { - if ((insn & 0x38) == 0) { - if (ccr_only) { - gen_helper_set_ccr(cpu_env, DREG(insn, 0)); - } else { - gen_helper_set_sr(cpu_env, DREG(insn, 0)); - } - set_cc_op(s, CC_OP_FLAGS); - } else if ((insn & 0x3f) == 0x3c) { + if (ccr_only) { + gen_helper_set_ccr(cpu_env, val); + } else { + gen_helper_set_sr(cpu_env, val); + } + set_cc_op(s, CC_OP_FLAGS); +} + +static void gen_move_to_sr(CPUM68KState *env, DisasContext *s, uint16_t insn, + bool ccr_only) +{ + if ((insn & 0x3f) == 0x3c) { uint16_t val; val = read_im16(env, s); gen_set_sr_im(s, val, ccr_only); } else { - disas_undef(env, s, insn); + TCGv src; + SRC_EA(env, src, OS_WORD, 0, NULL); + gen_set_sr(s, src, ccr_only); } } @@ -2557,7 +2564,7 @@ DISAS_INSN(neg) DISAS_INSN(move_to_ccr) { - gen_set_sr(env, s, insn, 1); + gen_move_to_sr(env, s, insn, true); } DISAS_INSN(not) @@ -4409,7 +4416,7 @@ DISAS_INSN(move_to_sr) gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } - gen_set_sr(env, s, insn, 0); + gen_move_to_sr(env, s, insn, false); gen_lookup_tb(s); } @@ -5556,9 +5563,8 @@ void register_m68k_insns (CPUM68KState *env) BASE(move_to_ccr, 44c0, ffc0); INSN(not, 4680, fff8, CF_ISA_A); INSN(not, 4600, ff00, M68000); - INSN(undef, 46c0, ffc0, M68000); #if defined(CONFIG_SOFTMMU) - INSN(move_to_sr, 46c0, ffc0, CF_ISA_A); + BASE(move_to_sr, 46c0, ffc0); #endif INSN(nbcd, 4800, ffc0, M68000); INSN(linkl, 4808, fff8, M68000); From patchwork Thu Jan 4 16:42:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855722 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDQv0jzmz9s7G for ; Fri, 5 Jan 2018 03:53:59 +1100 (AEDT) Received: from localhost ([::1]:50238 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8mD-0001oi-67 for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:53:57 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55437) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8be-0007cA-Od for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bc-0003ew-TO for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:02 -0500 Received: from mout.kundenserver.de ([212.227.126.135]:53387) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8bc-0003cO-Fh for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:00 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MNyIR-1eZ2Ph3iV1-007SDE; Thu, 04 Jan 2018 17:42:59 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:49 +0100 Message-Id: <20180104164251.26494-16-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:Pib3V+dC3az0vFKk9nRgaqYMR03FjrtcsWRYrcdcsrhKxOiOpmd 6ZzoxZr+v8UTsv2DuHk9WeRLHLbvem1s/P3wcvDshjXqAe6Atc2VlHV5U2untOlpDT2a/a4 p42oyEJRZmR3M9EFVJLfyckLxZX91Pt/5s5bxC6cCoJTqB3awZcYQ9UuGT9xHc6EvzxgTEb KkAVyVya8BrQqpS+vAo4Q== X-UI-Out-Filterresults: notjunk:1; V01:K0:l6kBbbrGHsE=:vFFHZtxFNjyeHNVsTuIfKh hGw2EHQ9a5T5rFpErPqKy5azcNM1mws//xB2Mbwj0vFz2ceky1ITjInPjnPCECbVIgrhJK6Q8 FTHuv2cVnOp+DkenbZzwai18vfIy9f9ZB2Ye3P97KUYiLnxiJ/wI9r8be7D5m5ug9KJVyN9H8 HhShWCKLrTpYAG6N57BmAHt/S9cIBkB3rKqOo4K7EUXwLdraMPiCCcg0v9gIzvVp8d/KKynnx +OJf4v7MSm774hKH9r2aqNqHVnDW/dWiEBPLtAEhpgCdKKqTwk6fHHGh9T8XNQsHyCH9XqlVy rmcccLSnWcfdswkNnaifhcHy2RnHn2CjW8SflpulHEMX3amsmP7JFTnbByIUqDA1/slAOQo3r zsCmJjvoMpMiTIyJfkSmgjJDQKsHYYMKx9cw49rwrRYT0SpIOCuq9gKSLNXlz8Xrd55kSCtbS fI7d6uz3fxwsfzrJuojp503jJe5hNf7eRPM6Hft3d2QijQJKRqjXITo6rmU7eocsjKqRC8lt+ tGhYxO37x05XIA7uHUZeVVJY3HKWnn0I1J7gYQuKLa8mkoRcmP206wA1FzDHQ092kpEWY26Ci KXEhKBCqqKoneoCtlFyB9pHyRX2KRu9QwvEnZTWv5IGpG9wXs5TX1ljelufoOGF9H1ZRoS671 mHnYlBdj4DjQ9nERcKfpiaua2M1g6SY2X2KBKqeI2hDRad3RktgwlmXTvEwWgoKMdfRaCCf3i TY9jqhJcA2PFIwCZgAhRgSiT6yWv3bD5PelmMTxB8jpAK+LWiQi85gU3ymA= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.135 Subject: [Qemu-devel] [PULL 15/17] target/m68k: add andi/ori/eori to SR/CCR 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-16-laurent@vivier.eu> --- target/m68k/translate.c | 53 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 8f23cade04..499aaa2f3d 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -2201,6 +2201,7 @@ DISAS_INSN(arith_im) TCGv dest; TCGv addr; int opsize; + bool with_SR = ((insn & 0x3f) == 0x3c); op = (insn >> 9) & 7; opsize = insn_opsize(insn); @@ -2217,32 +2218,73 @@ DISAS_INSN(arith_im) default: abort(); } - SRC_EA(env, src1, opsize, 1, (op == 6) ? NULL : &addr); + + if (with_SR) { + /* SR/CCR can only be used with andi/eori/ori */ + if (op == 2 || op == 3 || op == 6) { + disas_undef(env, s, insn); + return; + } + switch (opsize) { + case OS_BYTE: + src1 = gen_get_ccr(s); + break; + case OS_WORD: + if (IS_USER(s)) { + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); + return; + } + src1 = gen_get_sr(s); + break; + case OS_LONG: + disas_undef(env, s, insn); + return; + } + } else { + SRC_EA(env, src1, opsize, 1, (op == 6) ? NULL : &addr); + } dest = tcg_temp_new(); switch (op) { case 0: /* ori */ tcg_gen_or_i32(dest, src1, im); - gen_logic_cc(s, dest, opsize); + if (with_SR) { + gen_set_sr(s, dest, opsize == OS_BYTE); + } else { + DEST_EA(env, insn, opsize, dest, &addr); + gen_logic_cc(s, dest, opsize); + } break; case 1: /* andi */ tcg_gen_and_i32(dest, src1, im); - gen_logic_cc(s, dest, opsize); + if (with_SR) { + gen_set_sr(s, dest, opsize == OS_BYTE); + } else { + DEST_EA(env, insn, opsize, dest, &addr); + gen_logic_cc(s, dest, opsize); + } break; case 2: /* subi */ tcg_gen_setcond_i32(TCG_COND_LTU, QREG_CC_X, src1, im); tcg_gen_sub_i32(dest, src1, im); gen_update_cc_add(dest, im, opsize); set_cc_op(s, CC_OP_SUBB + opsize); + DEST_EA(env, insn, opsize, dest, &addr); break; case 3: /* addi */ tcg_gen_add_i32(dest, src1, im); gen_update_cc_add(dest, im, opsize); tcg_gen_setcond_i32(TCG_COND_LTU, QREG_CC_X, dest, im); set_cc_op(s, CC_OP_ADDB + opsize); + DEST_EA(env, insn, opsize, dest, &addr); break; case 5: /* eori */ tcg_gen_xor_i32(dest, src1, im); - gen_logic_cc(s, dest, opsize); + if (with_SR) { + gen_set_sr(s, dest, opsize == OS_BYTE); + } else { + DEST_EA(env, insn, opsize, dest, &addr); + gen_logic_cc(s, dest, opsize); + } break; case 6: /* cmpi */ gen_update_cc_cmp(s, src1, im, opsize); @@ -2251,9 +2293,6 @@ DISAS_INSN(arith_im) abort(); } tcg_temp_free(im); - if (op != 6) { - DEST_EA(env, insn, opsize, dest, &addr); - } tcg_temp_free(dest); } From patchwork Thu Jan 4 16:42:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855725 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDV76CFCz9t32 for ; Fri, 5 Jan 2018 03:56:47 +1100 (AEDT) Received: from localhost ([::1]:50305 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8ow-0004iq-0u for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:56:46 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55523) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8bh-0007gE-Ks for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bd-0003fp-Gh for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:05 -0500 Received: from mout.kundenserver.de ([212.227.126.134]:54411) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8bd-0003df-08 for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:01 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0Mgrgq-1eJqwV13om-00M5iR; Thu, 04 Jan 2018 17:42:59 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:50 +0100 Message-Id: <20180104164251.26494-17-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:btJxjgwgtlHO6lL7Gg2vS8lHCfYNOb7jtkLbbut90v9q+6foSSt GBWFnTkkafzL3gcNpt5gz5Hqugjkhb+UhARc/JXvfHrhPz6PcGSvUvFJzwDWPZqzFScvmk/ FZA5Hq143cExzpBOnejuHH5oHdiYh/W2vWnVIAgOCcjqKFUnoXGBxynztpDKEnp0VsG7ATo zC/2d9l9soNE7kaCPNqRw== X-UI-Out-Filterresults: notjunk:1; V01:K0:XcXOyE2hpyY=:/jNsBDAQlIg4MN1NHoeYZH /rphy4LhtZr2Bq4BEnDYEG1zjE3Kvdv/Csvp2ztN2HlWAxjrP3Qej/Ba9UtFrs+JMG8fbMtfh 4OpmA8Z5UOrlGS9CX9q0C5nNbUoMYw3q5/mKK39yBVjY0AlmZAkDR4l7k4CsRqmhPfnkjEFv5 3kxpyS4G4v0xIR/br41MVt8F6eLV1u1RTIjWCNt/VW8exz1dJ8Mi9BwxSz0t9sSKKbmIAAIDR H9BQMh+mi+GM26qMlmWkgrSqzLxbYA7l989HJmS16JUmwZO2mVdJto2ySfkOwzDoE+1iG/RLF JBJVpYVqU6XaojlBcmh4StA+iyxor0aPdkEh8wD6ZwgqVA0mSMHRr1O2zMfNmCHWNKyvkQuST TB/nZ1toB71QHrhoGmaYhKdSKiyil8Ti7t7JyvISAMQEGfHm9k8uyLzc8656oNYDOrDLoH8+o CKTgb5HUUrJaCfSdbcG+v8FYW9SJ/O1TAWsRjdsSp+guHQc7CytlPcV3LE1934bY/t/Y5/JIf b1EvmW8kLMXk556blmM+VzhXVWX6Ecyd2nar+zENjMtjHblV7yzXyDmdMOI+snD7sm/ae7UlT jPybk1sAHYnb+/UMlbjExqFIQdApL5OdfygaL+vH3TeLFtjt2bRhZKAnUd8Us+wjUymFyPE/5 EFJ4S9AWHSYRqVpqcBG3MejQKn/I7M59EgtJ4TiQBdz5l9zxn3a9UHxey1rSQi/2XtlBnv6z+ xAHreqRN6v35gnHezr7dEZz2x4ldj3w96IoMo9ipjZs9tVfVt2qMnnJzYKM= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.134 Subject: [Qemu-devel] [PULL 16/17] target/m68k: add the Interrupt Stack Pointer 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add the third stack pointer, the Interrupt Stack Pointer (ISP) (680x0 only). This stack will be needed in softmmu mode. Update movec to set/get the value of the three stacks. Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-17-laurent@vivier.eu> --- target/m68k/cpu.c | 8 ++--- target/m68k/cpu.h | 70 ++++++++++++++++++++++++++++++++++++++++- target/m68k/gdbstub.c | 2 +- target/m68k/helper.c | 82 ++++++++++++++++++++++++++++++++++++++++++++----- target/m68k/helper.h | 4 ++- target/m68k/monitor.c | 1 + target/m68k/translate.c | 40 ++++++++++++++++++++++-- 7 files changed, 190 insertions(+), 17 deletions(-) diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c index 1936efd170..03126ba543 100644 --- a/target/m68k/cpu.c +++ b/target/m68k/cpu.c @@ -55,17 +55,17 @@ static void m68k_cpu_reset(CPUState *s) mcc->parent_reset(s); memset(env, 0, offsetof(CPUM68KState, end_reset_fields)); -#if !defined(CONFIG_USER_ONLY) - env->sr = 0x2700; +#ifdef CONFIG_SOFTMMU + cpu_m68k_set_sr(env, SR_S | SR_I); +#else + cpu_m68k_set_sr(env, 0); #endif - m68k_switch_sp(env); for (i = 0; i < 8; i++) { env->fregs[i].d = nan; } cpu_m68k_set_fpcr(env, 0); env->fpsr = 0; - cpu_m68k_set_ccr(env, 0); /* TODO: We should set PC from the interrupt vector. */ env->pc = 0; } diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h index 2ac4ab191e..759b30d389 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -89,7 +89,7 @@ typedef struct CPUM68KState { /* SSP and USP. The current_sp is stored in aregs[7], the other here. */ int current_sp; - uint32_t sp[2]; + uint32_t sp[3]; /* Condition flags. */ uint32_t cc_op; @@ -223,6 +223,74 @@ typedef enum { #define M68K_SSP 0 #define M68K_USP 1 +#define M68K_ISP 2 + +/* m68k Control Registers */ + +/* ColdFire */ +/* Memory Management Control Registers */ +#define M68K_CR_ASID 0x003 +#define M68K_CR_ACR0 0x004 +#define M68K_CR_ACR1 0x005 +#define M68K_CR_ACR2 0x006 +#define M68K_CR_ACR3 0x007 +#define M68K_CR_MMUBAR 0x008 + +/* Processor Miscellaneous Registers */ +#define M68K_CR_PC 0x80F + +/* Local Memory and Module Control Registers */ +#define M68K_CR_ROMBAR0 0xC00 +#define M68K_CR_ROMBAR1 0xC01 +#define M68K_CR_RAMBAR0 0xC04 +#define M68K_CR_RAMBAR1 0xC05 +#define M68K_CR_MPCR 0xC0C +#define M68K_CR_EDRAMBAR 0xC0D +#define M68K_CR_SECMBAR 0xC0E +#define M68K_CR_MBAR 0xC0F + +/* Local Memory Address Permutation Control Registers */ +#define M68K_CR_PCR1U0 0xD02 +#define M68K_CR_PCR1L0 0xD03 +#define M68K_CR_PCR2U0 0xD04 +#define M68K_CR_PCR2L0 0xD05 +#define M68K_CR_PCR3U0 0xD06 +#define M68K_CR_PCR3L0 0xD07 +#define M68K_CR_PCR1U1 0xD0A +#define M68K_CR_PCR1L1 0xD0B +#define M68K_CR_PCR2U1 0xD0C +#define M68K_CR_PCR2L1 0xD0D +#define M68K_CR_PCR3U1 0xD0E +#define M68K_CR_PCR3L1 0xD0F + +/* MC680x0 */ +/* MC680[1234]0/CPU32 */ +#define M68K_CR_SFC 0x000 +#define M68K_CR_DFC 0x001 +#define M68K_CR_USP 0x800 +#define M68K_CR_VBR 0x801 /* + Coldfire */ + +/* MC680[234]0 */ +#define M68K_CR_CACR 0x002 /* + Coldfire */ +#define M68K_CR_CAAR 0x802 /* MC68020 and MC68030 only */ +#define M68K_CR_MSP 0x803 +#define M68K_CR_ISP 0x804 + +/* MC68040/MC68LC040 */ +#define M68K_CR_TC 0x003 +#define M68K_CR_ITT0 0x004 +#define M68K_CR_ITT1 0x005 +#define M68K_CR_DTT0 0x006 +#define M68K_CR_DTT1 0x007 +#define M68K_CR_MMUSR 0x805 +#define M68K_CR_URP 0x806 +#define M68K_CR_SRP 0x807 + +/* MC68EC040 */ +#define M68K_CR_IACR0 0x004 +#define M68K_CR_IACR1 0x005 +#define M68K_CR_DACR0 0x006 +#define M68K_CR_DACR1 0x007 #define M68K_FPIAR_SHIFT 0 #define M68K_FPIAR (1 << M68K_FPIAR_SHIFT) diff --git a/target/m68k/gdbstub.c b/target/m68k/gdbstub.c index c7f44c9bb3..99e5be8132 100644 --- a/target/m68k/gdbstub.c +++ b/target/m68k/gdbstub.c @@ -63,7 +63,7 @@ int m68k_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n) } else { switch (n) { case 16: - env->sr = tmp; + cpu_m68k_set_sr(env, tmp); break; case 17: env->pc = tmp; diff --git a/target/m68k/helper.c b/target/m68k/helper.c index 52b054e1a3..a999389e9a 100644 --- a/target/m68k/helper.c +++ b/target/m68k/helper.c @@ -171,28 +171,84 @@ void m68k_cpu_init_gdb(M68kCPU *cpu) /* TODO: Add [E]MAC registers. */ } -void HELPER(movec)(CPUM68KState *env, uint32_t reg, uint32_t val) +void HELPER(cf_movec_to)(CPUM68KState *env, uint32_t reg, uint32_t val) { M68kCPU *cpu = m68k_env_get_cpu(env); switch (reg) { - case 0x02: /* CACR */ + case M68K_CR_CACR: env->cacr = val; m68k_switch_sp(env); break; - case 0x04: case 0x05: case 0x06: case 0x07: /* ACR[0-3] */ + case M68K_CR_ACR0: + case M68K_CR_ACR1: + case M68K_CR_ACR2: + case M68K_CR_ACR3: /* TODO: Implement Access Control Registers. */ break; - case 0x801: /* VBR */ + case M68K_CR_VBR: env->vbr = val; break; /* TODO: Implement control registers. */ default: - cpu_abort(CPU(cpu), "Unimplemented control register write 0x%x = 0x%x\n", + cpu_abort(CPU(cpu), + "Unimplemented control register write 0x%x = 0x%x\n", reg, val); } } +void HELPER(m68k_movec_to)(CPUM68KState *env, uint32_t reg, uint32_t val) +{ + M68kCPU *cpu = m68k_env_get_cpu(env); + + switch (reg) { + /* MC680[1234]0 */ + case M68K_CR_VBR: + env->vbr = val; + return; + /* MC680[234]0 */ + case M68K_CR_CACR: + env->cacr = val; + m68k_switch_sp(env); + return; + /* MC680[34]0 */ + case M68K_CR_USP: + env->sp[M68K_USP] = val; + return; + case M68K_CR_MSP: + env->sp[M68K_SSP] = val; + return; + case M68K_CR_ISP: + env->sp[M68K_ISP] = val; + return; + } + cpu_abort(CPU(cpu), "Unimplemented control register write 0x%x = 0x%x\n", + reg, val); +} + +uint32_t HELPER(m68k_movec_from)(CPUM68KState *env, uint32_t reg) +{ + M68kCPU *cpu = m68k_env_get_cpu(env); + + switch (reg) { + /* MC680[1234]0 */ + case M68K_CR_VBR: + return env->vbr; + /* MC680[234]0 */ + case M68K_CR_CACR: + return env->cacr; + /* MC680[34]0 */ + case M68K_CR_USP: + return env->sp[M68K_USP]; + case M68K_CR_MSP: + return env->sp[M68K_SSP]; + case M68K_CR_ISP: + return env->sp[M68K_ISP]; + } + cpu_abort(CPU(cpu), "Unimplemented control register read 0x%x\n", + reg); +} + void HELPER(set_macsr)(CPUM68KState *env, uint32_t val) { uint32_t acc; @@ -232,8 +288,20 @@ void m68k_switch_sp(CPUM68KState *env) int new_sp; env->sp[env->current_sp] = env->aregs[7]; - new_sp = (env->sr & SR_S && env->cacr & M68K_CACR_EUSP) - ? M68K_SSP : M68K_USP; + if (m68k_feature(env, M68K_FEATURE_M68000)) { + if (env->sr & SR_S) { + if (env->sr & SR_M) { + new_sp = M68K_SSP; + } else { + new_sp = M68K_ISP; + } + } else { + new_sp = M68K_USP; + } + } else { + new_sp = (env->sr & SR_S && env->cacr & M68K_CACR_EUSP) + ? M68K_SSP : M68K_USP; + } env->aregs[7] = env->sp[new_sp]; env->current_sp = new_sp; } diff --git a/target/m68k/helper.h b/target/m68k/helper.h index d27ea37d60..57f210aa14 100644 --- a/target/m68k/helper.h +++ b/target/m68k/helper.h @@ -8,7 +8,9 @@ DEF_HELPER_4(divsl, void, env, int, int, s32) DEF_HELPER_4(divull, void, env, int, int, i32) DEF_HELPER_4(divsll, void, env, int, int, s32) DEF_HELPER_2(set_sr, void, env, i32) -DEF_HELPER_3(movec, void, env, i32, i32) +DEF_HELPER_3(cf_movec_to, void, env, i32, i32) +DEF_HELPER_3(m68k_movec_to, void, env, i32, i32) +DEF_HELPER_2(m68k_movec_from, i32, env, i32) DEF_HELPER_4(cas2w, void, env, i32, i32, i32) DEF_HELPER_4(cas2l, void, env, i32, i32, i32) DEF_HELPER_4(cas2l_parallel, void, env, i32, i32, i32) diff --git a/target/m68k/monitor.c b/target/m68k/monitor.c index 5605323a81..52781e85f0 100644 --- a/target/m68k/monitor.c +++ b/target/m68k/monitor.c @@ -30,6 +30,7 @@ static const MonitorDef monitor_defs[] = { { "sr", offsetof(CPUM68KState, sr) }, { "ssp", offsetof(CPUM68KState, sp[0]) }, { "usp", offsetof(CPUM68KState, sp[1]) }, + { "isp", offsetof(CPUM68KState, sp[2]) }, { NULL }, }; diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 499aaa2f3d..4d5173c4be 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -4514,7 +4514,7 @@ DISAS_INSN(rte) gen_exception(s, s->insn_pc, EXCP_RTE); } -DISAS_INSN(movec) +DISAS_INSN(cf_movec) { uint16_t ext; TCGv reg; @@ -4531,7 +4531,32 @@ DISAS_INSN(movec) } else { reg = DREG(ext, 12); } - gen_helper_movec(cpu_env, tcg_const_i32(ext & 0xfff), reg); + gen_helper_cf_movec_to(cpu_env, tcg_const_i32(ext & 0xfff), reg); + gen_lookup_tb(s); +} + +DISAS_INSN(m68k_movec) +{ + uint16_t ext; + TCGv reg; + + if (IS_USER(s)) { + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); + return; + } + + ext = read_im16(env, s); + + if (ext & 0x8000) { + reg = AREG(ext, 12); + } else { + reg = DREG(ext, 12); + } + if (insn & 1) { + gen_helper_m68k_movec_to(cpu_env, tcg_const_i32(ext & 0xfff), reg); + } else { + gen_helper_m68k_movec_from(reg, cpu_env, tcg_const_i32(ext & 0xfff)); + } gen_lookup_tb(s); } @@ -5638,7 +5663,8 @@ void register_m68k_insns (CPUM68KState *env) INSN(reset, 4e70, ffff, M68000); BASE(stop, 4e72, ffff); BASE(rte, 4e73, ffff); - INSN(movec, 4e7b, ffff, CF_ISA_A); + INSN(cf_movec, 4e7b, ffff, CF_ISA_A); + INSN(m68k_movec, 4e7a, fffe, M68000); #endif BASE(nop, 4e71, ffff); INSN(rtd, 4e74, ffff, RTD); @@ -5945,6 +5971,14 @@ void m68k_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf, cpu_fprintf(f, "RP "); break; } + cpu_fprintf(f, "\n"); +#ifdef CONFIG_SOFTMMU + cpu_fprintf(f, "%sA7(MSP) = %08x %sA7(USP) = %08x %sA7(ISP) = %08x\n", + env->current_sp == M68K_SSP ? "->" : " ", env->sp[M68K_SSP], + env->current_sp == M68K_USP ? "->" : " ", env->sp[M68K_USP], + env->current_sp == M68K_ISP ? "->" : " ", env->sp[M68K_ISP]); + cpu_fprintf(f, "VBR = 0x%08x\n", env->vbr); +#endif } void restore_state_to_opc(CPUM68KState *env, TranslationBlock *tb, From patchwork Thu Jan 4 16:42:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 855724 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) 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 3zCDTz2qk4z9s7G for ; Fri, 5 Jan 2018 03:56:39 +1100 (AEDT) Received: from localhost ([::1]:50303 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8on-0004X2-Ag for incoming@patchwork.ozlabs.org; Thu, 04 Jan 2018 11:56:37 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55459) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eX8bf-0007dq-DZ for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eX8bd-0003gN-Nr for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:03 -0500 Received: from mout.kundenserver.de ([212.227.126.135]:60482) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eX8bd-0003e8-BV for qemu-devel@nongnu.org; Thu, 04 Jan 2018 11:43:01 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0M1CHs-1emb3j3V5k-00tDcF; Thu, 04 Jan 2018 17:43:00 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 17:42:51 +0100 Message-Id: <20180104164251.26494-18-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104164251.26494-1-laurent@vivier.eu> References: <20180104164251.26494-1-laurent@vivier.eu> X-Provags-ID: V03:K0:DbCg64bDG7j2yg03BRv60lM+tLRrQqMcQnryGrZGmHJ13brCBWK 70kSgsGMQLLeDd0PZi2xhhIu9jMo5nwlW+GCvwoH1JIoP3mDVjjyBgxvNULKfvrCUo8p8d6 hBwCxnzWb1KbRUyc4JzdKoA2Jk5Sz4iYKcm0cVXthh8F7jA8+EKDXkP79xDcaKbEjSyRSbV Df40xCOImxZQN/vh124uA== X-UI-Out-Filterresults: notjunk:1; V01:K0:whrYWbCVg/E=:W8PDk7DfmKVUJX0Wj0f2fZ tBS6RlY/IaYXtz5c6gplWWgit9/4LYPspgk/33sWydm51JSfNNdgu84tHTmhof9sha2A00v6U CvmXYcyKXx/ajszc/aG+EDVfpw9u9JnuQGQz86ODHR6gVFtLtD9kYxCx8NGS6z+zN76taR1Jp YehGTq9B9iSPi25n9dZ2/qhiBBBvOl5mYTiQiAcrU1CJYcJiBk3PRdS2O6mn2sWw+Xjmn5Zuw nOKdg4h5UkraJTTtFzAkfEuGfGjgBsNX/74WwdNWPtST4lK/lZ2AltDiEA0fbocoENpuZfWdf mdXq5LyO6HUxA42YaHHYJFcSqcgkBH5fq7RqrZbjFj/IOuh4/jv5DpqpPHqkjobNBbTSyhmac RX119Hp7Q1oBnH09GG9CHhH+feuLHQMNhJftVa9fTRQ57Uf3qTiXBLcTZLgiO3BFvx/8FdT+J cmeHA4TkOc/YeKsbkDTSRB0VhUAFLH3CSAuo4y0JmNYAe+IgEmTIROs3a/mYUcQxYfL5YmzJW DyUc8UcLJk9ZaNM+6Xq5srjI51M+QpKbdGiTYEb4+ZYItPktzKCAHiCgaj4P607y2r6U2jJKF 7JxIzJCFVdz2dFUPwPO2T93+w7a7nlZbE2Z+ikZcQ1+yleQCLKLfi+pIbfXtPwfHAksC201cx 1PxLoAkLJiO5LBLBCNkXxCKRHWq47V8tWeNqvjbYr1woGmvTvNSLuZUOFIGgua5pKdeeOCPjw P7m7sFT94YxF1ktQfYY+3dEdE5B4nJw/msms4hCu2tTVYTu0mOhJLuODk5k= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.135 Subject: [Qemu-devel] [PULL 17/17] target/m68k: fix m68k_cpu_dump_state() 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 Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Display correctly the Trace bits for 680x0 (2 bits instead of 1 for Coldfire). Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Message-Id: <20180104012913.30763-18-laurent@vivier.eu> --- target/m68k/cpu.h | 3 ++- target/m68k/translate.c | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h index 759b30d389..2985b039e1 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -219,7 +219,8 @@ typedef enum { #define SR_I 0x0700 #define SR_M 0x1000 #define SR_S 0x2000 -#define SR_T 0x8000 +#define SR_T_SHIFT 14 +#define SR_T 0xc000 #define M68K_SSP 0 #define M68K_USP 1 diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 4d5173c4be..4a6d799ee2 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -5936,9 +5936,12 @@ void m68k_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf, } cpu_fprintf (f, "PC = %08x ", env->pc); sr = env->sr | cpu_m68k_get_ccr(env); - cpu_fprintf(f, "SR = %04x %c%c%c%c%c ", sr, (sr & CCF_X) ? 'X' : '-', - (sr & CCF_N) ? 'N' : '-', (sr & CCF_Z) ? 'Z' : '-', - (sr & CCF_V) ? 'V' : '-', (sr & CCF_C) ? 'C' : '-'); + cpu_fprintf(f, "SR = %04x T:%x I:%x %c%c %c%c%c%c%c\n", + sr, (sr & SR_T) >> SR_T_SHIFT, (sr & SR_I) >> SR_I_SHIFT, + (sr & SR_S) ? 'S' : 'U', (sr & SR_M) ? '%' : 'I', + (sr & CCF_X) ? 'X' : '-', (sr & CCF_N) ? 'N' : '-', + (sr & CCF_Z) ? 'Z' : '-', (sr & CCF_V) ? 'V' : '-', + (sr & CCF_C) ? 'C' : '-'); cpu_fprintf(f, "FPSR = %08x %c%c%c%c ", env->fpsr, (env->fpsr & FPSR_CC_A) ? 'A' : '-', (env->fpsr & FPSR_CC_I) ? 'I' : '-',