From nobody Tue Oct 28 04:13:16 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 151493743438741.0002255568312; Tue, 2 Jan 2018 15:57:14 -0800 (PST) Received: from localhost ([::1]:59902 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWWQf-0003sJ-J2 for importer@patchew.org; Tue, 02 Jan 2018 18:57:09 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52454) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWWBX-0007CW-6n for qemu-devel@nongnu.org; Tue, 02 Jan 2018 18:41:33 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWWBU-0003BP-GC for qemu-devel@nongnu.org; Tue, 02 Jan 2018 18:41:31 -0500 Received: from mout.kundenserver.de ([212.227.126.130]:53351) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWWBU-0003Ao-4f for qemu-devel@nongnu.org; Tue, 02 Jan 2018 18:41:28 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue005 [212.227.15.167]) with ESMTPSA (Nemesis) id 0M0N4b-1elILY2WDt-00uaWu; Wed, 03 Jan 2018 00:41:26 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Wed, 3 Jan 2018 00:41:06 +0100 Message-Id: <20180102234108.32713-16-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102234108.32713-1-laurent@vivier.eu> References: <20180102234108.32713-1-laurent@vivier.eu> X-Provags-ID: V03:K0:qetgPlw0ZO/hrCt7/B82k5xzM0G5RSV/Jiskol5lxOiW4vHmVEh zYxm5SVcgmwgLIIblpD0ecFk6zvasGZZxq8n2bWsNZskE5vHMTQMYC7AMRhhfNaZmF2x27x pcFUy7RECcFpfESc9EpwawEV9e41vPLupWOfLBe2OwKovxXnSZ9i3OY3xkQmNn6T+i3kc0Q wXrM7agvkCvbBDyOF5B2Q== X-UI-Out-Filterresults: notjunk:1;V01:K0:m7bugPGoRM0=:uRMnewbgkyOCdyIkNv9/fN g0ZcfpdpjJ0bVvqCq34HDWnDhjZPQrgmK6IPsA7Hr090Xk42yLIJ0JEQQRqCopyU/s29puvpY kHLqsb1b4rbzIAaSr79osnyUwfNcJsQUal7obIkLGbncplbl+R91EZn4uZZYpHzv0vZKxYmMb MrRfNJ/MoyPMcISZ96ZSLPI5zLmSHfCQHpslp0JsYUy7WY3y/0MHXoY882Mch+B8HMgDNoGFH iB5wTw88Udn9vSDmVfwUgNmIc11ACS/VQshP56L10TIo/ifcCTKuaZr+pbR7skZynWfRBd4lD xNcFW0FjkypBCBs6i72ngvUYwH06FcMzBLAU1WEp0f5512LHKVWV3/7oWKmPRfII6Dl1wfwpU JlXMaIpulzQxGOZmbzfAAfaxFEIyraaYoj8350+cWkY4vLZ6RTPJHRtlDgwqpHGJcl5fVxi03 2+CweCjmAKOVZiHw+8MKr60EjqTVnyM3aZNAb3s5BAmYP2kW8hnzGarcL1i7C7q1fkG+YWgtN fTsPg4rgKhSaAT39WOrfzkMVfb1eMsOzwVhKtiKfV/c+QC5WkMlYQgL8NPYvxQZnn3jSk1bE3 1M8iL/54vVb0mboVW9+gPMOoGWnq2ZpSPfcr33pccWYZ+rPqOz7wtpNcFhWQd375KZLfbsQsp uzqsNqXFMW5UzM91iNsPWTWDul2flPgb+xw4D0NcVhU4LeqwiekROCWLZZabpJFTM6cKZAWxQ AMVwtBtTbGS9XdqgR1hjWpO0SFkJblGnXWHilA== 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 v6 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 , Richard Henderson , 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 d007943d93..205c3b8f35 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