From nobody Tue Oct 28 12:15:23 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