From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514855711767686.0665397675131; Mon, 1 Jan 2018 17:15:11 -0800 (PST) Received: from localhost ([::1]:50768 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWBAc-0004lI-NB for importer@patchew.org; Mon, 01 Jan 2018 20:15:10 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35951) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6I-0001Vb-00 for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:43 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6E-00052A-Q4 for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:41 -0500 Received: from mout.kundenserver.de ([212.227.126.130]:53931) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6E-00050g-Fp for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:38 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0Lle2C-1f5Err1Lwe-00ZRlT; Tue, 02 Jan 2018 02:10:35 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:16 +0100 Message-Id: <20180102011032.30056-2-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:wOgEH0QpWWCaI1mpfjCqluVfJ7Y+HWtbOvPUTonwOaPmF12BoJx LVb6K+NwPFMvY2vN6c+zNdPRaK8+O3Q3RqQyPqW1gEp4crlVLsJcahpDgoY/qge27ksSlFM g4wL8xE2rACQzj4M2y+zErfwyj4Z2TzzL2QEyWR/dsa2th77gbOS+v6bX3eGSU7pGvlRE40 +xs/wBqnmDswCNhNVW8Yg== X-UI-Out-Filterresults: notjunk:1;V01:K0:VTWWjcND2Ws=:oH50m32eI68Et4t4DTz6L4 u2QpQZsZc1HM50M6vxRaQcvdGBbMYsbFFb48/k0UfhTaaGqaZcpCtxw7yJqI5x0jUyIJHJU2T zPMBxnlKcuaG/pGPKpKfQEe4qnhsB7Uh38lnxjlhmgS8/Xx/lsBwdZdvZnc+b8Hmn/vZ1iP/+ XsJitxOfGOOIqi1eYZScVMUZWOkgQNaAT50LwySkFiF0DsEdKNb+PS8Z5ZOVZJJM2Enz6D9qa IEsa2VB01XeHyu1hDKjUoAvLVaXsz8ERFOIsCfzqajMF9euJiaSB9jqFb6ptXiLxWSQCztqGt Ru7PeoBEPMg5g7LVUO/yYG35+KcGTYmFtMdacP+XipVIN/o7kwabTCBmHR3Th6ZGxGG43bTfy saokllxV8c5Vj8/5kLgFC2QPaSoGJQRtlzzBaCRMwwmBGNXCm1iQwU/HwHd3vPlhcBH5PJ2MG Y6erI3IkzJB7DC5wbwEchfk6JAFPDBhmCxXY/BTnUBwnUM8okVoxBTn71LRLf17GyqXrKwf6Q /JPw0jMz0PxhubLZZtuKOT6CTPUzi3siIwQKVt7Tw9UHkIydZ415IYT8PpsNqO5R039PpEofF boA32pI353GKwb6oroQjxNQb2B/JpFP3fEenGcwkPlu8YPOA1QQSsG1a3XehVcug0f5/iIyAm JDSpIHq3XruN8rSsM/1RfBPJCCFGvkhHfS6tsSEEBtGGwJNCCBePCjpZx30++KSUiYg1fbnff anqxs4ZPqZcxSlXqvlczgxRmO/4YidPCagVk1w== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 --- 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) =20 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, TCG= Label *l1) DisasCompare c; =20 gen_fcc_cond(&c, s, cond); + update_cc_op(s); tcg_gen_brcond_i32(c.tcond, c.v1, c.v2, l1); free_cond(&c); } --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514855577395486.6197788235286; Mon, 1 Jan 2018 17:12:57 -0800 (PST) Received: from localhost ([::1]:50736 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB8G-0002fb-AA for importer@patchew.org; Mon, 01 Jan 2018 20:12:44 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35962) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6I-0001Vf-1R for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:43 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6E-00051t-Mr for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:41 -0500 Received: from mout.kundenserver.de ([212.227.126.130]:61982) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6E-00050i-DZ for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:38 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MfN1e-1eG8YL3Akc-00OnjV; Tue, 02 Jan 2018 02:10:35 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:17 +0100 Message-Id: <20180102011032.30056-3-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:wRxNSyvS/23E4/VvV1/Y9ivJ+gTSdRpCJDEpR7xGm5ER04ovD03 553OwIigs58c/9nweW7AWnvZWK8Y/OaMiOpBKzJKstjGnXZcaznHYOTbOdOlQ7ZWKYz+xXp sQr68aTjd6EO0kFJG43/0deOBdCRv5AUO0a9q52hd1lJ7HBvgUl7x92fVtygs3Hk+VHjDw8 xAsbrbuPSl8+PFe+nb5sA== X-UI-Out-Filterresults: notjunk:1;V01:K0:tF8g6kTulrE=:7/iLArFnrxr5BKqC8ygFHf JnnoffP/QqGZd1sk41LYocMKDjW+iyqRt8gXrmcRyHIhPjc8cOSTN9azFQnIOZOojlNoxu962 wKgj7QADiW0sS2PyG3aaU4SR/1hq/qUuScKvunCk/wZwL6mXLLxZ8p7EbThYxferi6PkMmvXq 1gk1u5r3QN5xwjzXMMd2il6x/CpHK1QPBasFAoTo1a/rNmeO3Gs/5qZbUoj8rH9GEtxJQxPZh C5O2A4hmOiWEDZJOh3EEJYklaIyueSjbeaxRBeg53sxxD8r+9znUek5Mo7XdIvR9pX9KMsVnW ets+pLBwFK1qPz7rdwq3z9uvOZ4RjuQ+4z2nhoVldAFe9Nj8J6MPdVUDd0Kc/4rbRb4XSfDFO okcuyRp+8jPBZxOlG8GnnAvtecDN1qhV/LZuaeZl/Gc+aqg2osoD1udS1gOoC7xRvMVLmniS+ 0tWZ6nXaE/SwzU5NFonx8MibJHEe7l13vr9W1KdDS1FzbDaSks3giRlxWitbHGeq88aK039D/ j+1dKAhGgEaS97DmtfxlJ5C22ffeBZGlQQFFsmiZD+1iw286N3tGcTxfi7oVA7YxyJQQPB+ia xaMBmmWBrhuALqHLR7jLLkDtqTV5hZY5x8lg5L/zgzA4Br4e03tgSzM0FvSsBKwdZZFiBitQ5 KLYmaD/0qKEahfotYnodsLVKsDF/NDzFvRVsH+HCwdE+aK9iZXbFwxVFeM8SHks3Iwh2juJxN cAlEnj8mJEw2sopJm836vPoXnciSqObZOaBfdg== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 --- 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; =20 - gen_flush_flags(s); update_cc_op(s); dest =3D tcg_temp_new(); gen_helper_get_ccr(dest, cpu_env); --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514855576552687.247414546515; Mon, 1 Jan 2018 17:12:56 -0800 (PST) Received: from localhost ([::1]:50737 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB8I-0002iB-UL for importer@patchew.org; Mon, 01 Jan 2018 20:12:46 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35957) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6I-0001Vd-0o for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:43 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6F-00052P-5h for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:41 -0500 Received: from mout.kundenserver.de ([212.227.126.134]:51782) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6E-00050v-SV for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:39 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0M9S0c-1edLqE0klK-00CiwX; Tue, 02 Jan 2018 02:10:36 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:18 +0100 Message-Id: <20180102011032.30056-4-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:V5JPPsg3cEGZM4ln1JghLZ82ePkOM7qFjFAON4OyZxeFJC4tS1a l3QLI3owGWB751t458H51Ss9VKA5uI3wtPl1h6+/5ePgMJ5CtPTHgtqXgSEEXfT0EKTnoHB lV+4FTzRlwkf2aPC4usR8UYZtvLXnx8hd79EWWbYgD0orXMtIYRBdRiPf50oYwI9Y83Tc1g v/QAyLzQnzD0NhJMajYKw== X-UI-Out-Filterresults: notjunk:1;V01:K0:DiP+Q3Ix0gI=:nFRKkBKoDWV592lY/QLYVq A9NBoiZycWp20HaWR7pA0yJ/h5nN3RTc4LZsShisUl8KiiKIr09B3HdiUHZHZV7g+u0JMSbQX 1l4YpIk39BngElJ1ryh/q4GmUmciUJrbNeKFn64oq1rlmfcYK32IZyc8eaWxfNPQwlaO5yzGh ZMbbq9UJ5sAaFZsZxm/kBHvozjVhQKMuWyLko00bacthJizUi6BjYoJi9ahtJ2YNILCVjP7k3 HQlLjxlSF8ZYYkLtS6TzBeZpfRrxN2OFwaSSaab+kK6hOAYJJPWr0K3Sl4jFHtLVIYrsYrTOx FWjRPoOTgF4qw2jFujuiOOmx/m3i1C9oSLLzgIMN7/sJTGiu2NlY+Nx0IKTmaIn6/T8TDnWmY bgYYTNxzBPK0VVvIOqIstA6Lt5Omw0UDzdbBmKKf9NvBdT8Fb/JeIQ4T65ec0wGrDG5Jov0Q+ 9lHY3fawG5v+LxflkepJ7WKoF/t68+bArfGHd+Im74mK31nTRkxmpCm5SmmnDWpsb/OdtUVwA NU/O+3Uxen1D8Z80HKHitD/NPkyxwPOqtBbUSK/i+BUVqKDpepgek6tC9vHtJrKh0qBT/9NMU x5N/wDg2lj+/pAJuMmmMIA0Xc3daVagVBuoOiJSuHOzukJ6vA26x7+/SI35jKddsNP8hhjoH1 dUfRpyhxM7BJ/LHa74zIPpWxA9/vIGKcirrc8NvH9AkUcBfvzizWPYcE1qDxNxAXPWcue792t OJddq6NBNcB/5NzyIg+JPo95syBXP+cK2vHj1Q== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 --- 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 *e= nv, abi_ulong mask) { + uint32_t sr =3D (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); } =20 @@ -5634,7 +5635,7 @@ restore_sigcontext(CPUM68KState *env, struct target_s= igcontext *sc) __get_user(env->aregs[1], &sc->sc_a1); __get_user(env->pc, &sc->sc_pc); __get_user(temp, &sc->sc_sr); - env->sr =3D (env->sr & 0xff00) | (temp & 0xff); + cpu_m68k_set_ccr(env, temp); } =20 /* @@ -5726,7 +5727,7 @@ static inline int target_rt_setup_ucontext(struct tar= get_ucontext *uc, CPUM68KState *env) { target_greg_t *gregs =3D uc->tuc_mcontext.gregs; - uint32_t sr =3D cpu_m68k_get_ccr(env); + uint32_t sr =3D (env->sr & 0xff00) | cpu_m68k_get_ccr(env); =20 __put_user(TARGET_MCONTEXT_VERSION, &uc->tuc_mcontext.version); __put_user(env->dregs[0], &gregs[0]); --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514856021501172.61858870080607; Mon, 1 Jan 2018 17:20:21 -0800 (PST) Received: from localhost ([::1]:50836 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWBFc-00008j-BJ for importer@patchew.org; Mon, 01 Jan 2018 20:20:20 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36000) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6I-0001W4-SU for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6F-00052a-91 for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:42 -0500 Received: from mout.kundenserver.de ([212.227.126.187]:56374) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6E-00051V-Up for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:39 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0LnGL0-1f7xcw2XsM-00hiA9; Tue, 02 Jan 2018 02:10:36 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:19 +0100 Message-Id: <20180102011032.30056-5-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:MbEOOPbrT531CBmCWbA2Y2hyxx6xuQit7bXFyt6NCIoAyHgf+ju K5KHzRxuNUnFORdtKHafuVlFl28MVooJR2eoxgFSmT5wO6fhLhxWlEiE9wzRtCgLgyVdtFL ifWszlhj8c6BoFryaE0QHAc/qC5pRJ2EC74iaum8vyvQ0I4r4I7elX7WF/IoK5btDvaFW/c IDX466ghwt5NI45pmq3Ag== X-UI-Out-Filterresults: notjunk:1;V01:K0:eTPgZ/nNksg=:K+gf0BOb759su/o/m2SFjC 3JJbjJ3x3qkrIsTxBi59gSuF6HmUzHc5bD3X54qHl0BeBVwTCamwMSngpR0WYlQoxJUt4UZPt 2WQ5rwwuIrlWNGL01muHSZaOEA3/z4c4g6YUjmkBIEOHCjxv48x66r+BqcPJOyM4lGgtiHn5+ +nkklZcvoq8OiiSZymBnBhmIEZj8/BY3AXQfsAf8xbICZJCMftQO1sTFO8J13yXLpzRbBNNSD gSSfDXO2go+o5gw1nNiXXYmbUP8PDk5Oo7mnYTl6QzJ878GU7inO3aczjEZOE7m3QHYIxPzJO UWH6324qe5q66f3zorX+JpMUEGZXpyJ0pNRll9sP89w4lHC+5SN7X226KZTkD8kdq9+FizVcN mM0orxiC0Hk7Xw/g9KUC/44NvicJNE04SMPOsI1RkxWWtvqq+0LeN0AjgJ2fMTlEB9Y5pJvTi AMMr0/EB8ofY7zqwvxwu9Y5v3+5JnpbbLEZtISgxKAG9ChJWunENN2nsRWQ7RFCPNmvdIplhM yHrgXqvJot/r4MbPjryL+WhbmymWkGXYc9LCnXZXIa1UGAH5L9Qv9WxbjydMO4VPaboojkr45 neVaZZb3xdW7eaHw0i0Z+5StR+QFddR2MkwuZrIMo5WE+Ee2FYdRyMFGM2W01EFg0eaACsGkc AxUTvCarGx33FjM3uK6jNHgBGzm6T6PvK9oWZIx2KY1LW2zuWt/3dsOAOBJL9BsHfcqrWLLzj zQIPFVMWgsbZ1SLjahUVPOsyGNIrS8pUcUTeHQ== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson --- 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) =20 DISAS_INSN(undef_mac) { - gen_exception(s, s->pc - 2, EXCP_LINEA); + gen_exception(s, s->insn_pc, EXCP_LINEA); } =20 DISAS_INSN(undef_fpu) { - gen_exception(s, s->pc - 2, EXCP_LINEF); + gen_exception(s, s->insn_pc, EXCP_LINEF); } =20 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); } =20 DISAS_INSN(mulw) @@ -2583,7 +2583,7 @@ DISAS_INSN(swap) =20 DISAS_INSN(bkpt) { - gen_exception(s, s->pc - 2, EXCP_DEBUG); + gen_exception(s, s->insn_pc, EXCP_DEBUG); } =20 DISAS_INSN(pea) @@ -2636,7 +2636,7 @@ DISAS_INSN(pulse) =20 DISAS_INSN(illegal) { - gen_exception(s, s->pc - 2, EXCP_ILLEGAL); + gen_exception(s, s->insn_pc, EXCP_ILLEGAL); } =20 /* ??? This should be atomic. */ @@ -2666,7 +2666,7 @@ DISAS_INSN(mull) =20 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; } =20 @@ -4240,7 +4240,7 @@ DISAS_INSN(move_from_sr) TCGv sr; =20 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 =3D 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; =20 if (IS_USER(s)) { - gen_exception(s, s->pc - 2, EXCP_PRIVILEGE); + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } =20 @@ -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); } =20 DISAS_INSN(movec) @@ -4313,7 +4313,7 @@ DISAS_INSN(movec) TCGv reg; =20 if (IS_USER(s)) { - gen_exception(s, s->pc - 2, EXCP_PRIVILEGE); + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } =20 @@ -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) =20 DISAS_INSN(wddata) { - gen_exception(s, s->pc - 2, EXCP_PRIVILEGE); + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); } =20 DISAS_INSN(wdebug) @@ -4356,7 +4356,7 @@ DISAS_INSN(wdebug) M68kCPU *cpu =3D m68k_env_get_cpu(env); =20 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) =20 DISAS_INSN(trap) { - gen_exception(s, s->pc - 2, EXCP_TRAP0 + (insn & 0xf)); + gen_exception(s, s->insn_pc, EXCP_TRAP0 + (insn & 0xf)); } =20 static void gen_load_fcr(DisasContext *s, TCGv res, int reg) --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15148560215121000.9771879671339; Mon, 1 Jan 2018 17:20:21 -0800 (PST) Received: from localhost ([::1]:50837 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWBFc-00008q-KC for importer@patchew.org; Mon, 01 Jan 2018 20:20:20 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35947) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6H-0001Va-Ui for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6F-00052o-GE for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:41 -0500 Received: from mout.kundenserver.de ([212.227.126.134]:64145) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6F-00051e-60 for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:39 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MceGG-1eEViv0K3s-00HdnX; Tue, 02 Jan 2018 02:10:37 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:20 +0100 Message-Id: <20180102011032.30056-6-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:iAqFFDzzTdE8ZQp2pqsuChA3RRLMD3H5EPwfbp1evP2qxUvg0E3 o0nSwMoe+om5WmpPbM9J2GZupcJNJfQ2lNBpIwbss8fkXWbPwbYhRy9JqqbuJsyaFUpZ6/V YBPpy66L+aBrZyxkRX0sxBz2h2i/wqrLy3UqBJZZI8NYkb1HZrqFk1ER9eKtF8u5ztGbklV aAVwIdq/AJywNLHKiv/kw== X-UI-Out-Filterresults: notjunk:1;V01:K0:n72yxJZWAmQ=:OaDJqLazo2ufrpYpvNWXG6 2VUZQgzeiihX4z8gf2yAjrZGI9nXT5N1/impE/U9t/MAlbHbdxWSb6ItugUvkhvvP6w6ouJjv OWj1RMEsW0nHoOBBvHfSUm7GykMeMTuon+5ERw+rVBg6RdWfIIS18Ivmr7ctszNgvlX7Ng7BF X7Pg3FRd+WJBUP/AY23NaG8R07wrXt0rgLIJqdzGUPDAqxn817hb1gV3fvXC7wBuI4qMR887I 1PgZIstua4A1UAjjcBqzA6UKmLGmn/xLMRCAlDjaRJlkBWOAINYmIFg4Aqx5KyQrhzez5G4C4 JxGSOAEfunrMVh1+Axp5GA7V4XGV3O1RiwUWBjKQpVYNGZ9Gw0RIiKOxWQGMvDuvdKRWF3Q/k DIyZJf2NX6+ycVE+kEuvSWKZBzUdoMUZmrtVtXM2/xXj9EWa3GJ5SjhMBJ12ZONZsMiZrMjh0 QVgzPs/Fp0p/CUsszexuSrCte9pqLMKxc0J8QbeIwdzPLUpOF7t4HqQLzcsfth7uJhsPVMLWD rIIVLwMamzzcRpz7mcH5NbAboMpSlGBx+ISYFNl42Gy/mh8RGtHKikws/DTkQcHRAM4bajIzO B1S/q4Ar6Afj0Eq/t3xtUYePaVLZx1D46CrYFaA3EhEdXBdczqs98DMN7rOBk+mXug8/429fP gXNyYWshtU7mB9GdNJa0oISL06Z+Av0NVK5JpE54WNWFbpx5liN3rVrSj6Ue1G4id8198dhPK jTfGdc3Ah00sNomkhrO6DYPqPuOudpE8yJUaBg== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Display the interrupts/exceptions information in QEMU logs (-d int) Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson --- target/m68k/cpu.h | 8 ++++ target/m68k/op_helper.c | 112 ++++++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 120 insertions(+) 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 =20 #define EXCP_RTE 0x100 diff --git a/target/m68k/op_helper.c b/target/m68k/op_helper.c index 63089511cb..f899b4b086 100644 --- a/target/m68k/op_helper.c +++ b/target/m68k/op_helper.c @@ -68,6 +68,111 @@ static void do_rte(CPUM68KState *env) helper_set_sr(env, fmt); } =20 +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 =3D CPU(m68k_env_get_cpu(env)); @@ -109,6 +214,13 @@ static void do_interrupt_all(CPUM68KState *env, int is= _hw) =20 vector =3D cs->exception_index << 2; =20 + if (qemu_loglevel_mask(CPU_LOG_INT)) { + static int count; + qemu_log("INT %6d: %s(%#x) pc=3D%08x sp=3D%08x sr=3D%04x\n", + ++count, m68k_exception_name(cs->exception_index), + vector, env->pc, env->aregs[7], env->sr); + } + fmt |=3D 0x40000000; fmt |=3D vector << 16; fmt |=3D env->sr; --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514855868328626.5571874611189; Mon, 1 Jan 2018 17:17:48 -0800 (PST) Received: from localhost ([::1]:50806 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWBD9-0006jN-DW for importer@patchew.org; Mon, 01 Jan 2018 20:17:47 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35960) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6I-0001Ve-1u for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6F-00053G-Su for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:41 -0500 Received: from mout.kundenserver.de ([212.227.126.130]:57156) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6F-000522-Hk for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:39 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0Mbour-1eFslc2JKn-00J1NO; Tue, 02 Jan 2018 02:10:37 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:21 +0100 Message-Id: <20180102011032.30056-7-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:aJZVpYkW5YNDJlR6Xz+GgTJFA0URwuffw9kpgqvcRI2DzIoScFa Iyf2XohZN0mX/m/RyGPXJmsQo5bYaLjT5+hsm+UrrAAcksWv4tWpulpN6sLMZ6ewUikLdsa qkAq6Elq06jMtKrU9/hT8bpKNh4uMy1rAU3WMunZVzCnUlWuVPDibJ2iI4Kh72+A/H7Y3/5 e6nljR0ntJARBpKw4r9xA== X-UI-Out-Filterresults: notjunk:1;V01:K0:Dmi+yxkNgtk=:AMOkEu69Wn/XhcbCMhKyRr FDUzP65Y3dwvS+VvWzAqHBMr1xCc7+H7l/HxGFXHEVV8ghwnXHtUPTmJA8JwpQ5q7aWSM3tSY ZtgvalB8WkmXvycDZk9jUqPWcYghi0o41yaU02irdm/V89auCf+j47jmZ2SEelg7/WkdPOtfa AZjF+no4p8XJzfFq2Vtzuxs3sjP9s9sWd/luPEkbx9NBuY2TqyRlvW5QnJu8XiX7OTrRvahQT pm84NqKZC8AyCFlvDlSCwLRdzGxs46uz74JXJVQob1jlPkEeA7D9eqWDI0OPO8WcOE+HiAve7 W7MShzrtMoY+U77onhrrg1sUqzbaxaizVV4LQhkPS7WPj7MQf/oBLSFmErlTpTf2+zEja2wA9 yDtlXNLfsxQ3zPjkR1cGzXVi0QOR2hm7U9CVwQM7WlUvNnqx4Q7P9OVkZ5rMp0uodxx4zqZoh wGSffrq5F4BA00AlPJNfr1ePrZECzLX/Rl1nZobWR8A/BT+1pGOFa9qEJ/ZCI5KdDHbT/2z/e 5QiGJln4KIANmyHJuofLmNOrCvUkW4BYxU4iA3iEPNV/RnHo/ff5HAIsmcsFsmMQ45gJst8W5 a3zLxdOLGJfxNkjqovg7jib+qSu/+4uRMf7zw2Hflm779Hhhqm4jq5eHC51hKAztctxq3P5HS 6E+Ai2V1s55ZBgJMTIH2nOIA644cpji+P/ZdTmPlaijFKuCqqI6tUdOXldvwclOtUATtx/5qR z21W6ICeNU2s+ehm94ZmaDo3rTmw5bgpQJN0kQ== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 --- target/m68k/op_helper.c | 158 ++++++++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 155 insertions(+), 3 deletions(-) diff --git a/target/m68k/op_helper.c b/target/m68k/op_helper.c index f899b4b086..0099a92c8c 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, MMUAccessT= ype access_type, } } =20 -static void do_rte(CPUM68KState *env) +static void cf_rte(CPUM68KState *env) { uint32_t sp; uint32_t fmt; @@ -68,6 +68,45 @@ static void do_rte(CPUM68KState *env) helper_set_sr(env, fmt); } =20 +static void m68k_rte(CPUM68KState *env) +{ + uint32_t sp; + uint16_t fmt; + uint16_t sr; + + sp =3D env->aregs[7]; +throwaway: + sr =3D cpu_lduw_kernel(env, sp); + sp +=3D 2; + env->pc =3D cpu_ldl_kernel(env, sp); + sp +=3D 4; + if (m68k_feature(env, M68K_FEATURE_QUAD_MULDIV)) { + /* all except 68000 */ + fmt =3D cpu_lduw_kernel(env, sp); + sp +=3D 2; + switch (fmt >> 12) { + case 0: + break; + case 1: + env->aregs[7] =3D sp; + helper_set_sr(env, sr); + goto throwaway; + case 2: + case 3: + sp +=3D 4; + break; + case 4: + sp +=3D 8; + break; + case 7: + sp +=3D 52; + break; + } + } + env->aregs[7] =3D sp; + helper_set_sr(env, sr); +} + static const char *m68k_exception_name(int index) { switch (index) { @@ -173,7 +212,7 @@ static const char *m68k_exception_name(int index) return "Unassigned"; } =20 -static void do_interrupt_all(CPUM68KState *env, int is_hw) +static void cf_interrupt_all(CPUM68KState *env, int is_hw) { CPUState *cs =3D CPU(m68k_env_get_cpu(env)); uint32_t sp; @@ -188,7 +227,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() @@ -246,6 +285,119 @@ static void do_interrupt_all(CPUM68KState *env, int i= s_hw) env->pc =3D cpu_ldl_kernel(env, env->vbr + vector); } =20 +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 =3D CPU(m68k_env_get_cpu(env)); + switch (format) { + case 4: + *sp -=3D 4; + cpu_stl_kernel(env, *sp, env->pc); + *sp -=3D 4; + cpu_stl_kernel(env, *sp, addr); + break; + case 3: + case 2: + *sp -=3D 4; + cpu_stl_kernel(env, *sp, addr); + break; + } + *sp -=3D 2; + cpu_stw_kernel(env, *sp, (format << 12) + (cs->exception_index << 2)); + *sp -=3D 4; + cpu_stl_kernel(env, *sp, retaddr); + *sp -=3D 2; + cpu_stw_kernel(env, *sp, sr); +} + +static void m68k_interrupt_all(CPUM68KState *env, int is_hw) +{ + CPUState *cs =3D CPU(m68k_env_get_cpu(env)); + uint32_t sp; + uint32_t retaddr; + uint32_t vector; + uint16_t sr, oldsr; + + retaddr =3D 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 +=3D 2; + break; + } + } + + vector =3D cs->exception_index << 2; + + if (qemu_loglevel_mask(CPU_LOG_INT)) { + static int count; + qemu_log("INT %6d: %s(%#x) pc=3D%08x sp=3D%08x sr=3D%04x\n", + ++count, m68k_exception_name(cs->exception_index), + vector, env->pc, env->aregs[7], env->sr); + } + + /* + * MC68040UM/AD, chapter 9.3.10 + */ + + sr =3D env->sr | cpu_m68k_get_ccr(env); + /* "the processor first make an internal copy" */ + oldsr =3D sr; + /* "set the mode to supervisor" */ + sr |=3D SR_S; + /* "suppress tracing" */ + sr &=3D ~SR_T; + /* "sets the processor interrupt mask" */ + if (is_hw) { + sr |=3D (env->sr & ~SR_I) | (env->pending_level << SR_I_SHIFT); + } + helper_set_sr(env, sr); + sp =3D env->aregs[7]; + + sp &=3D ~1; + if (cs->exception_index =3D=3D EXCP_ADDRESS) { + do_stack_frame(env, &sp, 2, oldsr, 0, retaddr); + } else if (cs->exception_index =3D=3D EXCP_ILLEGAL || + cs->exception_index =3D=3D EXCP_DIV0 || + cs->exception_index =3D=3D EXCP_CHK || + cs->exception_index =3D=3D EXCP_TRAPCC || + cs->exception_index =3D=3D 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 >=3D EXCP_SPURIOUS && + cs->exception_index <=3D EXCP_INT_LEVEL_7) { + do_stack_frame(env, &sp, 0, oldsr, 0, retaddr); + oldsr =3D sr; + env->aregs[7] =3D sp; + helper_set_sr(env, sr &=3D ~SR_M); + sp =3D 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] =3D sp; + /* Jump to vector. */ + env->pc =3D 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 =3D M68K_CPU(cs); --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514855721414635.7009420714747; Mon, 1 Jan 2018 17:15:21 -0800 (PST) Received: from localhost ([::1]:50772 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWBAm-0004sK-G3 for importer@patchew.org; Mon, 01 Jan 2018 20:15:20 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36005) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6I-0001W5-WF for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6G-00053c-Bg for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:42 -0500 Received: from mout.kundenserver.de ([212.227.126.134]:58080) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6G-00052V-1X for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:40 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MHQEF-1ej7fx09fX-00E7Zw; Tue, 02 Jan 2018 02:10:38 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:22 +0100 Message-Id: <20180102011032.30056-8-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:00cPySLAh9nbOFyjmqbG2zVMGiTfBKejnl6B8C0ZjKOUmz8EBiy AUxT9VB5EpEdfIR00ROXDl8UzxxrD5aFlVpT37ZWiXfpMPFm6ClPEH4o2pu9+DNyU90mW8D IJq7GeLV6iImvqM9IhutcmIba0dUepmANWBpfLf4CJvJ3zljeeA6k2oC4zpEX4JV1pxJ7cO laEOiBIwa7fczN4e6Lglg== X-UI-Out-Filterresults: notjunk:1;V01:K0:Tl5qQ7V4u+w=:/9yNMd1vzIKvC5AKM8Mfb7 7nn/UUm22ruR75JNhHrC4+f24uWmjebedbxg4vwFW6D8cWFiUFeL2OxBFcYsE3S02SLm4Hi4k fsU+5Fb4E9GeYdTi6Vjl+ja87AW4XPxEHBwr4DOtZ0n8V+uQuXfokVd2WhKcYB1Xh9MTP7Ro5 hBtipuv3fZrZ7lwp3n7FIQTTzKM+6A+J58RCUbVQCT6dNnFQ/1QHu60daVSGb5Uk3u3YcZMqi CX6fJOrO7N7Zkl6BPj66F6uP3ixMFQb225NYgUbz0E2PdpcUdH0dW9ilkzWcL17ys/KewATkF tA4VqmprgwcuPToCsKWsp5fjeBDAn9pWSva9FDPl/Si1jF8aRTYvDcQ7jmTNzSkhELlsoWCtW juT3qezEAt02opm07GQkCjpDZYMC0/KIm/aWMTDFZqJ0UeBUtJmlsgZcNUNiFpAd+4XjQLrKw 2LIjJ6qHLWvDWi4we3buPo8w1EK7Gy2B8mDZnqKedpO+h0qTTIjCDc6ggvfVPZ2AvQBKwIdOK EPWsInJDrV713p7/ttf+sNqKvlfoUgUVp83o3CHyrvO250fkkIECyPgGuG5p6wt5cTmd3PFCb AWgYMP9ivHXhhivzQd5+FMk6F2Gh2fIsprNtVZToCOtyg3RvcD4yEKnL5HHnCiuvcrHy7vqUz 31JpgdCR09TC956Ysp5+P5zZSxPXsi5efmZm2TdqcSPigJKPwOmnyePbkQ0dHRwU5ASdEIz7X eaxG4d4ctO8IVUxjcLelZ/SxXnoH9kLctbW0Rw== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" chk and chk2 compares a value to boundaries, and triggers a CHK exception if the values is out of bounds. Signed-off-by: Laurent Vivier --- linux-user/main.c | 7 +++ target/m68k/cpu.c | 2 + target/m68k/cpu.h | 1 + target/m68k/translate.c | 137 ++++++++++++++++++++++++++++++++++++++++++++= +++- 4 files changed, 146 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 =3D env->pc; queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info); break; + case EXCP_CHK: + info.si_signo =3D TARGET_SIGFPE; + info.si_errno =3D 0; + info.si_code =3D TARGET_FPE_INTOVF; + info._sifields._sigfault._addr =3D env->pc; + queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info); + break; case EXCP_DIV0: info.si_signo =3D TARGET_SIGFPE; info.si_errno =3D 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); } =20 static void m5208_cpu_initfn(Object *obj) diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h index acc2629216..42c358d1a7 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -304,6 +304,7 @@ enum m68k_features { M68K_FEATURE_CAS, M68K_FEATURE_BKPT, M68K_FEATURE_RTD, + M68K_FEATURE_CHK2, }; =20 static inline int m68k_feature(CPUM68KState *env, int feature) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index a1e424e3db..6ef4c3a53c 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -4203,6 +4203,140 @@ DISAS_INSN(ff1) gen_helper_ff1(reg, reg); } =20 +DISAS_INSN(chk) +{ + TCGv tsrc, src, reg; + int opsize; + TCGLabel *l1, *l2; + + switch ((insn >> 7) & 3) { + case 3: + opsize =3D OS_WORD; + break; + case 2: + if (m68k_feature(env, M68K_FEATURE_CHK2)) { + opsize =3D OS_LONG; + break; + } + /* fallthru */ + default: + gen_exception(s, s->insn_pc, EXCP_ILLEGAL); + return; + } + SRC_EA(env, tsrc, opsize, 1, NULL); + src =3D tcg_temp_local_new(); + tcg_gen_mov_i32(src, tsrc); + + reg =3D tcg_temp_local_new(); + gen_ext(reg, DREG(insn, 9), opsize, 1); + gen_flush_flags(s); + update_cc_op(s); + + l1 =3D gen_new_label(); + l2 =3D gen_new_label(); + tcg_gen_brcondi_i32(TCG_COND_GE, reg, 0, l1); + tcg_gen_movi_i32(QREG_CC_N, -1); + tcg_gen_movi_i32(QREG_PC, s->pc); + gen_raise_exception(EXCP_CHK); + tcg_gen_br(l2); + gen_set_label(l1); + tcg_gen_brcond_i32(TCG_COND_LE, reg, src, l2); + tcg_gen_movi_i32(QREG_CC_N, 0); + tcg_gen_movi_i32(QREG_PC, s->pc); + gen_raise_exception(EXCP_CHK); + gen_set_label(l2); + tcg_temp_free(src); + tcg_temp_free(reg); +} + +DISAS_INSN(chk2) +{ + uint16_t ext; + TCGv addr1, addr2, bound1, bound2, res1, res2, reg, one, tmp; + int opsize; + TCGLabel *l1; + + switch ((insn >> 9) & 3) { + case 0: + opsize =3D OS_BYTE; + break; + case 1: + opsize =3D OS_WORD; + break; + case 2: + opsize =3D OS_LONG; + break; + default: + gen_exception(s, s->insn_pc, EXCP_ILLEGAL); + return; + } + + ext =3D read_im16(env, s); + if ((ext & 0x0800) =3D=3D 0) { + gen_exception(s, s->insn_pc, EXCP_ILLEGAL); + return; + } + + addr1 =3D gen_lea(env, s, insn, OS_UNSIZED); + addr2 =3D tcg_temp_new(); + tcg_gen_addi_i32(addr2, addr1, opsize_bytes(opsize)); + + bound1 =3D gen_load(s, opsize, addr1, 1); + tcg_temp_free(addr1); + bound2 =3D gen_load(s, opsize, addr2, 1); + tcg_temp_free(addr2); + + reg =3D 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); + + /* Z is set if reg is equal to either bound, cleared otherwise, + * QREG_CC_Z is 0 if Z is true, 1 if Z if false + */ + tmp =3D tcg_const_i32(0); + tcg_gen_setcond_i32(TCG_COND_NE, QREG_CC_Z, reg, bound1); + tcg_gen_movcond_i32(TCG_COND_EQ, QREG_CC_Z, reg, bound2, tmp, QREG_CC_= Z); + + /* from real m68040: + * if bound1 <=3D bound2, trap if reg < bound1 or reg > bound2 + * if bound1 > bound2, trap if reg > bound2 and reg < bound1 + */ + one =3D tcg_const_i32(1); + + /* reg < bound1 or reg > bound2 */ + res1 =3D tcg_temp_new(); + tcg_gen_setcond_i32(TCG_COND_LT, res1, reg, bound1); + tcg_gen_movcond_i32(TCG_COND_GT, res1, reg, bound2, one, res1); + + /* reg > bound2 and reg < bound1 */ + res2 =3D tcg_temp_new(); + tcg_gen_setcond_i32(TCG_COND_GT, res2, reg, bound2); + tcg_gen_setcond_i32(TCG_COND_LT, tmp, reg, bound1); + tcg_gen_and_i32(res2, res2, tmp); + tcg_temp_free(tmp); + + /* if bound1 <=3D bound2, C =3D res1 else C =3D res2 */ + tcg_gen_movcond_i32(TCG_COND_LE, QREG_CC_C, bound1, bound2, res1, res2= ); + + tcg_temp_free(res1); + tcg_temp_free(res2); + tcg_temp_free(bound1); + tcg_temp_free(bound2); + tcg_temp_free(reg); + + update_cc_op(s); + l1 =3D gen_new_label(); + tcg_gen_brcond_i32(TCG_COND_NE, QREG_CC_C, one, l1); + tcg_gen_movi_i32(QREG_PC, s->pc); + gen_raise_exception(EXCP_CHK); + gen_set_label(l1); +} + static TCGv gen_get_sr(DisasContext *s) { TCGv ccr; @@ -5306,7 +5440,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 +5473,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); --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 15148555783841003.3202524022288; Mon, 1 Jan 2018 17:12:58 -0800 (PST) Received: from localhost ([::1]:50739 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB8T-0002rl-Em for importer@patchew.org; Mon, 01 Jan 2018 20:12:57 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36063) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6K-0001WR-9O for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6H-00055B-0J for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:44 -0500 Received: from mout.kundenserver.de ([212.227.126.133]:63807) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6G-00053B-JN for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:40 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0Lghpm-1fJ0G02FAU-00oHkD; Tue, 02 Jan 2018 02:10:38 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:23 +0100 Message-Id: <20180102011032.30056-9-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:KU0C8IFSXVmmYXXS2FqRY9cFh3iDeaM1SoXNGJUClhLI0cyT/Hq S5l2YivzEq2iPzLeL2ejwpt7HXJHu8PoieyHveDdYjcDQmtB6MzmGD9QmxuQh2iP0vLJK37 VdX6/aR5X391KX0bVKsgh4NMiZAs9ghptzRCuq7V0wBVG4MBTyy+vViN7dSwq3zYs8MFqx4 Eyg+3PZy4aHu+U+EFqrxA== X-UI-Out-Filterresults: notjunk:1;V01:K0:2TdgHXH0lvQ=:suyaGIvI3ioaxXLdeBmKvS kQzT60HI8CgaIhA4/ZKj/3wHJZ52UDwVrJWOUYTi0TX9cvRBTEDQM7KnmqgUVUqAPA6P13gPh 80g8tp66wHyAvJjhsdi5SXgRzjxkFTipqD8eFySWIBxhpBqEG2FeeE66j3Uor/pmr4YdjERtI hTt4SHh3ob41z35MFo34XOCPN4bM/H+ZETvAfCCnht2tpBf6OgMymPiHZsoRbDyMybuI5x5Ps KbxJBqwXLR5hPF7w2Nts0pHj61Hm6uSDIUbC+ACb9nt6Lsw7j9TQHGF1IeKla8bOJ/h5nFFtX 9PObfaiQexbQ6rb8cFSP3XrGVGsknTnpUmDVKMJu4UyZNTYoodyCWfdICL5ONRpDhnDsgSSHR /2Sbo1tSSodTC8mJF9Mj2xDgntkHQK3lS+riW/tISmgDV8m9uDAhywywRTa3xKpbsx02H5Llp 4aZxlQjfMl0bhTAC3PBH3lGbmkwLczTWYNuvaxhXtSsAfKWxzb2MZkkvNWmpK7f/e9Epm7VmI qL9L+skMnN9VIOxTfsJgfD87BXnPLXRbkp2des8A64xW5anuUJztfLz5akXCKXPrFZ/Y0MpN5 GKk3fIa6XPLjR188nu8pFl3mnHGAvGhsd4kSyXg3qyiM0BBd91CpxOvF1qsJSFxZD2h6wGTHT BVp1aph/TJbqsCJfxE9WAhTb35iNg4afF8WGRGXRbDB6vD1dtSNkYxA8dFROAb240cdfZs757 +eNkk9IvBENutZatr2yZIZ7TZsa7AQMViNwxlg== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 --- target/m68k/cpu.c | 10 ++++++- target/m68k/cpu.h | 1 + target/m68k/translate.c | 73 +++++++++++++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 83 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 =3D M68K_CPU(obj); + CPUM68KState *env =3D &cpu->env; + + m68020_cpu_initfn(obj); + m68k_set_feature(env, M68K_FEATURE_M68040); +} =20 static void m68060_cpu_initfn(Object *obj) { diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h index 42c358d1a7..c21e36d1af 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -305,6 +305,7 @@ enum m68k_features { M68K_FEATURE_BKPT, M68K_FEATURE_RTD, M68K_FEATURE_CHK2, + M68K_FEATURE_M68040, /* instructions specific to MC68040 */ }; =20 static inline int m68k_feature(CPUM68KState *env, int feature) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 6ef4c3a53c..9f13299bcf 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -4337,6 +4337,78 @@ DISAS_INSN(chk2) gen_set_label(l1); } =20 +static void m68k_copy_line(TCGv dst, TCGv src, int index) +{ + TCGv addr; + TCGv_i64 t0, t1; + + addr =3D tcg_temp_new(); + + t0 =3D tcg_temp_new_i64(); + t1 =3D 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) +{ + int index =3D IS_USER(s); + uint16_t mode; + + mode =3D (insn >> 3) & 7; + + if (mode & 4) { + TCGv tmp; + uint16_t ext; + + ext =3D read_im16(env, s); + if ((ext & (1 << 15)) =3D=3D 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 =3D 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); + } else { + TCGv reg, addr; + + reg =3D AREG(insn, 0); + addr =3D tcg_const_i32(read_im32(env, s)); + + if (mode & 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 ((mode & 2) =3D=3D 0) { + /* (Ay)+ */ + tcg_gen_addi_i32(reg, reg, 16); + } + } +} + static TCGv gen_get_sr(DisasContext *s) { TCGv ccr; @@ -5638,6 +5710,7 @@ 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, f600, ffc0, M68040); INSN(wddata, fb00, ff00, CF_ISA_A); INSN(wdebug, fbc0, ffc0, CF_ISA_A); #undef INSN --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514855870652635.5510850311902; Mon, 1 Jan 2018 17:17:50 -0800 (PST) Received: from localhost ([::1]:50807 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWBDA-0006l5-Rs for importer@patchew.org; Mon, 01 Jan 2018 20:17:48 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35999) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6I-0001W3-SJ for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6H-00055N-5M for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:42 -0500 Received: from mout.kundenserver.de ([212.227.126.187]:55333) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6G-00053Q-QS for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:41 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MXA60-1eSp4s44V2-00VvXz; Tue, 02 Jan 2018 02:10:39 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:24 +0100 Message-Id: <20180102011032.30056-10-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:jWg9vUlaFtfswbR2Bp6ycKN8ZaqYTBW/cU6QpNSOseLzQhd5zQ6 bUQwYr/dnohzUnjos7xeEKqQNAXDaa3Z9BihgezjJovAbBCTKuTu1jRRvcQSsM5CUFoXXrW Pav3d8AcvYujn1lARZ11YVNkYDeGSF72+viS9nHafp1qdivjdGyUevViwhelkuPs9QOiPEk tXLxp1jc6brZ1ktudujEg== X-UI-Out-Filterresults: notjunk:1;V01:K0:3GEN35y1op0=:e3AYYXRLL3Rgp5V989LUH6 AXkeM/Iub/ilpKm8cdoEO6jmzbWO7qECqp9RdwRZDyYlr5Sslq29dGxjjVferwrM6Xty8LdyX jCFF8quGetUWuN/7LUnxF2wzZ5mzxfTcxJv+UJcDCyyIVFjnmqXyyp8zv1I6+Jn+HlzOed3Wi nr6Xk+H0eiAEOU0uxYsRVQ8UF170OmgM8A1Ehtimj26u297y1H/fPpaqYEujl5hk7YL3L/vE4 mMHKG2lmeQKp0M2w1iOHzSAA5DfNf/CporlvSU/vDKajnyC4J7tmt6yCx+qXpystqJushwgld 38+h4Yr8d+AyBMwzj0ljMdyIn66XtTJ9LokcQKVxyxHSkPKj87E5IM5hLSFgVfHjXBchhdSOA z8wHf5uWY7cfHuE91h+/r3NuaN8WjNlepi+mRqsAO95QHeMPfQlzKIB1fuFS7VPAWAB0J1MhK 9LqMuJ3+syDyQhiKWb0cxbE5kI/ATDXxelS8M0v26ujoNjdHwCEpySkyUCHdRaFIUN0MQhJXa jx2aDauHqnQBASIOFLWq7Y2klclZYyWyXnSwH98LdHfdNQwId8Rx0yxNvQu+0grjA0nGjeK8Z DBrCObDKdeHlmFse/2nlBO9BfXq908f5Yj53IKka4lVUSaLbI1d3Wha7NIdHIX0mb9+Z96YQW V0GiHgCj5ke84gqBZSs2wPljk7m5VythcoBQ+P4XaH7y87wHLP1pqEm9bppX+5C/8XWBw5Ifd f8CUXWxBojV07OJsIvA1VcXmP2H3EqgwiM/skA== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" don't compile supervisor only instructions in linux-user mode Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson --- target/m68k/translate.c | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 9f13299bcf..d463927fcc 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -4453,6 +4453,7 @@ DISAS_INSN(move_from_sr) DEST_EA(env, insn, OS_WORD, sr, NULL); } =20 +#if defined(CONFIG_SOFTMMU) DISAS_INSN(move_to_sr) { if (IS_USER(s)) { @@ -4485,6 +4486,11 @@ DISAS_INSN(move_to_usp) =20 DISAS_INSN(halt) { + if (IS_USER(s)) { + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); + return; + } + gen_exception(s, s->pc, EXCP_HALT_INSN); } =20 @@ -4568,6 +4574,7 @@ DISAS_INSN(wdebug) /* TODO: Implement wdebug. */ cpu_abort(CPU(cpu), "WDEBUG not implemented"); } +#endif =20 DISAS_INSN(trap) { @@ -5125,10 +5132,16 @@ DISAS_INSN(fscc) tcg_temp_free(tmp); } =20 +#if defined(CONFIG_SOFTMMU) DISAS_INSN(frestore) { M68kCPU *cpu =3D m68k_env_get_cpu(env); =20 + if (IS_USER(s)) { + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); + return; + } + /* TODO: Implement frestore. */ cpu_abort(CPU(cpu), "FRESTORE not implemented"); } @@ -5137,9 +5150,15 @@ DISAS_INSN(fsave) { M68kCPU *cpu =3D m68k_env_get_cpu(env); =20 + if (IS_USER(s)) { + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); + return; + } + /* TODO: Implement fsave. */ cpu_abort(CPU(cpu), "FSAVE not implemented"); } +#endif =20 static inline TCGv gen_mac_extract_word(DisasContext *s, TCGv val, int upp= er) { @@ -5564,7 +5583,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); @@ -5579,7 +5600,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); @@ -5590,14 +5613,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); @@ -5701,18 +5726,20 @@ 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, f600, ffc0, M68040); INSN(wddata, fb00, ff00, CF_ISA_A); INSN(wdebug, fbc0, ffc0, CF_ISA_A); +#endif + INSN(move16, f600, ffc0, M68040); #undef INSN } =20 --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514856237709211.12151044923257; Mon, 1 Jan 2018 17:23:57 -0800 (PST) Received: from localhost ([::1]:51043 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWBJ3-0003iX-U8 for importer@patchew.org; Mon, 01 Jan 2018 20:23:53 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36110) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6L-0001Xh-Cd for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6I-00056M-3D for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:45 -0500 Received: from mout.kundenserver.de ([212.227.126.135]:55667) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6H-00054c-Ng for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:41 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MSmNI-1eORMB1ieC-00RVhf; Tue, 02 Jan 2018 02:10:39 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:25 +0100 Message-Id: <20180102011032.30056-11-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:v2vq7ug8SImFC4NH5RqR3iA+sYr14ji95IWRVVoJy5TJUzr/HN1 o5/pom86bX2zp8M1sbAOpYPvdS6+rdnV/8YKU0WmdtlAaZf08vWZHnUk8eBVY+nuHEiQZbW k+eWMfueXRWpjwXzseK+U0Ax8XFbBJ9HZEKnhq1uJ9Xpv+NfJsDxZfDaUwm8jNzAMfkQkvu WkXrgXkn1tUgSNs5jxFuw== X-UI-Out-Filterresults: notjunk:1;V01:K0:fRfTbtR/9/E=:vUxAORHFcnXqsV26c6FpNa rEsDyqQ5w3gQPjJGyRP8B5EnXFW+Wts3YX9yw/x3dHlasB7i2AyzdCxtmHtfeY+KGgDe2Zknt hAWYpx1Vxo3uL0QWjKHlVX6Yle8xq41gsg1ga7e+2lXJdzUdhJH2AX87Vrt5c101uItbiBjnQ dAoIJU8QIvtoa/V3/KprL2bTCxxti/lS1wbomQH0kYzhJBGuPJqcWyT6BYDDlJUmpd3q02xZi fF0y2J2xY1vR91c/DmeQLQajrB+v2uQ2bkvYtX6SSXk5knWEMkQDiLFgfjGneYF7K83M2kALl KZlTHzCd+Jcm4s2AlbNR4BslkVNE9GR2lQyKV0ISgBlWO2DJmzfaY+h4vRbPU2bY8ZUygEH6V b2Jg3symWQs/nSWEbZyq6y7ALoPGxe0Gtnuuk9fxWICyoxaeAuYvkkSl9td81U82pY/tN1MbP 6dYuUuP3DxqDWgjBnp1a1PNvGQw0T/lE2NdIKqdaRPb64tff6Vur4I1cGP6X/e5K5VboFqdLr MKUgXoJ3F6BP7IIJnjeGAH6Wn8i6BhqLCxeVqM/cApFOiYS0gqX+WV8wEMP8s8a10i0pTY0cw AertGFZ1jTFk3VD40BAuPm539uurQU+z4Vp5PemWGa4dAt9ceACNuH4Bbbldt/vOG3L9Iebmx KBEfvnRzEtOxlpi8+0DhmPXCGjseD6WzOQzj1cA+OTCQDsIyhk4cmY6zQJtkvW9Zg1fyIRiAW kGhxzsoF7LtaqGmjKieoQDWHcTeopLOyQjV4Aw== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 --- target/m68k/translate.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index d463927fcc..2a9a9c8e42 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -4558,6 +4558,24 @@ DISAS_INSN(cpushl) /* Cache push/invalidate. Implement as no-op. */ } =20 +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); @@ -5736,6 +5754,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 --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514855577453907.2826319714425; Mon, 1 Jan 2018 17:12:57 -0800 (PST) Received: from localhost ([::1]:50738 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB8P-0002nY-8H for importer@patchew.org; Mon, 01 Jan 2018 20:12:53 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36118) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6L-0001Y1-L1 for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6I-00056q-9P for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:45 -0500 Received: from mout.kundenserver.de ([212.227.126.131]:57888) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6H-00055H-VO for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:42 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MSmNI-1eORMB3Tro-00RVhf; Tue, 02 Jan 2018 02:10:40 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:26 +0100 Message-Id: <20180102011032.30056-12-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:Z8Z2tR/2UFo2RIDtRT+Is5nHgJ2y53Hc5302d7B0VHuEFpuOjki klEJejdiPwGoRC4rP7CRX6Rp00wpY4NHIeK/SNkHhVGANSAJcdQzKAltsuC2J70+RGPqrV4 45PLoI2dGhaXyXoC9DnHLBA0uTV2caGdRIpNBG+xJTJWgs+XYCI+6g0spni2bVjsXPsItr1 zcVktSbpt13vqAY1jjcJQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:ToLmmiuCKMw=:1mUlhpZdXjncBCM7t6D9PT NInuovNphYHpiFm4Y0XSjEQ0+17YI/bJU/XkECEJjVVw+lbCaIx12FZCqMrC/IsASDh/BmTih Y3Zm9AS4fMH5EiCDUDuDapvjw9KA0TCsaVM8sE+U0pcldZ/I+Ew0ZFVcREz8u0LBdPlH4ywC2 8YBPhjZ5VPIcGu+9PJK2WUfPPr7hRAlUgQJYDK/+hSJ0+dtFf5O8PEsLjB/vHAxlWNmfmf22h QuLXvjcTa0NpLmLAg1BUX6Xo6pA2sb1KnlqP1yq1zriGQsAjEZp68uFQLiMHnUcM+GQWUUqBs tB/WybbS1TtAJFjqwZECNd+0kGBKtgg+s8dDk3sdXnlE7OFuNxXg3pkZCJFr0pEpZB+p1W/96 gPCLhxcWLsPMqzIIOI23IHM2TKemwezQU6uTnEyg4MjFVpA7HLhHb687TXzs4qSba06sdtvWO rILkoUpoief+OdksgpYFokI7km5h0ZLEXre6HCz64usYYuYT+a/k73Ewd932U/fSWgy2Yd5x/ bip5MEJUBO1ieIKazqIxkgDLz370Tw5CPi7uvs5Y88OLQ4PNhawfpOmG3i/n0I+j9/USlvxDM QpfDkwp6eVBSYd6asvIftR4rWTYH92UG8NZxDt3kdiyLkwoPkkt1ENn8aYmb96EkBrkRd3Lt6 EYS3lhR+3yg9liRbwDQufPDChe/TX1F6Za4veesvRHwwDJ11qiPuTZ6mH1+28j5CWF5lZdkz8 z3zxuZ6Tc9fL7TfMhu3q1OEKUvHKVDLU/BDDvw== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 --- 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 7e50ff5871..f8bd456145 100644 --- a/target/m68k/helper.c +++ b/target/m68k/helper.c @@ -707,3 +707,10 @@ void HELPER(set_mac_extu)(CPUM68KState *env, uint32_t = val, uint32_t acc) res |=3D (uint64_t)(val & 0xffff0000) << 16; env->macc[acc + 1] =3D 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 eebe52dae5..8d0cad7c6b 100644 --- a/target/m68k/helper.h +++ b/target/m68k/helper.h @@ -94,3 +94,7 @@ DEF_HELPER_FLAGS_4(bfchg_mem, TCG_CALL_NO_WG, i32, env, i= 32, 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) + +#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 2a9a9c8e42..68b67bc0a3 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -2762,6 +2762,18 @@ DISAS_INSN(unlk) tcg_temp_free(src); } =20 +#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) { } @@ -5634,6 +5646,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); --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514856307580902.3296778697294; Mon, 1 Jan 2018 17:25:07 -0800 (PST) Received: from localhost ([::1]:51077 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWBKE-0004O7-Rb for importer@patchew.org; Mon, 01 Jan 2018 20:25:06 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36120) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6L-0001Y4-Kr for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6I-000570-IS for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:45 -0500 Received: from mout.kundenserver.de ([212.227.126.131]:53606) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6I-00055Z-73 for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:42 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0Lwioi-1eyZzM13GK-016LlL; Tue, 02 Jan 2018 02:10:40 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:27 +0100 Message-Id: <20180102011032.30056-13-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:2p13maU8BJZGU1InoTO0qQTpaQBgD3aEcGDEm5Btt5WRguD0ObI XVV3MyWFd22LKc+eaOQzXQll9Q4XDpMi2QQRGM2LTiZ1eY8maCpeQ5unt86zd0JH/CyESgd KNmBjsYfViCpjxVstzC19FVYIPzS5aUyGBrco+yZ7JYuDyBAmgjfnzHZltyEyv1MJ3HqjDm +zTWpuM2657btkmy/JMZQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:SYevzjnk+7Y=:jUzUL+DUmwH0jBPkWKwLV+ okniGxJ9X/6qbJ90zmwvleOGu6mkkXNjFmElVmyeaDEEpNbieHXOkKNslWdgODkjR8N6em1IG goDdg7QsJv8tHLPw0sgD16ZTOvWRAaNfFZ8knpvcAtTDk+1iV7ZDf/bO4XZyDFyD5s/EbmgCF T6CtDl7X4M2d26dEZTeLzjvNdamlyyN9iBkraE/3IPpjW5ZGfWMZayhASjNt/M5Dk3updsGUW 9brQA/K4Wb1auptxzYKWzG/Kkw7dN7mDfBk97g70xiCGFsE3FI1qKaaaO46uE8jL2axqJc7d6 wV3qxo6b8LjjZOCrWaAbbH4GIHZPjLl4s/uKzGwVQqlScwiJi9VdtxA2lFb2bFxgJPx5MdEus uzDfcl/+PS6tzAMw7FzsVsDVIrN+dw5xkEzxcDytd7CblnziH9CsPiSCez0iC4owSrBGBT1cE tHT+jTr9Y7SSkCWym/EvHz85N6Hen58yrXigTxNcLkaXRUuTiS4NCaFK8ko9APsFvzkNFHu40 ZzFao7bAdboHlcaM2qn6MwnOflJz7IUyw7psjfIwhAnIsF/YNdsxhktV5TOKB9AeIynjTn5Ze AGmBrMugl+rFtONZiKYgb2C/NyBnqRbm4QjjI0/I0o+Wzogi6Cbt83wBiBpJFJ/lbubWEyF5Z XRfhCBCDKNrVnHZXFqMtccUdqt1xXKwdYTbX2ujSgQIULcGEYJ2T8goqWW/tP5iu3RKltRpIe QkCSSPPWfwrtuoJJVRkQPesOXvMWfkg4oVk3Xg== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson --- 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 68b67bc0a3..4fced68ceb 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -5165,28 +5165,35 @@ DISAS_INSN(fscc) #if defined(CONFIG_SOFTMMU) DISAS_INSN(frestore) { - M68kCPU *cpu =3D m68k_env_get_cpu(env); + TCGv addr; =20 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); + } } =20 DISAS_INSN(fsave) { - M68kCPU *cpu =3D m68k_env_get_cpu(env); - if (IS_USER(s)) { gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); return; } =20 - /* TODO: Implement fsave. */ - cpu_abort(CPU(cpu), "FSAVE not implemented"); + if (m68k_feature(s->env, M68K_FEATURE_M68040)) { + /* always write IDLE */ + TCGv idle =3D tcg_const_i32(0x41000000); + DEST_EA(env, insn, OS_LONG, idle, NULL); + tcg_temp_free(idle); + } else { + disas_undef(env, s, insn); + } } #endif =20 --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15148563787981.000701584069816; Mon, 1 Jan 2018 17:26:18 -0800 (PST) Received: from localhost ([::1]:51107 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWBLN-0005AK-T8 for importer@patchew.org; Mon, 01 Jan 2018 20:26:17 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36116) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6L-0001Xw-KC for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6J-00057j-2y for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:45 -0500 Received: from mout.kundenserver.de ([212.227.126.131]:59299) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6I-000566-M2 for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:42 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MZ5db-1eRSIF2pJT-00VeQi; Tue, 02 Jan 2018 02:10:40 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:28 +0100 Message-Id: <20180102011032.30056-14-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:2kAwRj4nZ8bYNAIgiwEFZJs9iZPNsFKhirTOLbV0yvUtTuqw//3 UagsXP6FLMhgTVFhauMITEzaD8dCkfia5tE27XOaVqaDuNbmUoAhqAJOrFPFQC5yMowEFJy XspxxLD8GA8yVxhhhQLXMjUR92szO7z6oLInd6osgrRnb0lDeBYiuYeIWZRqSx6ADgW+nL7 7DAQr8i7XGX3G7oMF3HVg== X-UI-Out-Filterresults: notjunk:1;V01:K0:345SlLORMQo=:dQKPuimzWP4tfhHPlsIczc Y6FIRlZQv4Cptn9ROAg5Cuh4+i2BlTQT06/zyCJ0ts4MeRjn4Bdz5MzdNCIFivqkKOS0ulEIx qCHmQr7gn/ddH1jFk+Z6PCMkIWR3rKLu0e8O0gKSAFeIwxvpvM+PTjq955b3zDRh4q1JQWLGd 0ynJ/3fKrNO7afFeez3BwKdgj4tZtu0rvx405osucFxBg8DYVri9Bj1jLfgulcqtoV9O8EoDE M78zcJGFE9j7B9CjDs9XGlBDseaohI9ZdzWgxRbgpBJrc+lmUXYdUGpECSn6okWNtrdPTX8sh 6e8ykKYElfS2fYfyIcGOf0u6vGQoEwy8HUHKYlAH/Vc9M61A3auHW521/EgzZaah7UpnhRkNY 8nDUIL045LEns9mrEdZiqX8HmNYDK0nLLaeAsiMvPf7rysSxBDhkWgjpwPxmyt9VnKmC5wNq1 S6F12v7d/FVPyq9KePu1ELEHgTLLojKLhSWqyy5/CW6LVPsDDBuLQKDjsnCTMvBklGvX8tE9t R42+XIArAKumgKhsB+puGOwSfX5N6rJ6gWSnzy5H46FZlX3imEA2Y/RmaFoy7aRntkDY6hHpW spl+BOT2opAijZKzvoasm8Bcaq6I/WfH6FTPgRrYCPQU4uyT9exzC676K2uapJ+UCV6SXXgVf ApQQL4TQ7zZzsed4HQxp8Ds5HpL0/iiiC7ogOiVGRwbc+1D9C+ul9lfO/8hQ3PmWk2PKX3Uy8 g215vw1jpvzDWa+bQBaWIkdX49Ym+mQqtd+Fxg== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The following patches will be clearer if we move functions before adding new ones. Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson --- 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 4fced68ceb..cfe9fd34df 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -2131,6 +2131,61 @@ DISAS_INSN(bitop_im) } } =20 +static TCGv gen_get_ccr(DisasContext *s) +{ + TCGv dest; + + update_cc_op(s); + dest =3D tcg_temp_new(); + gen_helper_get_ccr(dest, cpu_env); + return dest; +} + +static TCGv gen_get_sr(DisasContext *s) +{ + TCGv ccr; + TCGv sr; + + ccr =3D gen_get_ccr(s); + sr =3D 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) =3D=3D 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) =3D=3D 0x3c) { + uint16_t val; + val =3D 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); } =20 -static TCGv gen_get_ccr(DisasContext *s) -{ - TCGv dest; - - update_cc_op(s); - dest =3D 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); } =20 -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) =3D=3D 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) =3D=3D 0x3c) { - uint16_t val; - val =3D 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); @@ -4421,18 +4432,6 @@ DISAS_INSN(move16) } } =20 -static TCGv gen_get_sr(DisasContext *s) -{ - TCGv ccr; - TCGv sr; - - ccr =3D gen_get_ccr(s); - sr =3D 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; --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15148561366411011.7573191459078; Mon, 1 Jan 2018 17:22:16 -0800 (PST) Received: from localhost ([::1]:50929 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWBHT-0002AO-Sv for importer@patchew.org; Mon, 01 Jan 2018 20:22:15 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36102) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6L-0001XT-3I for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6J-00058B-F7 for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:45 -0500 Received: from mout.kundenserver.de ([212.227.126.133]:55187) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6J-00056g-24 for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:43 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MNyjT-1eY52g0TyV-007Xzs; Tue, 02 Jan 2018 02:10:41 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:29 +0100 Message-Id: <20180102011032.30056-15-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:zWxwhLwV/T0h1f1y5Ye7W5fi/XkNa6SaAo74eLm63UM3xMy6rPP 1yJFzGLtUvIPkpohhM7yPxc29cIVcToQsODZzPfNzzhiiGs2NQkxmebTeIaHb0VKWs1XfKe mNbdFiOio6OnkGYXP5YE6b/Iuiip6AW2uDocFKuNsWl6undjFNrWwqbh7itbpxpN4lvi+kN 5vspFegqFZ+f+HBCe+yZQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:XMsfFQQB4pc=:eco40HwCIokDgNusoGmxdJ N4We2S/X93W6t3jr5Ul2MSmeI6Echab26c3rlVUvzqdAp3i1PjxySy0EigI2cbnKh8YQfagg+ ajwRSpaJTqY4+IBkUOJXJH5H1Gf4rCyDg4N5DQqx7pH9kwhyM9IhRg4mAnYfDIXCA9eXmsaur hx7NcTtl3jLNybZ4MuLCpIwkdMJ3ui83WCYgHcYC2qzvgz5EkmlikFyolUgs2iHha33OEFR0k JQYp9GjA2292whQv7rImb9GX1lGSMWMPSIV39pxAsePUFijaQ3x7aBri3FdDsLRitVOoJ+WWb eDFkhh4TNGiynsCZaiu+r3IE0icROudn5euD7Jbp4G2RolI4bV8OKAdnbipNvWHuuwzZSDKGR dsH4OJntnzwSqbprWpOddTM1NRRkVVKG4GARqc53j73ic8L22H/TFnoIu3RH7NkC+Xyi+mKpB wA5QVOWUATMM6UtRKCSKKMjNHj8Ce2QGxKn+rzOXjUMiYxYRfzl2UFqoLX3d5+gIPALXuY7PK 2b2O7sPtqA3stc3p9fUGYTSb3hBh8iXqRadVu7kV8wZ8ieY+EToxnVFrhBqg7l/30IBvWF6s5 pdXKqbybjgKV7g3O1ANcBd8DswirL770HPBYmvOQUSTK4GSyzyW4dAQNjnCvFk6TxttP6We8v 7lhQ/rxIR4gOyujihCJqiyVhk3CKebpVeUkHeI2J6RROXw97xinTIvr/imsUC4fU2cKqnIrc2 VMeVXFSIipXdqGXpBnEP//JnkfihmX9Dt150aw== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 --- 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 cfe9fd34df..1a462064be 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 =3D tcg_const_i32(val); + gen_helper_set_sr(cpu_env, sr); + tcg_temp_free(sr); } set_cc_op(s, CC_OP_FLAGS); } =20 -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) =3D=3D 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) =3D=3D 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 in= sn, + bool ccr_only) +{ + if ((insn & 0x3f) =3D=3D 0x3c) { uint16_t val; val =3D 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); } } =20 @@ -2557,7 +2564,7 @@ DISAS_INSN(neg) =20 DISAS_INSN(move_to_ccr) { - gen_set_sr(env, s, insn, 1); + gen_move_to_sr(env, s, insn, true); } =20 DISAS_INSN(not) @@ -4471,7 +4478,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); } =20 @@ -5618,9 +5625,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); --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514855885723437.3307473386118; Mon, 1 Jan 2018 17:18:05 -0800 (PST) Received: from localhost ([::1]:50809 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWBDI-0006qr-FF for importer@patchew.org; Mon, 01 Jan 2018 20:17:56 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36119) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6L-0001Y3-Kk for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6K-00058Y-1E for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:45 -0500 Received: from mout.kundenserver.de ([212.227.126.131]:56261) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6J-00057L-K9 for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:43 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0LpCPV-1fAzcy2LLx-00fFBe; Tue, 02 Jan 2018 02:10:41 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:30 +0100 Message-Id: <20180102011032.30056-16-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:eDQC8F6hB7Yb/koOZc5VaoksZQXdMTOrMzhgGCrp1U16IKkdtX/ 4Zg0vOWBztcq8z06tasnpvNYOKHC/x/X4qRVsJ9ELVCKYlrhbt/1dZO1zXh1uS0DUvfCcw5 ke/8zXWrcR1W1ake0faqkJ38MD5VVhCewZ62Bw4ZSGQRWf3DXIEpIz++AFeHgiL240URQlj MDgcE7Bpy5zRsAlN3zNXA== X-UI-Out-Filterresults: notjunk:1;V01:K0:8sQ7sWPfXe0=:oIflvlJKrCMLQrX+q49CO8 5C1+buMBG5KUHhzkYAwkWaJWL60gi6Nq2yroE0tOHBsqI+8v7oWRYSHoWIsLL2GOu6X9YUnsW msYkOcuRnlHNcsQooBL1pwpd2LYNf6ALHBF18Z2COPqjJsVTt7nSCKVuHe45oQq1QeWobIl+Z 9mgRYDKdpm8cQTjLR6vkh+GYLhvIVaullT83YjHxI+7etKeanUZY7eMNVqoYGZfztI3bfAder uSq4IjjNwh4845qYmi5YWa61JDsozxD+VOUBrp9IWydsajdzaEru1NEMQJnmupsI6I1Z8KrCX kPUPha6r0qG5C0aHPpJGYj+z1PXKcXHjX0eCOQUauWc3Q4NwP3+18knOHl/Dl51jmACGDsOnY 58Dqw8xtCXPtqf6kersBw/6Xvpw25IAv7R3EVkUjfn0E+cyR94c6VKaYU+SNJIHQOoL+qF+wV 7NtvyUQDKuICQor6fnNhfn3HFe83YOiu3yUnVcTzMiPixRL2dtKB8tExE2ZfckEqpbqL8ZdQ6 Fqq9q+pGbv/cM3qZdBqfPFVkxUehGLriMeDIziwdumQfQ0Ke9+Db+xaUlci1NFjxx0X8yihaj 2igU7zJ65Y0HS7fMo+ylCS/UkMuPT9/VUDq75bBlcb8rfc5FxOEHSgMq10Zy/xwa8tNrnO0VD AmfU8vNmDDo0EJvEx0VRFKCHeCV9fr90JBgZcp38fP2X7qYMFT89g2eS1uUinmfO4m55m0C+t knxNUxCLLC0cgtseKafX3znCfwFabXE/H5v5kA== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson --- 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 1a462064be..ee59b5bad2 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 =3D ((insn & 0x3f) =3D=3D 0x3c); =20 op =3D (insn >> 9) & 7; opsize =3D insn_opsize(insn); @@ -2217,32 +2218,73 @@ DISAS_INSN(arith_im) default: abort(); } - SRC_EA(env, src1, opsize, 1, (op =3D=3D 6) ? NULL : &addr); + + if (with_SR) { + /* SR/CCR can only be used with andi/eori/ori */ + if (op =3D=3D 2 || op =3D=3D 3 || op =3D=3D 6) { + disas_undef(env, s, insn); + return; + } + switch (opsize) { + case OS_BYTE: + src1 =3D gen_get_ccr(s); + break; + case OS_WORD: + if (IS_USER(s)) { + gen_exception(s, s->insn_pc, EXCP_PRIVILEGE); + return; + } + src1 =3D gen_get_sr(s); + break; + case OS_LONG: + disas_undef(env, s, insn); + return; + } + } else { + SRC_EA(env, src1, opsize, 1, (op =3D=3D 6) ? NULL : &addr); + } dest =3D 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 =3D=3D 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 =3D=3D 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 =3D=3D 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 !=3D 6) { - DEST_EA(env, insn, opsize, dest, &addr); - } tcg_temp_free(dest); } =20 --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514856451785134.43472779130275; Mon, 1 Jan 2018 17:27:31 -0800 (PST) Received: from localhost ([::1]:51129 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWBMY-0005oD-Vs for importer@patchew.org; Mon, 01 Jan 2018 20:27:31 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36170) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6M-0001ZJ-ON for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:48 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6K-000593-OL for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:46 -0500 Received: from mout.kundenserver.de ([212.227.126.130]:63927) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6K-000589-9u for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:44 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0Lwzvt-1eyr6W48Wv-016csU; Tue, 02 Jan 2018 02:10:42 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:31 +0100 Message-Id: <20180102011032.30056-17-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:RhNXfVlxTD3ACFJykmW5aKvqOIRZA576BS6Qxdx7eAQ4KDFBn2A veNckhX8z1tPv3d00DquLLJO0pryhxdMBSZCCP3EmKKPQ3ZJeaa4ORV4Bbc/CccLAxibov1 Fw3R4uWP6IbSxMQjEBhiwflJCc1RDDD4X8xa6l2AfdJz4VKTI/NUM02SMh63e9Gtr7TG14h BxYoLmpyFTnwcm0/9W3Pw== X-UI-Out-Filterresults: notjunk:1;V01:K0:KIcVuS251iY=:C96e3AAxvkY8gFlR7D7zY5 ywXwRiWXGRvdANnDqZl6JwDnjrwt3q4XCPKxn7C19C3wtfJYL7zZty/P9U+X5UZAk0f5yPe5K 5lFUg6USl2UDUMlw2UT/EUjVt/0GQndWap9ZHYPJ8yvhbRQr72zDnSyJe7u+e+ROH7HgAu1/P 0gvcB3xBSvyB7lei+sQwz2jq/FDzvpHOrdqlptySw+BXBO2y1NZmARMX5H2lsNyjH0mfX/qrd 8MNyOZggSl48F/OYIcJ8ae4zznMnqYaJm34xf5oaA7jZRvHdfpzhEgzMXzDdXJJPoJ0bt4IeC GFBfUwapjxVg5L1guzqlHIuq4lB6fv4sxZKK5y0vr24n3VSaoALzVT7gbyi9/fW0Ek9utQZLW 8YiCZYtqToZbQxp5HcsRDdCXO2H/Crq3ldqJeL52d7hTdCfnuSXo70TcpLI5g6wk2BID9fNqp plf7+Omor1TH7zje1U83T2l7xtzx1BAPHzTXMVIznwzzQO9EsPjzL8h8gKCJskWF/I3YP5Qfy h1hMFl5cVgMmOkdvgBcAAe7nkgzoJWxInnQdUzmeHxclm7QC0hf+pzIxiCQ8dVJXIEfgfqbkO WTXdc5GcCehHSmRrVDl82YS1ZZtJGhxgsg3g4dV29Tfu0Ol45qzpyczHHiILcsJoHp6JYhCux CyOOcZ0cOCbBUx8UBvU54MNVI4BO2CPW4mR0h6Sgf+gDRR9+k9TEj0Wl2nWCGnKEwDtStg66R qMguatIt/frPukW84U4qP0SjpnAkvslcza1cEw== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 --- target/m68k/cpu.c | 3 ++ target/m68k/cpu.h | 70 ++++++++++++++++++++++++++++++++++++++++- target/m68k/gdbstub.c | 1 + target/m68k/helper.c | 82 ++++++++++++++++++++++++++++++++++++++++++++-= ---- target/m68k/helper.h | 4 ++- target/m68k/monitor.c | 1 + target/m68k/translate.c | 40 ++++++++++++++++++++++-- 7 files changed, 189 insertions(+), 12 deletions(-) diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c index 1936efd170..4138496938 100644 --- a/target/m68k/cpu.c +++ b/target/m68k/cpu.c @@ -57,6 +57,9 @@ static void m68k_cpu_reset(CPUState *s) memset(env, 0, offsetof(CPUM68KState, end_reset_fields)); #if !defined(CONFIG_USER_ONLY) env->sr =3D 0x2700; + if (m68k_feature(env, M68K_FEATURE_M68000)) { + env->current_sp =3D M68K_ISP; + } #endif m68k_switch_sp(env); for (i =3D 0; i < 8; i++) { diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h index c21e36d1af..fdb780c81c 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -89,7 +89,7 @@ typedef struct CPUM68KState { =20 /* 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]; =20 /* Condition flags. */ uint32_t cc_op; @@ -222,6 +222,74 @@ typedef enum { =20 #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 =20 #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..c44fd0f4a1 100644 --- a/target/m68k/gdbstub.c +++ b/target/m68k/gdbstub.c @@ -64,6 +64,7 @@ int m68k_cpu_gdb_write_register(CPUState *cs, uint8_t *me= m_buf, int n) switch (n) { case 16: env->sr =3D tmp; + m68k_switch_sp(env); break; case 17: env->pc =3D tmp; diff --git a/target/m68k/helper.c b/target/m68k/helper.c index f8bd456145..c5be2f3e77 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. */ } =20 -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 =3D m68k_env_get_cpu(env); =20 switch (reg) { - case 0x02: /* CACR */ + case M68K_CR_CACR: env->cacr =3D 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 =3D val; break; /* TODO: Implement control registers. */ default: - cpu_abort(CPU(cpu), "Unimplemented control register write 0x%x =3D= 0x%x\n", + cpu_abort(CPU(cpu), + "Unimplemented control register write 0x%x =3D 0x%x\n", reg, val); } } =20 +void HELPER(m68k_movec_to)(CPUM68KState *env, uint32_t reg, uint32_t val) +{ + M68kCPU *cpu =3D m68k_env_get_cpu(env); + + switch (reg) { + /* MC680[1234]0 */ + case M68K_CR_VBR: + env->vbr =3D val; + return; + /* MC680[234]0 */ + case M68K_CR_CACR: + env->cacr =3D val; + m68k_switch_sp(env); + return; + /* MC680[34]0 */ + case M68K_CR_USP: + env->sp[M68K_USP] =3D val; + return; + case M68K_CR_MSP: + env->sp[M68K_SSP] =3D val; + return; + case M68K_CR_ISP: + env->sp[M68K_ISP] =3D val; + return; + } + cpu_abort(CPU(cpu), "Unimplemented control register write 0x%x =3D 0x%= x\n", + reg, val); +} + +uint32_t HELPER(m68k_movec_from)(CPUM68KState *env, uint32_t reg) +{ + M68kCPU *cpu =3D 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; =20 env->sp[env->current_sp] =3D env->aregs[7]; - new_sp =3D (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 =3D M68K_SSP; + } else { + new_sp =3D M68K_ISP; + } + } else { + new_sp =3D M68K_USP; + } + } else { + new_sp =3D (env->sr & SR_S && env->cacr & M68K_CACR_EUSP) + ? M68K_SSP : M68K_USP; + } env->aregs[7] =3D env->sp[new_sp]; env->current_sp =3D new_sp; } diff --git a/target/m68k/helper.h b/target/m68k/helper.h index 8d0cad7c6b..c63db23503 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[] =3D { { "sr", offsetof(CPUM68KState, sr) }, { "ssp", offsetof(CPUM68KState, sp[0]) }, { "usp", offsetof(CPUM68KState, sp[1]) }, + { "isp", offsetof(CPUM68KState, sp[2]) }, { NULL }, }; =20 diff --git a/target/m68k/translate.c b/target/m68k/translate.c index ee59b5bad2..bd43e60a23 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -4576,7 +4576,7 @@ DISAS_INSN(rte) gen_exception(s, s->insn_pc, EXCP_RTE); } =20 -DISAS_INSN(movec) +DISAS_INSN(cf_movec) { uint16_t ext; TCGv reg; @@ -4593,7 +4593,32 @@ DISAS_INSN(movec) } else { reg =3D 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 =3D read_im16(env, s); + + if (ext & 0x8000) { + reg =3D AREG(ext, 12); + } else { + reg =3D 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); } =20 @@ -5700,7 +5725,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); @@ -6006,6 +6032,14 @@ void m68k_cpu_dump_state(CPUState *cs, FILE *f, fpri= ntf_function cpu_fprintf, cpu_fprintf(f, "RP "); break; } + cpu_fprintf(f, "\n"); +#ifdef CONFIG_SOFTMMU + cpu_fprintf(f, "%sA7(MSP) =3D %08x %sA7(USP) =3D %08x %sA7(ISP) =3D %0= 8x\n", + env->current_sp =3D=3D M68K_SSP ? "->" : " ", env->sp[M68K= _SSP], + env->current_sp =3D=3D M68K_USP ? "->" : " ", env->sp[M68K= _USP], + env->current_sp =3D=3D M68K_ISP ? "->" : " ", env->sp[M68K= _ISP]); + cpu_fprintf(f, "VBR =3D 0x%08x\n", env->vbr); +#endif } =20 void restore_state_to_opc(CPUM68KState *env, TranslationBlock *tb, --=20 2.14.3 From nobody Tue Oct 28 01:50:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514856136175185.519862961218; Mon, 1 Jan 2018 17:22:16 -0800 (PST) Received: from localhost ([::1]:50928 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWBHT-00029v-Ce for importer@patchew.org; Mon, 01 Jan 2018 20:22:15 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36133) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6L-0001YB-QO for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6K-00059F-Sl for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:45 -0500 Received: from mout.kundenserver.de ([212.227.126.130]:55851) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6K-00058N-JG for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:44 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MceGG-1eEVj02bui-00HdnX; Tue, 02 Jan 2018 02:10:42 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:32 +0100 Message-Id: <20180102011032.30056-18-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:sPuLd+FnoaWTAIRXdtECU+iB2VcQjjGXsLvZtzjHrorVtu5XUup oAv/vdv01egkAJgH9mQFHYWJxHFWxA4IeVpRRbtu5NCp81JPT7i4YFzn2pQKRt9DYX66P7f ruH3hfTgGCkOyxK55K+0JyyB57cFozZlBker4KOnskhyFIG0icVeASHzboyZFXx2lClCs8x Fc1ZkaOzvoE6i57fIpDNA== X-UI-Out-Filterresults: notjunk:1;V01:K0:ubh6RujvGgk=:5CYiftWYamJsP05jPou8ob MMZ2T/S4ZMcY9AQTTpI+Mqm1d2qbDQv6VdV+xzL6p6v5zRQLCM0oNXY1LxCWH9/E10/Mboseh Ay6iCn14la3b+1KVYKJpTnlPj31tbXmo1e+agMtYbxuk2eK8uiD8Xa+8c65ToSK5gVeXYYJsb IeiSdSBmma91GkW98OHHd4rRV9sGroPQI0EXuuD8jXnR+LWd2bUe4zyiiHm09uNd2pRmFDvW0 8IyY7XTurQKGunCg0jvPePOcfD6VFbT0nMOeU7zmSfibbU2viKv1uTAqARDGTeNZLQKWb8Px5 0U7xYKeA4ddFOux9G3e6zwD+gqsBBBueHDXLSrAxa+SSIp/jQtxwzv9a8+0eY+YLAvagnCNiq a7XAxrr1bGe+wxXAyNkNf697H0jTWzcIAvMdA56zTVOeSA8DdkLfmDzVlE15FtcSkf1UA2QAv 9jMY5d4Jw+bIS7To3J9ocPv9J/n605g+skfvD48T5djx3LrUrVQkHRTLj3JMYUyI2We5EU+ES zpGmsMy/zQKxnZQ/5GuMt4d5RRsKdE92YoiJCwX16AvYTwpd8+i75ahRVWnXGpmy3gTWv1Ano kq57+Ri8q9+l6tRl+JZ6DpWCmCG3Dg0se4MKDPvqSpEy0ujbGhEAcI6kETGNjMrgHpdF4Z9JS MGaBq7RDCEfsPXPoi/r7NExDsYnKPxTIAm5qOXfocAUKi9TJZlV8Cx0hf28EXcw2QYagcqcht QnvwPIoNhJoqLSDl5tP24m6VjtyE0vyqJxlDnw== 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] [PATCH v5 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: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Display correctly the Trace bits for 680x0 (2 bits instead of 1 for Coldfire). Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson --- 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 fdb780c81c..41714d8fd6 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -218,7 +218,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 =20 #define M68K_SSP 0 #define M68K_USP 1 diff --git a/target/m68k/translate.c b/target/m68k/translate.c index bd43e60a23..a7937de8d0 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -5997,9 +5997,12 @@ void m68k_cpu_dump_state(CPUState *cs, FILE *f, fpri= ntf_function cpu_fprintf, } cpu_fprintf (f, "PC =3D %08x ", env->pc); sr =3D env->sr | cpu_m68k_get_ccr(env); - cpu_fprintf(f, "SR =3D %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 =3D %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 =3D %08x %c%c%c%c ", env->fpsr, (env->fpsr & FPSR_CC_A) ? 'A' : '-', (env->fpsr & FPSR_CC_I) ? 'I' : '-', --=20 2.14.3