From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394216365238.90315937428784; Thu, 6 Jul 2017 19:23:36 -0700 (PDT) Received: from localhost ([::1]:54107 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIvc-0001o0-1d for importer@patchew.org; Thu, 06 Jul 2017 22:23:32 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33833) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTItv-0000tg-Bf for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:21:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTItt-0007Yu-Vx for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:21:47 -0400 Received: from mail-qt0-x242.google.com ([2607:f8b0:400d:c0d::242]:33147) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTItt-0007YJ-Rx for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:21:45 -0400 Received: by mail-qt0-x242.google.com with SMTP id c20so2720580qte.0 for ; Thu, 06 Jul 2017 19:21:45 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.21.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:21:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=LyNAb6FeMqzX2gcuBq0d1EKZFuajXZxXRRyCSOI/mWc=; b=u+jEjWLHB84SwAAv5mzNBRRV9+J8x8kUH5V9o40uSgFbydRGXimU4xIQthapcHt87w 5oA14r6LFBzyX6dex+x8fiXkTC/BPwGqt57myXWU/boDdzXt/Cb986eFRicouNsqQDkT KrffLd9ddrCsIHyOWa5NRHPKgdO6CCevyyAsJK7ESWHuJ5uioH3JhMLieKjo8WgXest2 HOUszjpQMnjOx+yACeyGNvEVHKDeB8pCDvgPZFuEPuvQ8RmOSAVDVjQcQWkm+OoAIOHV 2iJT3JVBQCV3X65l4JE4I2J6Z3fpuIV1QGzczfqQzAC70UipOdLA5izqi3252TS8Tgmx ECBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=LyNAb6FeMqzX2gcuBq0d1EKZFuajXZxXRRyCSOI/mWc=; b=tjVmS6XAmvWX4qetjlVpjXFZcTpmEsRscQl7kHHbrEeiDZ+gzdL3NRqzWBciCNENZE TP116KObg8BHDOWtw47DST0i3JS+9ey02lzfrsxHHWxKQ4Jx6BCwfxE7ISzPfXvqe+6l Wy08D0wbI36bsnpH/xTJ7EqjJvMFOkb8GONK8wQiojx+nlJTyhdwEzsXOBusT3qSVEBp o/5Mord73HuL2blHnyktR8jfIrDSOcWNn/ZXP09aQzVWkPbzW3oX4VP2cRgm5ZG/mlmY 0YHY6CTIxGVh2wWHC+EtxHzN4WtrJ/JmVQYbSlK2SmUi4miNmnemB8bNpBYZ/46qDpUo 3tdA== X-Gm-Message-State: AIVw113fH424eNiJrweWfLhJz8LYFVMmk+FIu6Ihnu7h06Dt7pSgsLdL 7OfIgM9R/pWYoNGlkoA= X-Received: by 10.200.47.114 with SMTP id k47mr39968805qta.18.1499394105160; Thu, 06 Jul 2017 19:21:45 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:45 -1000 Message-Id: <20170707022111.21836-2-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::242 Subject: [Qemu-devel] [PATCH v2 01/27] target/sh4: Use cmpxchg for movco 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" As for other targets, cmpxchg isn't quite right for ll/sc, suffering from an ABA race, but is sufficient to implement portable atomic operations. Signed-off-by: Richard Henderson --- target/sh4/cpu.h | 3 ++- target/sh4/translate.c | 56 +++++++++++++++++++++++++++++++++-------------= ---- 2 files changed, 39 insertions(+), 20 deletions(-) diff --git a/target/sh4/cpu.h b/target/sh4/cpu.h index ffb9168..b15116e 100644 --- a/target/sh4/cpu.h +++ b/target/sh4/cpu.h @@ -169,7 +169,8 @@ typedef struct CPUSH4State { tlb_t itlb[ITLB_SIZE]; /* instruction translation table */ tlb_t utlb[UTLB_SIZE]; /* unified translation table */ =20 - uint32_t ldst; + uint32_t lock_addr; + uint32_t lock_value; =20 /* Fields up to this point are cleared by a CPU reset */ struct {} end_reset_fields; diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 4c3512f..82d4d69 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -68,7 +68,8 @@ static TCGv cpu_gregs[24]; static TCGv cpu_sr, cpu_sr_m, cpu_sr_q, cpu_sr_t; static TCGv cpu_pc, cpu_ssr, cpu_spc, cpu_gbr; static TCGv cpu_vbr, cpu_sgr, cpu_dbr, cpu_mach, cpu_macl; -static TCGv cpu_pr, cpu_fpscr, cpu_fpul, cpu_ldst; +static TCGv cpu_pr, cpu_fpscr, cpu_fpul; +static TCGv cpu_lock_addr, cpu_lock_value; static TCGv cpu_fregs[32]; =20 /* internal register indexes */ @@ -151,8 +152,12 @@ void sh4_translate_init(void) offsetof(CPUSH4State, delayed_cond), "_delayed_cond_"); - cpu_ldst =3D tcg_global_mem_new_i32(cpu_env, - offsetof(CPUSH4State, ldst), "_ldst_"); + cpu_lock_addr =3D tcg_global_mem_new_i32(cpu_env, + offsetof(CPUSH4State, lock_addr), + "_lock_addr_"); + cpu_lock_value =3D tcg_global_mem_new_i32(cpu_env, + offsetof(CPUSH4State, lock_value), + "_lock_value_"); =20 for (i =3D 0; i < 32; i++) cpu_fregs[i] =3D tcg_global_mem_new_i32(cpu_env, @@ -1528,20 +1533,32 @@ static void _decode_opc(DisasContext * ctx) return; case 0x0073: /* MOVCO.L - LDST -> T + LDST -> T If (T =3D=3D 1) R0 -> (Rn) 0 -> LDST */ if (ctx->features & SH_FEATURE_SH4A) { - TCGLabel *label =3D gen_new_label(); - tcg_gen_mov_i32(cpu_sr_t, cpu_ldst); - tcg_gen_brcondi_i32(TCG_COND_EQ, cpu_ldst, 0, label); - tcg_gen_qemu_st_i32(REG(0), REG(B11_8), ctx->memidx, MO_TEUL); - gen_set_label(label); - tcg_gen_movi_i32(cpu_ldst, 0); - return; - } else - break; + TCGLabel *fail =3D gen_new_label(); + TCGLabel *done =3D gen_new_label(); + TCGv tmp; + + tcg_gen_brcond_i32(TCG_COND_NE, REG(B11_8), cpu_lock_addr, fai= l); + + tmp =3D tcg_temp_new(); + tcg_gen_atomic_cmpxchg_i32(tmp, REG(B11_8), cpu_lock_value, + REG(0), ctx->memidx, MO_TEUL); + tcg_gen_setcond_i32(TCG_COND_EQ, cpu_sr_t, tmp, cpu_lock_value= ); + tcg_temp_free(tmp); + tcg_gen_br(done); + + gen_set_label(fail); + tcg_gen_movi_i32(cpu_sr_t, 0); + + gen_set_label(done); + return; + } else { + break; + } case 0x0063: /* MOVLI.L @Rm,R0 1 -> LDST @@ -1549,13 +1566,14 @@ static void _decode_opc(DisasContext * ctx) When interrupt/exception occurred 0 -> LDST */ - if (ctx->features & SH_FEATURE_SH4A) { - tcg_gen_movi_i32(cpu_ldst, 0); + if (ctx->features & SH_FEATURE_SH4A) { tcg_gen_qemu_ld_i32(REG(0), REG(B11_8), ctx->memidx, MO_TESL); - tcg_gen_movi_i32(cpu_ldst, 1); - return; - } else - break; + tcg_gen_mov_i32(cpu_lock_addr, REG(B11_8)); + tcg_gen_mov_i32(cpu_lock_value, REG(0)); + return; + } else { + break; + } case 0x0093: /* ocbi @Rn */ { gen_helper_ocbi(cpu_env, REG(B11_8)); --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394223000576.822268895161; Thu, 6 Jul 2017 19:23:43 -0700 (PDT) Received: from localhost ([::1]:54108 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIvk-0001vx-O5 for importer@patchew.org; Thu, 06 Jul 2017 22:23:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33877) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTItz-0000w1-Vw for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:21:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTItz-0007ec-5T for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:21:51 -0400 Received: from mail-qt0-x244.google.com ([2607:f8b0:400d:c0d::244]:33153) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTItz-0007eI-0r for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:21:51 -0400 Received: by mail-qt0-x244.google.com with SMTP id c20so2720716qte.0 for ; Thu, 06 Jul 2017 19:21:50 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.21.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:21:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=PZrno5MYEEtXeyo7k1KUeDTCUW0wCtymyIQ7hF7N1e0=; b=j3YuIYvk2BWlFaGvGtcEPUkvyCU41jfuPN0L+KIN1UEAJshJWDQM9i4RlrFnZ6IHye inLWbL+Kk+j9kHSb9pObpN/UJw7/s1cklMtVGOdOguI4oES2XbcdZBe4zRKlyUkNJNGS bMLPjVziZbx/2bpEcDMzf1ICkL35okXYkqfACFZm4SfdvIptPkbVZpFarJ4TGchOVNCT D/PXxcIR4D5BfelVBxu0vHj9kTybS1yDyYFoVntMIIipPPX6l2XlqtM78t6L87cHBOHA TwHLjsEWqTLQi4PmUrdJ/7KGzFdgO8kEQJJ3S5hGthlmQII6SoJdNjVjTRS4Qgdrceuv g+Rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=PZrno5MYEEtXeyo7k1KUeDTCUW0wCtymyIQ7hF7N1e0=; b=XqYy/fKrfbBhsz7qcIUa327i6/aEUeeDinqYMDHpuSB8sXkKcEktpLRebHXlOh95nq 1iOdZsxkQsolr2QtuWLskeg20xafOnA/AV74uxRzo/9VQr09P0HsFzP4zlwHyID6NrLr +XpU0ty/8H4P45V3keKekFsAHG04QPtFDleGDZrGaIG/3YkRuBMe4DuVZNk4al1axDIQ OVALrbmE+XabvETXc/HVr3DSdp4pw9PdD8CjmCdZnDI56K2gWxTfVpsPmsR2Y24ZLhDw Ia5aTllUXFCfv+obTtZstV5/UZjZhSamI2GUkufJ1lO4VJ+tD4nWiGegob7zgM1WH0uV DItg== X-Gm-Message-State: AKS2vOwyiVpnJLA2NePRPUwRTAKc7aptW/0xDbU5TdZdHY/Ka3U81bT+ H/NrDP9gxnCqPdgedfg= X-Received: by 10.237.39.33 with SMTP id n30mr67844087qtd.149.1499394110294; Thu, 06 Jul 2017 19:21:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:46 -1000 Message-Id: <20170707022111.21836-3-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::244 Subject: [Qemu-devel] [PATCH v2 02/27] target/sh4: Consolidate end-of-TB tests 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We can fold 3 different tests within the decode loop into a more accurate computation of max_insns to start. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno --- target/sh4/translate.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 82d4d69..663b5c0 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -1848,7 +1848,6 @@ void gen_intermediate_code(CPUSH4State * env, struct = TranslationBlock *tb) ctx.features =3D env->features; ctx.has_movcal =3D (ctx.tbflags & TB_FLAG_PENDING_MOVCA); =20 - num_insns =3D 0; max_insns =3D tb->cflags & CF_COUNT_MASK; if (max_insns =3D=3D 0) { max_insns =3D CF_COUNT_MASK; @@ -1856,9 +1855,23 @@ void gen_intermediate_code(CPUSH4State * env, struct= TranslationBlock *tb) if (max_insns > TCG_MAX_INSNS) { max_insns =3D TCG_MAX_INSNS; } + /* Since the ISA is fixed-width, we can bound by the number + of instructions remaining on the page. */ + num_insns =3D (TARGET_PAGE_SIZE - (ctx.pc & (TARGET_PAGE_SIZE - 1))) /= 2; + if (max_insns > num_insns) { + max_insns =3D num_insns; + } + /* Single stepping means just that. */ + if (ctx.singlestep_enabled || singlestep) { + max_insns =3D 1; + } =20 gen_tb_start(tb); - while (ctx.bstate =3D=3D BS_NONE && !tcg_op_buf_full()) { + num_insns =3D 0; + + while (ctx.bstate =3D=3D BS_NONE + && num_insns < max_insns + && !tcg_op_buf_full()) { tcg_gen_insn_start(ctx.pc, ctx.envflags); num_insns++; =20 @@ -1882,18 +1895,10 @@ void gen_intermediate_code(CPUSH4State * env, struc= t TranslationBlock *tb) ctx.opcode =3D cpu_lduw_code(env, ctx.pc); decode_opc(&ctx); ctx.pc +=3D 2; - if ((ctx.pc & (TARGET_PAGE_SIZE - 1)) =3D=3D 0) - break; - if (cs->singlestep_enabled) { - break; - } - if (num_insns >=3D max_insns) - break; - if (singlestep) - break; } - if (tb->cflags & CF_LAST_IO) + if (tb->cflags & CF_LAST_IO) { gen_io_end(); + } if (cs->singlestep_enabled) { gen_save_cpu_state(&ctx, true); gen_helper_debug(cpu_env); --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394370535778.1874937640763; Thu, 6 Jul 2017 19:26:10 -0700 (PDT) Received: from localhost ([::1]:54121 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIy9-0004Id-Ae for importer@patchew.org; Thu, 06 Jul 2017 22:26:09 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33906) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIu6-0000z6-1S for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:21:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIu4-0007kU-SG for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:21:57 -0400 Received: from mail-qk0-x244.google.com ([2607:f8b0:400d:c09::244]:34290) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIu4-0007k5-Nh for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:21:56 -0400 Received: by mail-qk0-x244.google.com with SMTP id 91so2758598qkq.1 for ; Thu, 06 Jul 2017 19:21:56 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.21.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:21:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=U15tUBzVdM7uJXA0+8ZOa5CzWxUH0IpH7gw63PiNv2c=; b=oqy1Z4H7CJQfZuUt9Fat1Rj7UFWq1GBzaECAopt18jPTrblMmTczehzohSXyaIalnj WW12FcM96Iq6E3wGyfF6HbGoyD0Hmpm5s0YWViMv3627zFoG6IYHoKCG87kpXq+wMP9H 9z6/1HomtM2TpoooDtOfyMaexFeDKkveSwZVpANkdpvNgyJewg5B2kBtLw68xMoL1wmY klOhiuk6hAoJnVF9h8jKJJU4Lzkf0HcTVGl8LbssiaTrDcdj8jxqltebr8HQ1FpsBkGW WHi6asnPQEUpEEFw8GvvjXjhEK+Gy/wjRcX9d1RrLD+RBFX8jIr+YHXy3IPJ47BW7iOD vtqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=U15tUBzVdM7uJXA0+8ZOa5CzWxUH0IpH7gw63PiNv2c=; b=gz5AhREAQnggQkpugD4aicHfmNmZe/0gxMhKeGXcJQ4RmPFU127pkIxAtldZPxstTu UZcCPlqcawSU6QqE5TqmTcOlFp2YU0f38enDIEABdKuWjidlXam/BbTrYmZduzRIkNwE Ea5Ghkva0424Lo9CIJxKLyKhTqcpfxkFeD8dy9yUIXW+yL13bjcCqWg/n+/sXe0Klj7G gkaUc9BrE9EV3pGAv2/Uq0DrMXQJvJGCEYGDD8u5H0eRr8bWF/SrwnPlUjAOfk1DXIjJ ReR5aEAZ84IwRRbQFRvEZ0SmdV423eFgm8HpewdnRALy6X2MNmHP5n9c5Qh0+aRsR0Ok KvQg== X-Gm-Message-State: AKS2vOxvD6s9e4k6OjL+sQwH2GB/9M/OJoPb9AGA04ZIFJf2M+8t9Wdu j+u/RgQDHJ8aBnaRqV4= X-Received: by 10.55.99.85 with SMTP id x82mr66640407qkb.62.1499394115972; Thu, 06 Jul 2017 19:21:55 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:47 -1000 Message-Id: <20170707022111.21836-4-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::244 Subject: [Qemu-devel] [PATCH v2 03/27] target/sh4: Introduce TB_FLAG_ENVFLAGS_MASK 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We'll be putting more things into this bitmask soon. Let's have a name that covers all possible uses. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/sh4/cpu.h | 4 +++- target/sh4/translate.c | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/target/sh4/cpu.h b/target/sh4/cpu.h index b15116e..240ed36 100644 --- a/target/sh4/cpu.h +++ b/target/sh4/cpu.h @@ -96,6 +96,8 @@ #define DELAY_SLOT_CONDITIONAL (1 << 1) #define DELAY_SLOT_RTE (1 << 2) =20 +#define TB_FLAG_ENVFLAGS_MASK DELAY_SLOT_MASK + typedef struct tlb_t { uint32_t vpn; /* virtual page number */ uint32_t ppn; /* physical page number */ @@ -389,7 +391,7 @@ static inline void cpu_get_tb_cpu_state(CPUSH4State *en= v, target_ulong *pc, { *pc =3D env->pc; *cs_base =3D 0; - *flags =3D (env->flags & DELAY_SLOT_MASK) /* Bits = 0- 2 */ + *flags =3D (env->flags & TB_FLAG_ENVFLAGS_MASK) /* Bits 0-2 */ | (env->fpscr & (FPSCR_FR | FPSCR_SZ | FPSCR_PR)) /* Bits 19-= 21 */ | (env->sr & ((1u << SR_MD) | (1u << SR_RB))) /* Bits 29-= 30 */ | (env->sr & (1u << SR_FD)) /* Bit 15 */ diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 663b5c0..cf53cd6 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -225,7 +225,7 @@ static inline void gen_save_cpu_state(DisasContext *ctx= , bool save_pc) if (ctx->delayed_pc !=3D (uint32_t) -1) { tcg_gen_movi_i32(cpu_delayed_pc, ctx->delayed_pc); } - if ((ctx->tbflags & DELAY_SLOT_MASK) !=3D ctx->envflags) { + if ((ctx->tbflags & TB_FLAG_ENVFLAGS_MASK) !=3D ctx->envflags) { tcg_gen_movi_i32(cpu_flags, ctx->envflags); } } @@ -1837,7 +1837,7 @@ void gen_intermediate_code(CPUSH4State * env, struct = TranslationBlock *tb) pc_start =3D tb->pc; ctx.pc =3D pc_start; ctx.tbflags =3D (uint32_t)tb->flags; - ctx.envflags =3D tb->flags & DELAY_SLOT_MASK; + ctx.envflags =3D tb->flags & TB_FLAG_ENVFLAGS_MASK; ctx.bstate =3D BS_NONE; ctx.memidx =3D (ctx.tbflags & (1u << SR_MD)) =3D=3D 0 ? 1 : 0; /* We don't know if the delayed pc came from a dynamic or static branc= h, --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394517305293.44095101717653; Thu, 6 Jul 2017 19:28:37 -0700 (PDT) Received: from localhost ([::1]:54130 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ0W-0006Mo-3O for importer@patchew.org; Thu, 06 Jul 2017 22:28:36 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33940) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIuD-00013B-GU for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIuA-0007qC-Ce for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:05 -0400 Received: from mail-qk0-x244.google.com ([2607:f8b0:400d:c09::244]:33045) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIuA-0007pq-8D for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:02 -0400 Received: by mail-qk0-x244.google.com with SMTP id p21so2754640qke.0 for ; Thu, 06 Jul 2017 19:22:02 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.21.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:22:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=5A0sQrj7ARgjxmzMPYKPo82mYmR9VxpK/7KKrxoW8Cg=; b=nvbtD8Hq/67fMYmtdSW1+DN5x/J+h7bdqp/AAMZsBsOwjDbv+If0FbnfQ9zwFtFRun ky8OyvGu6nC7ylAsUcIzNsH2yrAE67gfaFQzc3fcBfkO2eZ7KRlRg04x2zz3wu9GAbmZ 7BeJMtJ31xSFTG1re7gUv8YzNHLHfMd+xu4W9dkKQm205BcNAFigMLZIPKSivozQQyMv Q8D3ld8NpktxE5LmXzGP3E0hS3Cx+M01Is992oUScBSEoH2eP1RANv+L1fA6Jy/oDCHz f+THV44jv36/AUGl2gr51crrsZU/twpLFmxc3zcL3E2FZeSQjiVCsdkjqkmmsaQHOH1A 3t9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=5A0sQrj7ARgjxmzMPYKPo82mYmR9VxpK/7KKrxoW8Cg=; b=HqWxT7BWTMwexXfwkZaMwKHKWbBLZKxnB6TYOoQfW0iFqxk24C050PrC9LUPI3mO0N Upvjh2lnzdOZvykURMVIRp5dikpZjctFxqt7dW2v7SPrExro7syBWiDadWbIEgc5tofi JNde2wGtZ/ySSpoc/spJVz626p8KJItPsJIPdaC+WhxbLEJWTrpFjwbVgSFW51W2RR7G rwz6wk/jgc3RtkfeUMpeXh1ZKDziYCNCmzR1tkdp0EVrBLkcJacy7iItRbZef5iyiHTV DIXsZ1onibOuZXkTkeLK5ErzEPwG3E4m77t+0sUHT1VhgDx/PpRHjMvIoRzhOtZqLaGD GPcg== X-Gm-Message-State: AKS2vOwlRkNoa3XJWiKboAZzuyTQZp5u947CN+JmMRp3nH8+iVMuyPOf Ulj+oAg4jGZVG8fxvvg= X-Received: by 10.55.55.6 with SMTP id e6mr60639216qka.72.1499394121630; Thu, 06 Jul 2017 19:22:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:48 -1000 Message-Id: <20170707022111.21836-5-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::244 Subject: [Qemu-devel] [PATCH v2 04/27] target/sh4: Keep env->flags clean 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" If we mask off any out-of-band bits before we assign to the variable, then we don't need to clean it up when reading. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/sh4/cpu.h | 2 +- target/sh4/cpu.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/target/sh4/cpu.h b/target/sh4/cpu.h index 240ed36..6d179a7 100644 --- a/target/sh4/cpu.h +++ b/target/sh4/cpu.h @@ -391,7 +391,7 @@ static inline void cpu_get_tb_cpu_state(CPUSH4State *en= v, target_ulong *pc, { *pc =3D env->pc; *cs_base =3D 0; - *flags =3D (env->flags & TB_FLAG_ENVFLAGS_MASK) /* Bits 0-2 */ + *flags =3D env->flags /* Bits = 0-2 */ | (env->fpscr & (FPSCR_FR | FPSCR_SZ | FPSCR_PR)) /* Bits 19-= 21 */ | (env->sr & ((1u << SR_MD) | (1u << SR_RB))) /* Bits 29-= 30 */ | (env->sr & (1u << SR_FD)) /* Bit 15 */ diff --git a/target/sh4/cpu.c b/target/sh4/cpu.c index 9da7e1e..8536f6d 100644 --- a/target/sh4/cpu.c +++ b/target/sh4/cpu.c @@ -39,7 +39,7 @@ static void superh_cpu_synchronize_from_tb(CPUState *cs, = TranslationBlock *tb) SuperHCPU *cpu =3D SUPERH_CPU(cs); =20 cpu->env.pc =3D tb->pc; - cpu->env.flags =3D tb->flags; + cpu->env.flags =3D tb->flags & TB_FLAG_ENVFLAGS_MASK; } =20 static bool superh_cpu_has_work(CPUState *cs) --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394375829337.6549692711933; Thu, 6 Jul 2017 19:26:15 -0700 (PDT) Received: from localhost ([::1]:54122 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIyE-0004NQ-K3 for importer@patchew.org; Thu, 06 Jul 2017 22:26:14 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33965) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIuH-00016Q-BU for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIuG-0007vp-En for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:09 -0400 Received: from mail-qk0-x243.google.com ([2607:f8b0:400d:c09::243]:34298) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIuG-0007us-AY for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:08 -0400 Received: by mail-qk0-x243.google.com with SMTP id 91so2758996qkq.1 for ; Thu, 06 Jul 2017 19:22:08 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.22.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:22:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=/2RQA2pCfASvSZgBCJwGToTSJoE3Uf0w/4ExDZuZHQc=; b=mAc9YolP+J55mNE0SD3lWPsrxDgAB6qNpBGhUdBE857qmywenE2BCyWeEqNQO9BOys T8szFTuGwxU09jnt1m/wXeQvoT5jvrmNDsfEOPamcEo7mrC4WqUzdKPtoKWxWRUnwVSH jvxoMbCvVl75z/+o+cH7/uQ78IxrcG66M2TUvpLdNOL4AXVh4FmxEeSthw5Ipj1LbOvU 1p1vpHa0rzZhJd8mo/mIcvjD2NYIjBoI3HitGc87MuGKLsXZaWXoP9sNNqhyZmZI6/wP O/v63sObH8WPrxCgMu6IOwJK/u8q7Zns6OKB4nJYaCeoH3fuY94HIYs+4t81mznuPI1+ BTsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=/2RQA2pCfASvSZgBCJwGToTSJoE3Uf0w/4ExDZuZHQc=; b=cbMPgC7eRm8YljdGxzbDJ+BBH5W20XjV7AsIM3DCP6xYwgYEHlXIcaRCMGyJY5mflx ZPNK1/b4tXnLw1xmAhcvCjMvGlWfuPjzZaPzDARIajITXvYbJusKkdKgd4HcN0R6WJHn AQiofBEhMlyl2hJP0vEgWmLQTNzaDs0Ba6+3goBrKuySRCgziuqaxK7S55zMTiTB/vlE dOLBUUb6R5/G3LWLkAYF3DpfnTHzjSXZf3NseXctZjNsHtmgX5jv9lldFrX0Jpej8I9B MVry5l9p1F7ylZiE7qTLN7EghqFTVyjY5GpWpjATrMy1xVFgmAYb0eVgsPxj6d0NSosf PJUw== X-Gm-Message-State: AKS2vOxz+DeZUQX1JH8mMAjxCXO4s9I8OJchjFmlESf0uFFOlXD/KSbp v/ZTh3sGVbkOJLQFdnc= X-Received: by 10.233.221.70 with SMTP id r67mr60888525qkf.81.1499394127596; Thu, 06 Jul 2017 19:22:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:49 -1000 Message-Id: <20170707022111.21836-6-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::243 Subject: [Qemu-devel] [PATCH v2 05/27] target/sh4: Adjust TB_FLAG_PENDING_MOVCA 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Don't leave an unused bit after DELAY_SLOT_MASK. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/sh4/cpu.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/target/sh4/cpu.h b/target/sh4/cpu.h index 6d179a7..da31805 100644 --- a/target/sh4/cpu.h +++ b/target/sh4/cpu.h @@ -96,6 +96,8 @@ #define DELAY_SLOT_CONDITIONAL (1 << 1) #define DELAY_SLOT_RTE (1 << 2) =20 +#define TB_FLAG_PENDING_MOVCA (1 << 3) + #define TB_FLAG_ENVFLAGS_MASK DELAY_SLOT_MASK =20 typedef struct tlb_t { @@ -369,8 +371,6 @@ static inline int cpu_ptel_pr (uint32_t ptel) #define PTEA_TC (1 << 3) #define cpu_ptea_tc(ptea) (((ptea) & PTEA_TC) >> 3) =20 -#define TB_FLAG_PENDING_MOVCA (1 << 4) - static inline target_ulong cpu_read_sr(CPUSH4State *env) { return env->sr | (env->sr_m << SR_M) | @@ -395,7 +395,7 @@ static inline void cpu_get_tb_cpu_state(CPUSH4State *en= v, target_ulong *pc, | (env->fpscr & (FPSCR_FR | FPSCR_SZ | FPSCR_PR)) /* Bits 19-= 21 */ | (env->sr & ((1u << SR_MD) | (1u << SR_RB))) /* Bits 29-= 30 */ | (env->sr & (1u << SR_FD)) /* Bit 15 */ - | (env->movcal_backup ? TB_FLAG_PENDING_MOVCA : 0); /* Bit 4 */ + | (env->movcal_backup ? TB_FLAG_PENDING_MOVCA : 0); /* Bit 3 */ } =20 #endif /* SH4_CPU_H */ --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394664599988.4248906856343; Thu, 6 Jul 2017 19:31:04 -0700 (PDT) Received: from localhost ([::1]:54144 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ2s-0000MR-9T for importer@patchew.org; Thu, 06 Jul 2017 22:31:02 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34110) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIuZ-0001Kd-Mc for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIuW-00087A-Cc for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:27 -0400 Received: from mail-qt0-x243.google.com ([2607:f8b0:400d:c0d::243]:33183) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIuW-00086t-6W for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:24 -0400 Received: by mail-qt0-x243.google.com with SMTP id c20so2721967qte.0 for ; Thu, 06 Jul 2017 19:22:24 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.22.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:22:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=wt1nOCULngvYbIWpeTKlZslZFMeHMRUX89hQ6kQNYkk=; b=qOkWi3dF9UktWCj9HFmHCIv/iSNByDaJ4badoinFVcgQa27Pdbzkdb3ZwYGrG1JBNe 0FHJBDVhA1fZ4qZmp/WFakjXbpgvoCV4/SbqPk48yd6B5+6da9KDUzLlGnQ4nRsFgQIO 38/+W+cUW7Iz3ey4m8IlJTV7hRgEh1QCY8pLmeJP3EX1O7W9KqWeF5zkS32/xXvhXTIe mbAv42FxdddXwsXjViTef1o60r7WgOBtYHzQjp1aYrAoaQrqO7Cv5smBBsv2xiuosuVV z3pFqzi2Q6oaTL93+/AA15Przj/1EXNlacaZuok/4HH0si71uZxGcDWCLY1VWZKrdj1o Mc0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=wt1nOCULngvYbIWpeTKlZslZFMeHMRUX89hQ6kQNYkk=; b=mAXHwcPZo4p5a7IVAU3jIbMWkao3nefSIjBkuyHSIvJ8bDVtbm2U4TiAqV2M3UOb+7 sHdYJ8eFhSkx9X2K/jIFxuqm+Hm5Jw6OpmVfFNvCaeI90xoKELZe/vCfT/4S04ybc5fD eoSiiendYkbHklB61qaPrR4Km/wzpcs8EhtbRLf5PoUvj9myDibyEWv6NUAwejWp0r9Z tKPLf456J103h5BI8F8G6vkmlMuBKqTVdjC1zC8UICB9G7109aHOsZM16R06iVlb6qui QAWG2NKsyJgjKfPkvgSBQuBtAMGjjCOryAeev7+WH2KInvzECHG+zx10HaFrKSubwC/D AHWw== X-Gm-Message-State: AKS2vOwCHGMW10q75D9t7Cw+hiZIOyn7Sku3GJK4yeVq0GTfG5/lJgWn V3BH7ggl1MWN+fQh0UU= X-Received: by 10.200.57.25 with SMTP id s25mr61988475qtb.141.1499394143350; Thu, 06 Jul 2017 19:22:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:50 -1000 Message-Id: <20170707022111.21836-7-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::243 Subject: [Qemu-devel] [PATCH v2 06/27] target/sh4: Handle user-space atomics 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" For uniprocessors, SH4 uses optimistic restartable atomic sequences. Upon an interrupt, a real kernel would simply notice magic values in the registers and reset the PC to the start of the sequence. For QEMU, we cannot do this in quite the same way. Instead, we notice the normal start of such a sequence (mov #-x,r15), and start a new TB that can be executed under cpu_exec_step_atomic. Reported-by: Bruno Haible LP: https://bugs.launchpad.net/bugs/1701971 Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno --- target/sh4/cpu.h | 18 +++++-- target/sh4/helper.h | 1 + target/sh4/op_helper.c | 6 +++ target/sh4/translate.c | 131 +++++++++++++++++++++++++++++++++++++++++++++= ++-- 4 files changed, 148 insertions(+), 8 deletions(-) diff --git a/target/sh4/cpu.h b/target/sh4/cpu.h index da31805..e3abb6a 100644 --- a/target/sh4/cpu.h +++ b/target/sh4/cpu.h @@ -98,7 +98,18 @@ =20 #define TB_FLAG_PENDING_MOVCA (1 << 3) =20 -#define TB_FLAG_ENVFLAGS_MASK DELAY_SLOT_MASK +#define GUSA_SHIFT 4 +#ifdef CONFIG_USER_ONLY +#define GUSA_EXCLUSIVE (1 << 12) +#define GUSA_MASK ((0xff << GUSA_SHIFT) | GUSA_EXCLUSIVE) +#else +/* Provide dummy versions of the above to allow tests against tbflags + to be elided while avoiding ifdefs. */ +#define GUSA_EXCLUSIVE 0 +#define GUSA_MASK 0 +#endif + +#define TB_FLAG_ENVFLAGS_MASK (DELAY_SLOT_MASK | GUSA_MASK) =20 typedef struct tlb_t { uint32_t vpn; /* virtual page number */ @@ -390,8 +401,9 @@ static inline void cpu_get_tb_cpu_state(CPUSH4State *en= v, target_ulong *pc, target_ulong *cs_base, uint32_t *f= lags) { *pc =3D env->pc; - *cs_base =3D 0; - *flags =3D env->flags /* Bits = 0-2 */ + /* For a gUSA region, notice the end of the region. */ + *cs_base =3D env->flags & GUSA_MASK ? env->gregs[0] : 0; + *flags =3D env->flags /* TB_FLAG_ENVFLAGS_MASK: bits 0-2, 4-12 */ | (env->fpscr & (FPSCR_FR | FPSCR_SZ | FPSCR_PR)) /* Bits 19-= 21 */ | (env->sr & ((1u << SR_MD) | (1u << SR_RB))) /* Bits 29-= 30 */ | (env->sr & (1u << SR_FD)) /* Bit 15 */ diff --git a/target/sh4/helper.h b/target/sh4/helper.h index 767a6d5..6c6fa04 100644 --- a/target/sh4/helper.h +++ b/target/sh4/helper.h @@ -6,6 +6,7 @@ DEF_HELPER_1(raise_slot_fpu_disable, noreturn, env) DEF_HELPER_1(debug, noreturn, env) DEF_HELPER_1(sleep, noreturn, env) DEF_HELPER_2(trapa, noreturn, env, i32) +DEF_HELPER_1(exclusive, noreturn, env) =20 DEF_HELPER_3(movcal, void, env, i32, i32) DEF_HELPER_1(discard_movcal_backup, void, env) diff --git a/target/sh4/op_helper.c b/target/sh4/op_helper.c index c3d19b1..8513f38 100644 --- a/target/sh4/op_helper.c +++ b/target/sh4/op_helper.c @@ -115,6 +115,12 @@ void helper_trapa(CPUSH4State *env, uint32_t tra) raise_exception(env, 0x160, 0); } =20 +void helper_exclusive(CPUSH4State *env) +{ + /* We do not want cpu_restore_state to run. */ + cpu_loop_exit_atomic(ENV_GET_CPU(env), 0); +} + void helper_movcal(CPUSH4State *env, uint32_t address, uint32_t value) { if (cpu_sh4_is_cached (env, address)) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index cf53cd6..653c06c 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -235,7 +235,9 @@ static inline bool use_goto_tb(DisasContext *ctx, targe= t_ulong dest) if (unlikely(ctx->singlestep_enabled)) { return false; } - + if (ctx->tbflags & GUSA_EXCLUSIVE) { + return false; + } #ifndef CONFIG_USER_ONLY return (ctx->tb->pc & TARGET_PAGE_MASK) =3D=3D (dest & TARGET_PAGE_MAS= K); #else @@ -278,6 +280,28 @@ static void gen_conditional_jump(DisasContext * ctx, target_ulong ift, target_ulong ifnott) { TCGLabel *l1 =3D gen_new_label(); + + if (ctx->tbflags & GUSA_EXCLUSIVE) { + /* When in an exclusive region, we must continue to the end. + Therefore, exit the region on a taken branch, but otherwise + fall through to the next instruction. */ + uint32_t taken; + TCGCond cond; + + if (ift =3D=3D ctx->pc + 2) { + taken =3D ifnott; + cond =3D TCG_COND_NE; + } else { + taken =3D ift; + cond =3D TCG_COND_EQ; + } + tcg_gen_brcondi_i32(cond, cpu_sr_t, 0, l1); + tcg_gen_movi_i32(cpu_flags, ctx->envflags & ~GUSA_MASK); + gen_goto_tb(ctx, 0, taken); + gen_set_label(l1); + return; + } + gen_save_cpu_state(ctx, false); tcg_gen_brcondi_i32(TCG_COND_NE, cpu_sr_t, 0, l1); gen_goto_tb(ctx, 0, ifnott); @@ -289,13 +313,26 @@ static void gen_conditional_jump(DisasContext * ctx, /* Delayed conditional jump (bt or bf) */ static void gen_delayed_conditional_jump(DisasContext * ctx) { - TCGLabel *l1; - TCGv ds; + TCGLabel *l1 =3D gen_new_label(); + TCGv ds =3D tcg_temp_new(); =20 - l1 =3D gen_new_label(); - ds =3D tcg_temp_new(); tcg_gen_mov_i32(ds, cpu_delayed_cond); tcg_gen_discard_i32(cpu_delayed_cond); + + if (ctx->tbflags & GUSA_EXCLUSIVE) { + /* When in an exclusive region, we must continue to the end. + Therefore, exit the region on a taken branch, but otherwise + fall through to the next instruction. */ + tcg_gen_brcondi_i32(TCG_COND_EQ, ds, 0, l1); + + /* Leave the gUSA region. */ + tcg_gen_movi_i32(cpu_flags, ctx->envflags & ~GUSA_MASK); + gen_jump(ctx); + + gen_set_label(l1); + return; + } + tcg_gen_brcondi_i32(TCG_COND_NE, ds, 0, l1); gen_goto_tb(ctx, 1, ctx->pc + 2); gen_set_label(l1); @@ -480,6 +517,15 @@ static void _decode_opc(DisasContext * ctx) } return; case 0xe000: /* mov #imm,Rn */ +#ifdef CONFIG_USER_ONLY + /* Detect the start of a gUSA region. If so, update envflags + and end the TB. This will allow us to see the end of the + region (stored in R0) in the next TB. */ + if (B11_8 =3D=3D 15 && B7_0s < 0) { + ctx->envflags =3D deposit32(ctx->envflags, GUSA_SHIFT, 8, B7_0= s); + ctx->bstate =3D BS_STOP; + } +#endif tcg_gen_movi_i32(REG(B11_8), B7_0s); return; case 0x9000: /* mov.w @(disp,PC),Rn */ @@ -1814,6 +1860,18 @@ static void decode_opc(DisasContext * ctx) if (old_flags & DELAY_SLOT_MASK) { /* go out of the delay slot */ ctx->envflags &=3D ~DELAY_SLOT_MASK; + + /* When in an exclusive region, we must continue to the end + for conditional branches. */ + if (ctx->tbflags & GUSA_EXCLUSIVE + && old_flags & DELAY_SLOT_CONDITIONAL) { + gen_delayed_conditional_jump(ctx); + return; + } + /* Otherwise this is probably an invalid gUSA region. + Drop the GUSA bits so the next TB doesn't see them. */ + ctx->envflags &=3D ~GUSA_MASK; + tcg_gen_movi_i32(cpu_flags, ctx->envflags); ctx->bstate =3D BS_BRANCH; if (old_flags & DELAY_SLOT_CONDITIONAL) { @@ -1821,9 +1879,60 @@ static void decode_opc(DisasContext * ctx) } else { gen_jump(ctx); } + } +} =20 +#ifdef CONFIG_USER_ONLY +/* For uniprocessors, SH4 uses optimistic restartable atomic sequences. + Upon an interrupt, a real kernel would simply notice magic values in + the registers and reset the PC to the start of the sequence. + + For QEMU, we cannot do this in quite the same way. Instead, we notice + the normal start of such a sequence (mov #-x,r15). While we can handle + any sequence via cpu_exec_step_atomic, we can recognize the "normal" + sequences and transform them into atomic operations as seen by the host. +*/ +static int decode_gusa(DisasContext *ctx, CPUSH4State *env, int *pmax_insn= s) +{ + uint32_t pc =3D ctx->pc; + uint32_t pc_end =3D ctx->tb->cs_base; + int backup =3D sextract32(ctx->tbflags, GUSA_SHIFT, 8); + int max_insns =3D (pc_end - pc) / 2; + + if (pc !=3D pc_end + backup || max_insns < 2) { + /* This is a malformed gUSA region. Don't do anything special, + since the interpreter is likely to get confused. */ + ctx->envflags &=3D ~GUSA_MASK; + return 0; + } + + if (ctx->tbflags & GUSA_EXCLUSIVE) { + /* Regardless of single-stepping or the end of the page, + we must complete execution of the gUSA region while + holding the exclusive lock. */ + *pmax_insns =3D max_insns; + return 0; } + + qemu_log_mask(LOG_UNIMP, "Unrecognized gUSA sequence %08x-%08x\n", + pc, pc_end); + + /* Restart with the EXCLUSIVE bit set, within a TB run via + cpu_exec_step_atomic holding the exclusive lock. */ + tcg_gen_insn_start(pc, ctx->envflags); + ctx->envflags |=3D GUSA_EXCLUSIVE; + gen_save_cpu_state(ctx, false); + gen_helper_exclusive(cpu_env); + ctx->bstate =3D BS_EXCP; + + /* We're not executing an instruction, but we must report one for the + purposes of accounting within the TB. We might as well report the + entire region consumed via ctx->pc so that it's immediately availab= le + in the disassembly dump. */ + ctx->pc =3D pc_end; + return 1; } +#endif =20 void gen_intermediate_code(CPUSH4State * env, struct TranslationBlock *tb) { @@ -1869,6 +1978,12 @@ void gen_intermediate_code(CPUSH4State * env, struct= TranslationBlock *tb) gen_tb_start(tb); num_insns =3D 0; =20 +#ifdef CONFIG_USER_ONLY + if (ctx.tbflags & GUSA_MASK) { + num_insns =3D decode_gusa(&ctx, env, &max_insns); + } +#endif + while (ctx.bstate =3D=3D BS_NONE && num_insns < max_insns && !tcg_op_buf_full()) { @@ -1899,6 +2014,12 @@ void gen_intermediate_code(CPUSH4State * env, struct= TranslationBlock *tb) if (tb->cflags & CF_LAST_IO) { gen_io_end(); } + + if (ctx.tbflags & GUSA_EXCLUSIVE) { + /* Ending the region of exclusivity. Clear the bits. */ + ctx.envflags &=3D ~GUSA_MASK; + } + if (cs->singlestep_enabled) { gen_save_cpu_state(&ctx, true); gen_helper_debug(cpu_env); --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 149939427798667.73565228618872; Thu, 6 Jul 2017 19:24:37 -0700 (PDT) Received: from localhost ([::1]:54109 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIwd-0002oV-Ii for importer@patchew.org; Thu, 06 Jul 2017 22:24:35 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34235) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIuk-0001UB-Ll for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIuh-0008HI-HI for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:38 -0400 Received: from mail-qt0-x241.google.com ([2607:f8b0:400d:c0d::241]:35230) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIuh-0008H0-CH for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:35 -0400 Received: by mail-qt0-x241.google.com with SMTP id w12so2708505qta.2 for ; Thu, 06 Jul 2017 19:22:35 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.22.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:22:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=/zjpuMAhvLMCmoFHLzDHXZu55UhPF6g59LCtmCOOb+w=; b=SECgP7G8YObJWcUGs5f2moLnV3AwMAXji2b/m5j1aXK3jiNjKisvM79yVoIghNAvTF Bxh6KUFJI2FOeGj6m5CWcCWfsZ77hMT68AyhVrbQSTvQxJRWZJRAodfaIpVSiPxoL+RE CI/TeUcXt4n5QDa+kIpWA8KeQAWQ8xeamcLHQdrhPsy8rlcBuaUYcYdxfkSG9udl2FWD LJRwLZzpHQiL9ZiPJaBPXcP+cLvGph5gvWlEp90hQfxkeVTUjWS2qXW2k948o0tqhCMv cnWaXn4Ty7wwOfgocYw5bwpAJJhREUObTIv894Cry4pCOEmsM1r1WHWZSCG5kDmU4V8i R6Pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=/zjpuMAhvLMCmoFHLzDHXZu55UhPF6g59LCtmCOOb+w=; b=QE87OvZlQkRG2h7EYg/90uZrJJzpH2VGEvaTBtaF8eQTf+pP41xoD0pEJAPGwinfME Xsgmr3/tar9WucXf1ZVF43+CvXY/kITaT0t8zcAhkQJXlaWoUng2ytzGfappV0nAYf+O ewvh7uEhomFeU+cKzM/yzcvn9to4jRW3WyVXzNHUKgIaJi1GrvrYwa9c5Fl9RgtDCHSz uOBuRIB7uoMLXSJm0kMY3z5z0Q4fjHfAg7e9jVujL8tWemq9/EWmojBlMEn/uKv/r+0b jCSjOu3wsnpEHnm4TTBDLewgBSLWjczvCfEZBwcItBdq6ECMkeeXOcMyzqd1gCOtUvSD SkdQ== X-Gm-Message-State: AIVw110sAJiuTsDjDTKISOGfj0ZV/S66hw1jwojZ2YGH/RLS23RXTM+N 7SK3WCmF7p4AFqT/Ojs= X-Received: by 10.237.55.34 with SMTP id i31mr16562085qtb.210.1499394154464; Thu, 06 Jul 2017 19:22:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:51 -1000 Message-Id: <20170707022111.21836-8-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::241 Subject: [Qemu-devel] [PATCH v2 07/27] target/sh4: Recognize common gUSA sequences 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" For many of the sequences produced by gcc or glibc, we can translate these as host atomic operations. Which saves the need to acquire the exclusive lock. Signed-off-by: Richard Henderson --- target/sh4/translate.c | 316 +++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 316 insertions(+) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 653c06c..73b3e02 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -1894,10 +1894,17 @@ static void decode_opc(DisasContext * ctx) */ static int decode_gusa(DisasContext *ctx, CPUSH4State *env, int *pmax_insn= s) { + uint16_t insns[5]; + int ld_adr, ld_dst, ld_mop; + int op_dst, op_src, op_opc; + int mv_src, mt_dst, st_src, st_mop; + TCGv op_arg; + uint32_t pc =3D ctx->pc; uint32_t pc_end =3D ctx->tb->cs_base; int backup =3D sextract32(ctx->tbflags, GUSA_SHIFT, 8); int max_insns =3D (pc_end - pc) / 2; + int i; =20 if (pc !=3D pc_end + backup || max_insns < 2) { /* This is a malformed gUSA region. Don't do anything special, @@ -1914,6 +1921,315 @@ static int decode_gusa(DisasContext *ctx, CPUSH4Sta= te *env, int *pmax_insns) return 0; } =20 + /* The state machine below will consume only a few insns. + If there are more than that in a region, fail now. */ + if (max_insns > ARRAY_SIZE(insns)) { + goto fail; + } + + /* Read all of the insns for the region. */ + for (i =3D 0; i < max_insns; ++i) { + insns[i] =3D cpu_lduw_code(env, pc + i * 2); + } + + ld_adr =3D ld_dst =3D ld_mop =3D -1; + mv_src =3D -1; + op_dst =3D op_src =3D op_opc =3D -1; + mt_dst =3D -1; + st_src =3D st_mop =3D -1; + TCGV_UNUSED(op_arg); + i =3D 0; + +#define NEXT_INSN \ + do { if (i >=3D max_insns) goto fail; ctx->opcode =3D insns[i++]; } wh= ile (0) + + /* + * Expect a load to begin the region. + */ + NEXT_INSN; + switch (ctx->opcode & 0xf00f) { + case 0x6000: /* mov.b @Rm,Rn */ + ld_mop =3D MO_SB; + break; + case 0x6001: /* mov.w @Rm,Rn */ + ld_mop =3D MO_TESW; + break; + case 0x6002: /* mov.l @Rm,Rn */ + ld_mop =3D MO_TESL; + break; + default: + goto fail; + } + ld_adr =3D B7_4; + ld_dst =3D B11_8; + if (ld_adr =3D=3D ld_dst) { + goto fail; + } + /* Unless we see a mov, any two-operand operation must use ld_dst. */ + op_dst =3D ld_dst; + + /* + * Expect an optional register move. + */ + NEXT_INSN; + switch (ctx->opcode & 0xf00f) { + case 0x6003: /* mov Rm,Rn */ + /* Here we want to recognize ld_dst being saved for later consumti= on, + or for another input register being copied so that ld_dst need = not + be clobbered during the operation. */ + op_dst =3D B11_8; + mv_src =3D B7_4; + if (op_dst =3D=3D ld_dst) { + /* Overwriting the load output. */ + goto fail; + } + if (mv_src !=3D ld_dst) { + /* Copying a new input; constrain op_src to match the load. */ + op_src =3D ld_dst; + } + break; + + default: + /* Put back and re-examine as operation. */ + --i; + } + + /* + * Expect the operation. + */ + NEXT_INSN; + switch (ctx->opcode & 0xf00f) { + case 0x300c: /* add Rm,Rn */ + op_opc =3D INDEX_op_add_i32; + goto do_reg_op; + case 0x2009: /* and Rm,Rn */ + op_opc =3D INDEX_op_and_i32; + goto do_reg_op; + case 0x200a: /* xor Rm,Rn */ + op_opc =3D INDEX_op_xor_i32; + goto do_reg_op; + case 0x200b: /* or Rm,Rn */ + op_opc =3D INDEX_op_or_i32; + do_reg_op: + /* The operation register should be as expected, and the + other input cannot depend on the load. */ + if (op_dst !=3D B11_8) { + goto fail; + } + if (op_src < 0) { + /* Unconstrainted input. */ + op_src =3D B7_4; + } else if (op_src =3D=3D B7_4) { + /* Constrained input matched load. All operations are + commutative; "swap" them by "moving" the load output + to the (implicit) first argument and the move source + to the (explicit) second argument. */ + op_src =3D mv_src; + } else { + goto fail; + } + op_arg =3D REG(op_src); + break; + + case 0x6007: /* not Rm,Rn */ + if (ld_dst !=3D B7_4 || mv_src >=3D 0) { + goto fail; + } + op_dst =3D B11_8; + op_opc =3D INDEX_op_xor_i32; + op_arg =3D tcg_const_i32(-1); + break; + + case 0x7000 ... 0x700f: /* add #imm,Rn */ + if (op_dst !=3D B11_8 || op_src >=3D 0) { + goto fail; + } + op_opc =3D INDEX_op_add_i32; + op_arg =3D tcg_const_i32(B7_0s); + break; + + case 0x3000: /* cmp/eq Rm,Rn */ + /* Looking for the middle of a compare-and-swap sequence, + beginning with the compare. Operands can be either order, + but with only one overlapping the load. */ + if ((ld_dst =3D=3D B11_8) + (ld_dst =3D=3D B7_4) !=3D 1 || mv_src = >=3D 0) { + goto fail; + } + op_opc =3D INDEX_op_setcond_i32; /* placeholder */ + op_src =3D (ld_dst =3D=3D B11_8 ? B7_4 : B11_8); + op_arg =3D REG(op_src); + + NEXT_INSN; + switch (ctx->opcode & 0xff00) { + case 0x8b00: /* bf label */ + case 0x8f00: /* bf/s label */ + if (pc + (i + 1 + B7_0s) * 2 !=3D pc_end) { + goto fail; + } + if ((ctx->opcode & 0xff00) =3D=3D 0x8b00) { /* bf label */ + break; + } + /* We're looking to unconditionally modify Rn with the + result of the comparison, within the delay slot of + the branch. This is used by older gcc. */ + NEXT_INSN; + if ((ctx->opcode & 0xf0ff) =3D=3D 0x0029) { /* movt Rn */ + mt_dst =3D B11_8; + } else { + goto fail; + } + break; + + default: + goto fail; + } + break; + + case 0x2008: /* tst Rm,Rn */ + /* Looking for a compare-and-swap against zero. */ + if (ld_dst !=3D B11_8 || ld_dst !=3D B7_4 || mv_src >=3D 0) { + goto fail; + } + op_opc =3D INDEX_op_setcond_i32; + op_arg =3D tcg_const_i32(0); + + NEXT_INSN; + if ((ctx->opcode & 0xff00) !=3D 0x8900 /* bt label */ + || pc + (i + 1 + B7_0s) * 2 !=3D pc_end) { + goto fail; + } + break; + + default: + /* Put back and re-examine as store. */ + --i; + } + + /* + * Expect the store. + */ + /* The store must be the last insn. */ + if (i !=3D max_insns - 1) { + goto fail; + } + NEXT_INSN; + switch (ctx->opcode & 0xf00f) { + case 0x2000: /* mov.b Rm,@Rn */ + st_mop =3D MO_UB; + break; + case 0x2001: /* mov.w Rm,@Rn */ + st_mop =3D MO_UW; + break; + case 0x2002: /* mov.l Rm,@Rn */ + st_mop =3D MO_UL; + break; + default: + goto fail; + } + /* The store must match the load. */ + if (ld_adr !=3D B11_8 || st_mop !=3D (ld_mop & MO_SIZE)) { + goto fail; + } + st_src =3D B7_4; + +#undef NEXT_INSN + + /* + * Emit the operation. + */ + tcg_gen_insn_start(pc, ctx->envflags); + switch (op_opc) { + case -1: + /* No operation found. Look for exchange pattern. */ + if (st_src =3D=3D ld_dst || mv_src >=3D 0) { + goto fail; + } + tcg_gen_atomic_xchg_i32(REG(ld_dst), REG(ld_adr), REG(st_src), + ctx->memidx, ld_mop); + break; + + case INDEX_op_add_i32: + if (op_dst !=3D st_src) { + goto fail; + } + if (op_dst =3D=3D ld_dst && st_mop =3D=3D MO_UL) { + tcg_gen_atomic_add_fetch_i32(REG(ld_dst), REG(ld_adr), + op_arg, ctx->memidx, ld_mop); + } else { + tcg_gen_atomic_fetch_add_i32(REG(ld_dst), REG(ld_adr), + op_arg, ctx->memidx, ld_mop); + if (op_dst !=3D ld_dst) { + /* Note that mop sizes < 4 cannot use add_fetch + because it won't carry into the higher bits. */ + tcg_gen_add_i32(REG(op_dst), REG(ld_dst), op_arg); + } + } + break; + + case INDEX_op_and_i32: + if (op_dst !=3D st_src) { + goto fail; + } + if (op_dst =3D=3D ld_dst) { + tcg_gen_atomic_and_fetch_i32(REG(ld_dst), REG(ld_adr), + op_arg, ctx->memidx, ld_mop); + } else { + tcg_gen_atomic_fetch_and_i32(REG(ld_dst), REG(ld_adr), + op_arg, ctx->memidx, ld_mop); + tcg_gen_and_i32(REG(op_dst), REG(ld_dst), op_arg); + } + break; + + case INDEX_op_or_i32: + if (op_dst !=3D st_src) { + goto fail; + } + if (op_dst =3D=3D ld_dst) { + tcg_gen_atomic_or_fetch_i32(REG(ld_dst), REG(ld_adr), + op_arg, ctx->memidx, ld_mop); + } else { + tcg_gen_atomic_fetch_or_i32(REG(ld_dst), REG(ld_adr), + op_arg, ctx->memidx, ld_mop); + tcg_gen_or_i32(REG(op_dst), REG(ld_dst), op_arg); + } + break; + + case INDEX_op_xor_i32: + if (op_dst !=3D st_src) { + goto fail; + } + if (op_dst =3D=3D ld_dst) { + tcg_gen_atomic_xor_fetch_i32(REG(ld_dst), REG(ld_adr), + op_arg, ctx->memidx, ld_mop); + } else { + tcg_gen_atomic_fetch_xor_i32(REG(ld_dst), REG(ld_adr), + op_arg, ctx->memidx, ld_mop); + tcg_gen_xor_i32(REG(op_dst), REG(ld_dst), op_arg); + } + break; + + case INDEX_op_setcond_i32: + if (st_src =3D=3D ld_dst) { + goto fail; + } + tcg_gen_atomic_cmpxchg_i32(REG(ld_dst), REG(ld_adr), op_arg, + REG(st_src), ctx->memidx, ld_mop); + tcg_gen_setcond_i32(TCG_COND_EQ, cpu_sr_t, REG(ld_dst), op_arg); + if (mt_dst >=3D 0) { + tcg_gen_mov_i32(REG(mt_dst), cpu_sr_t); + } + break; + + default: + g_assert_not_reached(); + } + + /* The entire region has been translated. */ + ctx->envflags &=3D ~GUSA_MASK; + ctx->pc =3D pc_end; + return max_insns; + + fail: qemu_log_mask(LOG_UNIMP, "Unrecognized gUSA sequence %08x-%08x\n", pc, pc_end); =20 --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394523547768.3067335261459; Thu, 6 Jul 2017 19:28:43 -0700 (PDT) Received: from localhost ([::1]:54132 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ0c-0006Tm-8V for importer@patchew.org; Thu, 06 Jul 2017 22:28:42 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34369) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIv3-0001gO-H1 for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIv0-0008T2-DL for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:57 -0400 Received: from mail-qk0-x241.google.com ([2607:f8b0:400d:c09::241]:33074) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIv0-0008SD-5A for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:22:54 -0400 Received: by mail-qk0-x241.google.com with SMTP id p21so2756332qke.0 for ; Thu, 06 Jul 2017 19:22:54 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.22.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:22:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=W8AO4FKMz63jZMPCP8pC3NmjVRpxCNhIg5NoICWJaNI=; b=bYn7GlJ/cjx/HTZ9vNER3M5WzjK/gnZKuMTXwcOxDZpkvgckV95ozZuJXV4hJlyIpM Au/eowHNk92uFEolpJqZHix+3AKPrP24wf9ksvqQY5A7Aja9QMDMEdiTOjAOt6ovhwv9 XHuZAy/4reJ2cHN/IWgJMnArr002iCGNb3BCjKRwZDhh4HbU/Q4ApO7zibT9QFnH3BXp 2W0hg72UhlsLgbXExNMkW8yZsr0yirE3exyzIbCmvFxdnXBx0/rG/JvcFmgrqTd/l6ED s+AJUF1OzpKu9aPcqn0pn0JBzIkzmYTcSt91wT7eRSPUKTIi8zKy8LEhXZd8j+hpxHrl VdFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=W8AO4FKMz63jZMPCP8pC3NmjVRpxCNhIg5NoICWJaNI=; b=chuVhL+ATy8okF/hVkp03eRw/7YmnyguVGzJW9t/0TUNmvcd4BjzZQVxPuJWObQxiH jESG+vToZ781RyK71kJmLPXcQKsV7JAcRAYedZXdCODrC6t9F+uxdazkAgDeqf6AZ+BS dKzdB8W+zQnxgwHNVIU4qimflYmUQnN/IW96zt1HAMgFyravfgE1CrGhMUxwd0azHlrn qC2dRbQilokPwzYmZ69q9QvyO4leu7Ae7vH+1Da15Sspt484beyBMtxG2nB/Xqtg8wiN FF74ieKkEbHjVyQNAgk9FiRYfZNodF2JUpY3dMoW8fMI8Sa9bflx+6YyrKiyV1xsmQTq MIhw== X-Gm-Message-State: AKS2vOw6Q5my/7tiaRpu0tpTuQwEve7SJXE/+UlGtSVBVvFKcS4Wr7cn vgxDbYdaAr7HqHnEKN4= X-Received: by 10.55.79.131 with SMTP id d125mr61601007qkb.169.1499394173397; Thu, 06 Jul 2017 19:22:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:52 -1000 Message-Id: <20170707022111.21836-9-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::241 Subject: [Qemu-devel] [PATCH v2 08/27] linux-user/sh4: Notice gUSA regions during signal delivery 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We translate gUSA regions atomically in a parallel context. But in a serial context a gUSA region may be interrupted. In that case, restart the region as the kernel would. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno --- linux-user/signal.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/linux-user/signal.c b/linux-user/signal.c index 3d18d1b..a537778 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -3471,6 +3471,25 @@ static abi_ulong get_sigframe(struct target_sigactio= n *ka, return (sp - frame_size) & -8ul; } =20 +/* Notice when we're in the middle of a gUSA region and reset. + Note that this will only occur for !parallel_cpus, as we will + translate such sequences differently in a parallel context. */ +static void unwind_gusa(CPUSH4State *regs) +{ + /* If the stack pointer is sufficiently negative ... */ + if ((regs->gregs[15] & 0xc0000000u) =3D=3D 0xc0000000u + /* ... and we haven't completed the sequence ... */ + && regs->pc < regs->gregs[0]) { + /* Reset the PC to before the gUSA region, as computed from + R0 =3D region end, SP =3D -(region size), plus one more insn + that actually sets SP to the region size. */ + regs->pc =3D regs->gregs[0] + regs->gregs[15] - 2; + + /* Reset the SP to the saved version in R1. */ + regs->gregs[15] =3D regs->gregs[1]; + } +} + static void setup_sigcontext(struct target_sigcontext *sc, CPUSH4State *regs, unsigned long mask) { @@ -3534,6 +3553,8 @@ static void setup_frame(int sig, struct target_sigact= ion *ka, abi_ulong frame_addr; int i; =20 + unwind_gusa(regs); + frame_addr =3D get_sigframe(ka, regs->gregs[15], sizeof(*frame)); trace_user_setup_frame(regs, frame_addr); if (!lock_user_struct(VERIFY_WRITE, frame, frame_addr, 0)) { @@ -3583,6 +3604,8 @@ static void setup_rt_frame(int sig, struct target_sig= action *ka, abi_ulong frame_addr; int i; =20 + unwind_gusa(regs); + frame_addr =3D get_sigframe(ka, regs->gregs[15], sizeof(*frame)); trace_user_setup_rt_frame(regs, frame_addr); if (!lock_user_struct(VERIFY_WRITE, frame, frame_addr, 0)) { --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394368111531.4822609042277; Thu, 6 Jul 2017 19:26:08 -0700 (PDT) Received: from localhost ([::1]:54120 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIy6-0004Fa-KK for importer@patchew.org; Thu, 06 Jul 2017 22:26:06 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34436) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIvC-0001om-I0 for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:23:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIv9-00007x-Dq for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:23:06 -0400 Received: from mail-qt0-x241.google.com ([2607:f8b0:400d:c0d::241]:36526) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIv9-00007e-A4 for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:23:03 -0400 Received: by mail-qt0-x241.google.com with SMTP id v31so2713950qtb.3 for ; Thu, 06 Jul 2017 19:23:03 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.22.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:23:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=c8K0nihITQzY5H11oh0OJXlrlkc96hFSYMbBIDva34k=; b=NOTSmMDL1ZIqYg7AhHUJcsma7uM2uDeBLJN6i1/cnkORFYoCDmBKN8j/In6U8C5ZlR bgGyppzoNhEgWjHi9W+QSh6zVHVNhukY0vCkEKUx2G/3TeisMpZPDzN3mjgmrb/fNYxB Xsw1T7NZX4YcBEb62NLUGCjGE2i+Wms4XsA/65Ob5C+Oec2NjdXawrNoG2yXIsH3/4ya d8HxrrlPj6azpkoXUOY7ANLINaniAAnva445ch6ZdMFE4dDKj/E/ZPrgWLsV7eAu057F YmXL8TdflazYl4QJcL3AxijdXOFzYMhxX7cIUtGv3mOb5K2rihRczsUhaYliLYA0pF6v FDgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=c8K0nihITQzY5H11oh0OJXlrlkc96hFSYMbBIDva34k=; b=hcdDMSqUi71KgN2wtZyaDkmgk1gXJmbpHaQ2mD6VbMJF6WnaBSY8u8BLnyJIjFgDTV By3IwNjjH1lY9YfhM6U4TtjCqXjcSO3xc3oKZ3KS4qTQD+hoqMWEHKuKqUCtxozgHrr9 4wyQSomPIYt7rcr0CLUVom/NOZvIdfJFzr+chSfnuxUDLyvQ0xfosdPHZEGs/t28tgmW mekpT/bXOdbDmCest43gJLyZXpUVuQWBPn05ltgxn0VQxs/IgeZ7vj3MNGgafG01uYxJ Uy1zGkKe4ziiwLLUaiexvyojAvaGhkrrX8h9ehSIYMSwiFkhX6z08ZzjSISrbUhVhcpt eCxQ== X-Gm-Message-State: AKS2vOzDFcUYjZGUeyTTSxeUhs09KkyqaahtPd2uGawrC5ygfEN2Kl0k 6E32d3QSYwiXPSdWg+A= X-Received: by 10.237.39.33 with SMTP id n30mr67848150qtd.149.1499394182682; Thu, 06 Jul 2017 19:23:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:53 -1000 Message-Id: <20170707022111.21836-10-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::241 Subject: [Qemu-devel] [PATCH v2 09/27] linux-user/sh4: Clean env->flags on signal boundaries 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" If a signal is delivered during the execution of a delay slot, or a gUSA region, clear those bits from the environment so that the signal handler does not start in that same state. Cleaning the bits on signal return is paranoid good sense. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno --- linux-user/signal.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/linux-user/signal.c b/linux-user/signal.c index a537778..8c0b851 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -3544,6 +3544,7 @@ static void restore_sigcontext(CPUSH4State *regs, str= uct target_sigcontext *sc) __get_user(regs->fpul, &sc->sc_fpul); =20 regs->tra =3D -1; /* disable syscall checks */ + regs->flags &=3D ~(DELAY_SLOT_MASK | GUSA_MASK); } =20 static void setup_frame(int sig, struct target_sigaction *ka, @@ -3587,6 +3588,7 @@ static void setup_frame(int sig, struct target_sigact= ion *ka, regs->gregs[5] =3D 0; regs->gregs[6] =3D frame_addr +=3D offsetof(typeof(*frame), sc); regs->pc =3D (unsigned long) ka->_sa_handler; + regs->flags &=3D ~(DELAY_SLOT_MASK | GUSA_MASK); =20 unlock_user_struct(frame, frame_addr, 1); return; @@ -3649,6 +3651,7 @@ static void setup_rt_frame(int sig, struct target_sig= action *ka, regs->gregs[5] =3D frame_addr + offsetof(typeof(*frame), info); regs->gregs[6] =3D frame_addr + offsetof(typeof(*frame), uc); regs->pc =3D (unsigned long) ka->_sa_handler; + regs->flags &=3D ~(DELAY_SLOT_MASK | GUSA_MASK); =20 unlock_user_struct(frame, frame_addr, 1); return; --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394431895490.40344410171383; Thu, 6 Jul 2017 19:27:11 -0700 (PDT) Received: from localhost ([::1]:54123 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIz8-00058L-Fq for importer@patchew.org; Thu, 06 Jul 2017 22:27:10 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34490) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIvI-0001uB-7M for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:23:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIvH-0000DV-4M for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:23:12 -0400 Received: from mail-qt0-x243.google.com ([2607:f8b0:400d:c0d::243]:35261) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIvH-0000DG-04 for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:23:11 -0400 Received: by mail-qt0-x243.google.com with SMTP id w12so2709738qta.2 for ; Thu, 06 Jul 2017 19:23:10 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.23.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:23:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=WTaoeEfavtPvI5eagfJlm5QmLGTgfZdYJ/gmiB5MhnY=; b=kuXJegeu5a8bE09obQN5UbjXVc72UveJ6QLTgeNOvVpV8hl+rGi90DbsD4YhZbSfFO yv4OyFMaQi5SMoy8tgGyENE24c1qH2osPvqFk8zLl0/XbZ3G6tlQqHbrn7Qqf9VEPik7 Ng0UxfNJIkAI/ds2U0ym6Ff1XNgXzL7NHreZIm5Uz1WitukNLUg8Utg8Js3UuWOUpnNb RDw0EtUKiIpEToID0yRRqOCgiRr/fd0/mYMVnT2auEd3TNmJw/f/QRRrhv5HNjddhV+/ mGfRqI7btscPAPDuOwPEnBaMSV/S47sZBYToIefDRIhpfjkTg1agwAlnqllgQCBrRwYe BeVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=WTaoeEfavtPvI5eagfJlm5QmLGTgfZdYJ/gmiB5MhnY=; b=QH2kZqjkpOpWgSNIu92doVR/NB7y8ATCjDwU1bx5/UCTOE4O0vdyxbVEyb9xec+wFR PbMU5LZsDPWWeq9lIzxCQR47lCViwrKtMHshIMmySxWNZkYZRQg+PI2Yh4roVOFYhLDX R8J/W5BIW992psOnjlJ/wiaYxS2g0363eK3iADJM0sUgI3Dw41fHrApfbvkjSV9CbljZ U1b5zMgkNnW1/03F2PO8PKNzeWamgbh3KJ3Zwv4eknS2CS/IcdFV9sT/dXUysTZ+NqrQ ZcO8Jn082OS8S0MMAlJocD58gAtKGxx6DUEHHO3jZ87WPm3BIalFg1YARwG0xUPuecWK C+7Q== X-Gm-Message-State: AKS2vOxkjDLFG8nALKXlT/HZOxTnXwTHiICQX0SSPJJc61U4g9cwEy5u 1osYxZDsqPsmL8XEXyk= X-Received: by 10.200.52.129 with SMTP id w1mr64461419qtb.77.1499394190322; Thu, 06 Jul 2017 19:23:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:54 -1000 Message-Id: <20170707022111.21836-11-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::243 Subject: [Qemu-devel] [PATCH v2 10/27] target/sh4: Hoist register bank selection 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Compute which register bank to use once at the start of translation. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno --- target/sh4/translate.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 73b3e02..0ac101e 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -41,6 +41,7 @@ typedef struct DisasContext { uint32_t envflags; /* should stay in sync with env->flags using TCG = ops */ int bstate; int memidx; + int gbank; uint32_t delayed_pc; int singlestep_enabled; uint32_t features; @@ -64,7 +65,7 @@ enum { =20 /* global register indexes */ static TCGv_env cpu_env; -static TCGv cpu_gregs[24]; +static TCGv cpu_gregs[32]; static TCGv cpu_sr, cpu_sr_m, cpu_sr_q, cpu_sr_t; static TCGv cpu_pc, cpu_ssr, cpu_spc, cpu_gbr; static TCGv cpu_vbr, cpu_sgr, cpu_dbr, cpu_mach, cpu_macl; @@ -99,16 +100,19 @@ void sh4_translate_init(void) "FPR12_BANK1", "FPR13_BANK1", "FPR14_BANK1", "FPR15_BANK1", }; =20 - if (done_init) + if (done_init) { return; + } =20 cpu_env =3D tcg_global_reg_new_ptr(TCG_AREG0, "env"); tcg_ctx.tcg_env =3D cpu_env; =20 - for (i =3D 0; i < 24; i++) + for (i =3D 0; i < 24; i++) { cpu_gregs[i] =3D tcg_global_mem_new_i32(cpu_env, offsetof(CPUSH4State, gregs[= i]), gregnames[i]); + } + memcpy(cpu_gregs + 24, cpu_gregs + 8, 8 * sizeof(TCGv)); =20 cpu_pc =3D tcg_global_mem_new_i32(cpu_env, offsetof(CPUSH4State, pc), "PC"); @@ -359,13 +363,8 @@ static inline void gen_store_fpr64 (TCGv_i64 t, int re= g) #define B11_8 ((ctx->opcode >> 8) & 0xf) #define B15_12 ((ctx->opcode >> 12) & 0xf) =20 -#define REG(x) ((x) < 8 && (ctx->tbflags & (1u << SR_MD))\ - && (ctx->tbflags & (1u << SR_RB))\ - ? (cpu_gregs[x + 16]) : (cpu_gregs[x])) - -#define ALTREG(x) ((x) < 8 && (!(ctx->tbflags & (1u << SR_MD))\ - || !(ctx->tbflags & (1u << SR_RB)))\ - ? (cpu_gregs[x + 16]) : (cpu_gregs[x])) +#define REG(x) cpu_gregs[(x) ^ ctx->gbank] +#define ALTREG(x) cpu_gregs[(x) ^ ctx->gbank ^ 0x10] =20 #define FREG(x) (ctx->tbflags & FPSCR_FR ? (x) ^ 0x10 : (x)) #define XHACK(x) ((((x) & 1 ) << 4) | ((x) & 0xe)) @@ -2272,6 +2271,8 @@ void gen_intermediate_code(CPUSH4State * env, struct = TranslationBlock *tb) ctx.singlestep_enabled =3D cs->singlestep_enabled; ctx.features =3D env->features; ctx.has_movcal =3D (ctx.tbflags & TB_FLAG_PENDING_MOVCA); + ctx.gbank =3D ((ctx.tbflags & (1 << SR_MD)) && + (ctx.tbflags & (1 << SR_RB))) * 0x10; =20 max_insns =3D tb->cflags & CF_COUNT_MASK; if (max_insns =3D=3D 0) { --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394830855977.3057924045706; Thu, 6 Jul 2017 19:33:50 -0700 (PDT) Received: from localhost ([::1]:54153 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ5Z-0002Uw-Be for importer@patchew.org; Thu, 06 Jul 2017 22:33:49 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34806) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIwI-0002qC-VZ for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIwF-0000np-Mk for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:14 -0400 Received: from mail-qt0-x244.google.com ([2607:f8b0:400d:c0d::244]:36570) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIwF-0000ne-Gs for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:11 -0400 Received: by mail-qt0-x244.google.com with SMTP id v31so2716318qtb.3 for ; Thu, 06 Jul 2017 19:24:11 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.23.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:24:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=SDZwY1f0ZHmUjqRlCSkL4vIMwaaWxaH0BPBE2rwQLFY=; b=pol3oRnhAVIjLOsmGjyX/w5Kfeod3Fku8fByjBLhrGO9Jny8+2kOUUM8CN6KDYlbCS 7z+cVnSxNvcGKijdWhFxjtaO1WFp4SgvTOI/mbdQnltZR0PH4DXQoP7CiftMdh2z6Hgp bLMOuEVpYlpeJQSs6jmTq8YBsSsoT/OZdZs6K3aceUELHtT+mwWuKyXWOpsDM0iLeVQ2 h3DLzxT89RDx7yH/Cs5Vxcf2ENIN2hKmMJQaIL2F11a7lQzBsTaU16m5UYR3j5cvaia4 Qev/DxxJQLf0zHUq0dcOjp6Jc+PAkzY5Ldxnu1FrdwjPBhiAQPQq2epPqZtwqGJoPeYG tNGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=SDZwY1f0ZHmUjqRlCSkL4vIMwaaWxaH0BPBE2rwQLFY=; b=bgtby8YKlwLR3vgRe/3ZwQdxpQgrvl7bc3JoVsSAQOVcBxCHEB8Og0v3kXZVBJwEMA IyU9qRbyAuvkj89C2MXmOFQrLrwsPygvoflLCqJt7jPclna1rsnynMrOqGnpPlL5Z0HQ f489qwY+c5zsUr9pPjaNg0rYnfzasVANi5qFphLTfzScIyKHmz6cR3DmwczQ5/7mR7Ul KtZEL/mLaZ6KZfAVfn0lL6TJdlxIQBO+79Z88bqJrJFiWedOHM4R+/gDCY4k7jjlHTlH 3Ru0JHJlXmFrwCeJWzby9VP9SL/wOi9kyHIHBZ4JxuzRHpKm0EW80u9DuieQqqfpyAar UJRg== X-Gm-Message-State: AKS2vOydeQi3SIoECIF0HcMql11f5aELm5rdAmWL6OXTNnrnhYOn83it AJ0wwoWmE3WksDS86mA= X-Received: by 10.237.61.91 with SMTP id h27mr70172819qtf.1.1499394250762; Thu, 06 Jul 2017 19:24:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:55 -1000 Message-Id: <20170707022111.21836-12-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::244 Subject: [Qemu-devel] [PATCH v2 11/27] target/sh4: Unify cpu_fregs into FREG 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We were treating FREG as an index and REG as a TCGv. Making FREG return a TCGv is both less confusing and a step toward cleaner banking of cpu_fregs. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/sh4/translate.c | 125 ++++++++++++++++++++-------------------------= ---- 1 file changed, 52 insertions(+), 73 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 0ac101e..b521cff 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -366,10 +366,11 @@ static inline void gen_store_fpr64 (TCGv_i64 t, int r= eg) #define REG(x) cpu_gregs[(x) ^ ctx->gbank] #define ALTREG(x) cpu_gregs[(x) ^ ctx->gbank ^ 0x10] =20 -#define FREG(x) (ctx->tbflags & FPSCR_FR ? (x) ^ 0x10 : (x)) +#define FREG(x) cpu_fregs[ctx->tbflags & FPSCR_FR ? (x) ^ 0x10 : (x)] #define XHACK(x) ((((x) & 1 ) << 4) | ((x) & 0xe)) -#define XREG(x) (ctx->tbflags & FPSCR_FR ? XHACK(x) ^ 0x10 : XHACK(x)) -#define DREG(x) FREG(x) /* Assumes lsb of (x) is always 0 */ +#define XREG(x) FREG(XHACK(x)) +/* Assumes lsb of (x) is always 0 */ +#define DREG(x) (ctx->tbflags & FPSCR_FR ? (x) ^ 0x10 : (x)) =20 #define CHECK_NOT_DELAY_SLOT \ if (ctx->envflags & DELAY_SLOT_MASK) { \ @@ -989,56 +990,51 @@ static void _decode_opc(DisasContext * ctx) CHECK_FPU_ENABLED if (ctx->tbflags & FPSCR_SZ) { TCGv_i64 fp =3D tcg_temp_new_i64(); - gen_load_fpr64(fp, XREG(B7_4)); - gen_store_fpr64(fp, XREG(B11_8)); + gen_load_fpr64(fp, XHACK(B7_4)); + gen_store_fpr64(fp, XHACK(B11_8)); tcg_temp_free_i64(fp); } else { - tcg_gen_mov_i32(cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B7_4)]); + tcg_gen_mov_i32(FREG(B11_8), FREG(B7_4)); } return; case 0xf00a: /* fmov {F,D,X}Rm,@Rn - FPSCR: Nothing */ CHECK_FPU_ENABLED if (ctx->tbflags & FPSCR_SZ) { TCGv addr_hi =3D tcg_temp_new(); - int fr =3D XREG(B7_4); + int fr =3D XHACK(B7_4); tcg_gen_addi_i32(addr_hi, REG(B11_8), 4); - tcg_gen_qemu_st_i32(cpu_fregs[fr], REG(B11_8), - ctx->memidx, MO_TEUL); - tcg_gen_qemu_st_i32(cpu_fregs[fr+1], addr_hi, - ctx->memidx, MO_TEUL); + tcg_gen_qemu_st_i32(FREG(fr), REG(B11_8), ctx->memidx, MO_TEUL= ); + tcg_gen_qemu_st_i32(FREG(fr + 1), addr_hi, ctx->memidx, MO_TEU= L); tcg_temp_free(addr_hi); } else { - tcg_gen_qemu_st_i32(cpu_fregs[FREG(B7_4)], REG(B11_8), - ctx->memidx, MO_TEUL); + tcg_gen_qemu_st_i32(FREG(B7_4), REG(B11_8), ctx->memidx, MO_TE= UL); } return; case 0xf008: /* fmov @Rm,{F,D,X}Rn - FPSCR: Nothing */ CHECK_FPU_ENABLED if (ctx->tbflags & FPSCR_SZ) { TCGv addr_hi =3D tcg_temp_new(); - int fr =3D XREG(B11_8); + int fr =3D XHACK(B11_8); tcg_gen_addi_i32(addr_hi, REG(B7_4), 4); - tcg_gen_qemu_ld_i32(cpu_fregs[fr], REG(B7_4), ctx->memidx, MO_= TEUL); - tcg_gen_qemu_ld_i32(cpu_fregs[fr+1], addr_hi, ctx->memidx, MO_= TEUL); + tcg_gen_qemu_ld_i32(FREG(fr), REG(B7_4), ctx->memidx, MO_TEUL); + tcg_gen_qemu_ld_i32(FREG(fr + 1), addr_hi, ctx->memidx, MO_TEU= L); tcg_temp_free(addr_hi); } else { - tcg_gen_qemu_ld_i32(cpu_fregs[FREG(B11_8)], REG(B7_4), - ctx->memidx, MO_TEUL); + tcg_gen_qemu_ld_i32(FREG(B11_8), REG(B7_4), ctx->memidx, MO_TE= UL); } return; case 0xf009: /* fmov @Rm+,{F,D,X}Rn - FPSCR: Nothing */ CHECK_FPU_ENABLED if (ctx->tbflags & FPSCR_SZ) { TCGv addr_hi =3D tcg_temp_new(); - int fr =3D XREG(B11_8); + int fr =3D XHACK(B11_8); tcg_gen_addi_i32(addr_hi, REG(B7_4), 4); - tcg_gen_qemu_ld_i32(cpu_fregs[fr], REG(B7_4), ctx->memidx, MO_= TEUL); - tcg_gen_qemu_ld_i32(cpu_fregs[fr+1], addr_hi, ctx->memidx, MO_= TEUL); + tcg_gen_qemu_ld_i32(FREG(fr), REG(B7_4), ctx->memidx, MO_TEUL); + tcg_gen_qemu_ld_i32(FREG(fr + 1), addr_hi, ctx->memidx, MO_TEU= L); tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 8); tcg_temp_free(addr_hi); } else { - tcg_gen_qemu_ld_i32(cpu_fregs[FREG(B11_8)], REG(B7_4), - ctx->memidx, MO_TEUL); + tcg_gen_qemu_ld_i32(FREG(B11_8), REG(B7_4), ctx->memidx, MO_TE= UL); tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 4); } return; @@ -1047,13 +1043,12 @@ static void _decode_opc(DisasContext * ctx) TCGv addr =3D tcg_temp_new_i32(); tcg_gen_subi_i32(addr, REG(B11_8), 4); if (ctx->tbflags & FPSCR_SZ) { - int fr =3D XREG(B7_4); - tcg_gen_qemu_st_i32(cpu_fregs[fr+1], addr, ctx->memidx, MO_TEU= L); + int fr =3D XHACK(B7_4); + tcg_gen_qemu_st_i32(FREG(fr + 1), addr, ctx->memidx, MO_TEUL); tcg_gen_subi_i32(addr, addr, 4); - tcg_gen_qemu_st_i32(cpu_fregs[fr], addr, ctx->memidx, MO_TEUL); + tcg_gen_qemu_st_i32(FREG(fr), addr, ctx->memidx, MO_TEUL); } else { - tcg_gen_qemu_st_i32(cpu_fregs[FREG(B7_4)], addr, - ctx->memidx, MO_TEUL); + tcg_gen_qemu_st_i32(FREG(B7_4), addr, ctx->memidx, MO_TEUL); } tcg_gen_mov_i32(REG(B11_8), addr); tcg_temp_free(addr); @@ -1064,15 +1059,12 @@ static void _decode_opc(DisasContext * ctx) TCGv addr =3D tcg_temp_new_i32(); tcg_gen_add_i32(addr, REG(B7_4), REG(0)); if (ctx->tbflags & FPSCR_SZ) { - int fr =3D XREG(B11_8); - tcg_gen_qemu_ld_i32(cpu_fregs[fr], addr, - ctx->memidx, MO_TEUL); + int fr =3D XHACK(B11_8); + tcg_gen_qemu_ld_i32(FREG(fr), addr, ctx->memidx, MO_TEUL); tcg_gen_addi_i32(addr, addr, 4); - tcg_gen_qemu_ld_i32(cpu_fregs[fr+1], addr, - ctx->memidx, MO_TEUL); + tcg_gen_qemu_ld_i32(FREG(fr + 1), addr, ctx->memidx, MO_TE= UL); } else { - tcg_gen_qemu_ld_i32(cpu_fregs[FREG(B11_8)], addr, - ctx->memidx, MO_TEUL); + tcg_gen_qemu_ld_i32(FREG(B11_8), addr, ctx->memidx, MO_TEU= L); } tcg_temp_free(addr); } @@ -1083,15 +1075,12 @@ static void _decode_opc(DisasContext * ctx) TCGv addr =3D tcg_temp_new(); tcg_gen_add_i32(addr, REG(B11_8), REG(0)); if (ctx->tbflags & FPSCR_SZ) { - int fr =3D XREG(B7_4); - tcg_gen_qemu_ld_i32(cpu_fregs[fr], addr, - ctx->memidx, MO_TEUL); + int fr =3D XHACK(B7_4); + tcg_gen_qemu_ld_i32(FREG(fr), addr, ctx->memidx, MO_TEUL); tcg_gen_addi_i32(addr, addr, 4); - tcg_gen_qemu_ld_i32(cpu_fregs[fr+1], addr, - ctx->memidx, MO_TEUL); + tcg_gen_qemu_ld_i32(FREG(fr + 1), addr, ctx->memidx, MO_TE= UL); } else { - tcg_gen_qemu_st_i32(cpu_fregs[FREG(B7_4)], addr, - ctx->memidx, MO_TEUL); + tcg_gen_qemu_st_i32(FREG(B7_4), addr, ctx->memidx, MO_TEUL= ); } tcg_temp_free(addr); } @@ -1139,34 +1128,28 @@ static void _decode_opc(DisasContext * ctx) } else { switch (ctx->opcode & 0xf00f) { case 0xf000: /* fadd Rm,Rn */ - gen_helper_fadd_FT(cpu_fregs[FREG(B11_8)], cpu_env, - cpu_fregs[FREG(B11_8)], - cpu_fregs[FREG(B7_4)]); + gen_helper_fadd_FT(FREG(B11_8), cpu_env, + FREG(B11_8), FREG(B7_4)); break; case 0xf001: /* fsub Rm,Rn */ - gen_helper_fsub_FT(cpu_fregs[FREG(B11_8)], cpu_env, - cpu_fregs[FREG(B11_8)], - cpu_fregs[FREG(B7_4)]); + gen_helper_fsub_FT(FREG(B11_8), cpu_env, + FREG(B11_8), FREG(B7_4)); break; case 0xf002: /* fmul Rm,Rn */ - gen_helper_fmul_FT(cpu_fregs[FREG(B11_8)], cpu_env, - cpu_fregs[FREG(B11_8)], - cpu_fregs[FREG(B7_4)]); + gen_helper_fmul_FT(FREG(B11_8), cpu_env, + FREG(B11_8), FREG(B7_4)); break; case 0xf003: /* fdiv Rm,Rn */ - gen_helper_fdiv_FT(cpu_fregs[FREG(B11_8)], cpu_env, - cpu_fregs[FREG(B11_8)], - cpu_fregs[FREG(B7_4)]); + gen_helper_fdiv_FT(FREG(B11_8), cpu_env, + FREG(B11_8), FREG(B7_4)); break; case 0xf004: /* fcmp/eq Rm,Rn */ gen_helper_fcmp_eq_FT(cpu_sr_t, cpu_env, - cpu_fregs[FREG(B11_8)], - cpu_fregs[FREG(B7_4)]); + FREG(B11_8), FREG(B7_4)); return; case 0xf005: /* fcmp/gt Rm,Rn */ gen_helper_fcmp_gt_FT(cpu_sr_t, cpu_env, - cpu_fregs[FREG(B11_8)], - cpu_fregs[FREG(B7_4)]); + FREG(B11_8), FREG(B7_4)); return; } } @@ -1178,9 +1161,8 @@ static void _decode_opc(DisasContext * ctx) if (ctx->tbflags & FPSCR_PR) { break; /* illegal instruction */ } else { - gen_helper_fmac_FT(cpu_fregs[FREG(B11_8)], cpu_env, - cpu_fregs[FREG(0)], cpu_fregs[FREG(B7_4= )], - cpu_fregs[FREG(B11_8)]); + gen_helper_fmac_FT(FREG(B11_8), cpu_env, + FREG(0), FREG(B7_4), FREG(B11_8)); return; } } @@ -1718,11 +1700,11 @@ static void _decode_opc(DisasContext * ctx) return; case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */ CHECK_FPU_ENABLED - tcg_gen_mov_i32(cpu_fregs[FREG(B11_8)], cpu_fpul); + tcg_gen_mov_i32(FREG(B11_8), cpu_fpul); return; case 0xf01d: /* flds FRm,FPUL - FPSCR: Nothing */ CHECK_FPU_ENABLED - tcg_gen_mov_i32(cpu_fpul, cpu_fregs[FREG(B11_8)]); + tcg_gen_mov_i32(cpu_fpul, FREG(B11_8)); return; case 0xf02d: /* float FPUL,FRn/DRn - FPSCR: R[PR,Enable.I]/W[Cause,Fla= g] */ CHECK_FPU_ENABLED @@ -1736,7 +1718,7 @@ static void _decode_opc(DisasContext * ctx) tcg_temp_free_i64(fp); } else { - gen_helper_float_FT(cpu_fregs[FREG(B11_8)], cpu_env, cpu_fpul); + gen_helper_float_FT(FREG(B11_8), cpu_env, cpu_fpul); } return; case 0xf03d: /* ftrc FRm/DRm,FPUL - FPSCR: R[PR,Enable.V]/W[Cause,Flag= ] */ @@ -1751,18 +1733,16 @@ static void _decode_opc(DisasContext * ctx) tcg_temp_free_i64(fp); } else { - gen_helper_ftrc_FT(cpu_fpul, cpu_env, cpu_fregs[FREG(B11_8)]); + gen_helper_ftrc_FT(cpu_fpul, cpu_env, FREG(B11_8)); } return; case 0xf04d: /* fneg FRn/DRn - FPSCR: Nothing */ CHECK_FPU_ENABLED - tcg_gen_xori_i32(cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B11_8)], - 0x80000000); + tcg_gen_xori_i32(FREG(B11_8), FREG(B11_8), 0x80000000); return; case 0xf05d: /* fabs FRn/DRn - FPCSR: Nothing */ CHECK_FPU_ENABLED - tcg_gen_andi_i32(cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B11_8)], - 0x7fffffff); + tcg_gen_andi_i32(FREG(B11_8), FREG(B11_8), 0x7fffffff); return; case 0xf06d: /* fsqrt FRn */ CHECK_FPU_ENABLED @@ -1775,8 +1755,7 @@ static void _decode_opc(DisasContext * ctx) gen_store_fpr64(fp, DREG(B11_8)); tcg_temp_free_i64(fp); } else { - gen_helper_fsqrt_FT(cpu_fregs[FREG(B11_8)], cpu_env, - cpu_fregs[FREG(B11_8)]); + gen_helper_fsqrt_FT(FREG(B11_8), cpu_env, FREG(B11_8)); } return; case 0xf07d: /* fsrra FRn */ @@ -1785,13 +1764,13 @@ static void _decode_opc(DisasContext * ctx) case 0xf08d: /* fldi0 FRn - FPSCR: R[PR] */ CHECK_FPU_ENABLED if (!(ctx->tbflags & FPSCR_PR)) { - tcg_gen_movi_i32(cpu_fregs[FREG(B11_8)], 0); + tcg_gen_movi_i32(FREG(B11_8), 0); } return; case 0xf09d: /* fldi1 FRn - FPSCR: R[PR] */ CHECK_FPU_ENABLED if (!(ctx->tbflags & FPSCR_PR)) { - tcg_gen_movi_i32(cpu_fregs[FREG(B11_8)], 0x3f800000); + tcg_gen_movi_i32(FREG(B11_8), 0x3f800000); } return; case 0xf0ad: /* fcnvsd FPUL,DRn */ --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394982950581.9427186829728; Thu, 6 Jul 2017 19:36:22 -0700 (PDT) Received: from localhost ([::1]:54168 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ81-0004sk-NC for importer@patchew.org; Thu, 06 Jul 2017 22:36:21 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34828) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIwM-0002x8-Cx for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIwL-0000rJ-7Z for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:18 -0400 Received: from mail-qt0-x242.google.com ([2607:f8b0:400d:c0d::242]:33281) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIwL-0000r5-2l for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:17 -0400 Received: by mail-qt0-x242.google.com with SMTP id c20so2725912qte.0 for ; Thu, 06 Jul 2017 19:24:17 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.24.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:24:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=8pfk12KIzjMPL0fMcWGVJhmdw+K2ksy28iwhnjWEUOA=; b=ojnDa/wivX27mOYXoQnm7NQF1PApSwKlyaEHuC7nNjKpUqEVj0y7J1ln0LAPyBKaOe Urg58GCczjYnKMZkI8z+23e9+I4xJ6lTrmfZuzltEvbQTU62LinEOJFjlQkdj0Majrri Y1TL+kER+GD7EOr1aUubptAMoGTaGX8LBHpO53s7aLMUcCizmOtIbqBR0T7z0E75dWU8 lFMdI/HHuhcS1js9MtHXUud3e4QXAJ6V1FyMVk+rHgqpCrOYUeWUhI3rHufNbzHlNfQQ e5tnWtds/a88OH8mvC5GIBx+vGlWYdaAN08ma5mp3fb4xxukiaB5geOeYNIb6Nop0ixO nRuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=8pfk12KIzjMPL0fMcWGVJhmdw+K2ksy28iwhnjWEUOA=; b=WKgkDqgL6Yh14kgxv/sIhOzv8/vcIEkE1531GTaK9GiCEoflkehCsqC6lFh/PmV7yy Lyz4+Y58p5rxp7M5OD00ZPVrVjkA1ov9pCQnfy6xksK/Jegmxc7N36u86yVpC8NwnuBY tDaGwEHl56W15PG9r+K6xF5TK8ThBGlZ+FCBI+6q5cMjMkAZeTwH93Q8fSWocMKW0a3O Ua9KAoPAfBBO4Eb5Au1432WbPXUYw/qBNNtTJAmQHYLWB57vKnWGXzTLy2/8iJxmYa9F xUDxBUuBk77IlA3opiT2ntdyOQYmiFRZiL4qQffDMpV/4waDGF+8JKq3KP/BBof07/GE HpXg== X-Gm-Message-State: AIVw1136hfaSfvBoPk5De/dKtrBB4+4NHm7gWzcS03puhmeyRcmo5nLS jAvqDL7qeGAgrpY+h7Q= X-Received: by 10.200.43.58 with SMTP id 55mr35461540qtu.202.1499394256431; Thu, 06 Jul 2017 19:24:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:56 -1000 Message-Id: <20170707022111.21836-13-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::242 Subject: [Qemu-devel] [PATCH v2 12/27] target/sh4: Pass DisasContext to fpr64 routines 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 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: Richard Henderson Reviewed-by: Aurelien Jarno Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/sh4/translate.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index b521cff..878c0bd 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -343,12 +343,12 @@ static void gen_delayed_conditional_jump(DisasContext= * ctx) gen_jump(ctx); } =20 -static inline void gen_load_fpr64(TCGv_i64 t, int reg) +static inline void gen_load_fpr64(DisasContext *ctx, TCGv_i64 t, int reg) { tcg_gen_concat_i32_i64(t, cpu_fregs[reg + 1], cpu_fregs[reg]); } =20 -static inline void gen_store_fpr64 (TCGv_i64 t, int reg) +static inline void gen_store_fpr64(DisasContext *ctx, TCGv_i64 t, int reg) { tcg_gen_extr_i64_i32(cpu_fregs[reg + 1], cpu_fregs[reg], t); } @@ -990,8 +990,8 @@ static void _decode_opc(DisasContext * ctx) CHECK_FPU_ENABLED if (ctx->tbflags & FPSCR_SZ) { TCGv_i64 fp =3D tcg_temp_new_i64(); - gen_load_fpr64(fp, XHACK(B7_4)); - gen_store_fpr64(fp, XHACK(B11_8)); + gen_load_fpr64(ctx, fp, XHACK(B7_4)); + gen_store_fpr64(ctx, fp, XHACK(B11_8)); tcg_temp_free_i64(fp); } else { tcg_gen_mov_i32(FREG(B11_8), FREG(B7_4)); @@ -1100,8 +1100,8 @@ static void _decode_opc(DisasContext * ctx) break; /* illegal instruction */ fp0 =3D tcg_temp_new_i64(); fp1 =3D tcg_temp_new_i64(); - gen_load_fpr64(fp0, DREG(B11_8)); - gen_load_fpr64(fp1, DREG(B7_4)); + gen_load_fpr64(ctx, fp0, DREG(B11_8)); + gen_load_fpr64(ctx, fp1, DREG(B7_4)); switch (ctx->opcode & 0xf00f) { case 0xf000: /* fadd Rm,Rn */ gen_helper_fadd_DT(fp0, cpu_env, fp0, fp1); @@ -1122,7 +1122,7 @@ static void _decode_opc(DisasContext * ctx) gen_helper_fcmp_gt_DT(cpu_sr_t, cpu_env, fp0, fp1); return; } - gen_store_fpr64(fp0, DREG(B11_8)); + gen_store_fpr64(ctx, fp0, DREG(B11_8)); tcg_temp_free_i64(fp0); tcg_temp_free_i64(fp1); } else { @@ -1714,7 +1714,7 @@ static void _decode_opc(DisasContext * ctx) break; /* illegal instruction */ fp =3D tcg_temp_new_i64(); gen_helper_float_DT(fp, cpu_env, cpu_fpul); - gen_store_fpr64(fp, DREG(B11_8)); + gen_store_fpr64(ctx, fp, DREG(B11_8)); tcg_temp_free_i64(fp); } else { @@ -1728,7 +1728,7 @@ static void _decode_opc(DisasContext * ctx) if (ctx->opcode & 0x0100) break; /* illegal instruction */ fp =3D tcg_temp_new_i64(); - gen_load_fpr64(fp, DREG(B11_8)); + gen_load_fpr64(ctx, fp, DREG(B11_8)); gen_helper_ftrc_DT(cpu_fpul, cpu_env, fp); tcg_temp_free_i64(fp); } @@ -1750,9 +1750,9 @@ static void _decode_opc(DisasContext * ctx) if (ctx->opcode & 0x0100) break; /* illegal instruction */ TCGv_i64 fp =3D tcg_temp_new_i64(); - gen_load_fpr64(fp, DREG(B11_8)); + gen_load_fpr64(ctx, fp, DREG(B11_8)); gen_helper_fsqrt_DT(fp, cpu_env, fp); - gen_store_fpr64(fp, DREG(B11_8)); + gen_store_fpr64(ctx, fp, DREG(B11_8)); tcg_temp_free_i64(fp); } else { gen_helper_fsqrt_FT(FREG(B11_8), cpu_env, FREG(B11_8)); @@ -1778,7 +1778,7 @@ static void _decode_opc(DisasContext * ctx) { TCGv_i64 fp =3D tcg_temp_new_i64(); gen_helper_fcnvsd_FT_DT(fp, cpu_env, cpu_fpul); - gen_store_fpr64(fp, DREG(B11_8)); + gen_store_fpr64(ctx, fp, DREG(B11_8)); tcg_temp_free_i64(fp); } return; @@ -1786,7 +1786,7 @@ static void _decode_opc(DisasContext * ctx) CHECK_FPU_ENABLED { TCGv_i64 fp =3D tcg_temp_new_i64(); - gen_load_fpr64(fp, DREG(B11_8)); + gen_load_fpr64(ctx, fp, DREG(B11_8)); gen_helper_fcnvds_DT_FT(cpu_fpul, cpu_env, fp); tcg_temp_free_i64(fp); } --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394669514203.53712661011286; Thu, 6 Jul 2017 19:31:09 -0700 (PDT) Received: from localhost ([::1]:54145 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ2y-0000RZ-76 for importer@patchew.org; Thu, 06 Jul 2017 22:31:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34856) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIwR-00033D-Pt for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIwO-0000st-MW for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:23 -0400 Received: from mail-qk0-x241.google.com ([2607:f8b0:400d:c09::241]:35577) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIwO-0000sg-I6 for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:20 -0400 Received: by mail-qk0-x241.google.com with SMTP id 16so2745566qkg.2 for ; Thu, 06 Jul 2017 19:24:20 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.24.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:24:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=keZowioOsPIQiAiLEkeJageAOyb9qqok4dP3oEqxJdA=; b=SMlzJMEEOFxygy85m4D300wt8B368E0aAGLEndp4gbSN2mCKFNqH8xVZ9KEp+fcCvi njD7/Scg+pkjq7y8WRo1V6LHP50OQEaLnQG3T3jKnlbFJwPXisjOLlOqo2KS+zF7pMvo 2gjhnRrfFF3pa7WnNfyV7vYb9zfygs6qQkcJOwnxDjKIkKJg80AU17TPQa1Zdq/7Nc32 h+ZIZA7n25WVOjNU6qZw7RlGQ2+aQg7MXfOTXeCdxZU5BpitCp7PbpiTeLd0hpE437U1 Ud4lYxSR4xbNs0uT+7WH8J/1c6oe4EUOZSkz3naPwglvTLS+AVEzZFnf753lPzBNMG54 B8uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=keZowioOsPIQiAiLEkeJageAOyb9qqok4dP3oEqxJdA=; b=Le+qrx3yy+v6vsnDUi9GeNU2mQVylfe84WzpsEjVoeUH1s2v1mS5RE17iABFhZhUda 1VVZKBA/RnSxfiBUXDz/ZMtD0GVh/CTFYMpp49680hr3/tw0cegY58srtF6ctBMaOhKD AY+SyXzWwtJ08ZJiJ8DrUPpfEJtFHhAZ12f3fJxM3r5bxEOjeHuJmZsCMquNXEeQ64hy 8/SKdOUdEO25f1HQdsXIu8NRwbMRd9PX2wbZ2oRsjN3x00yXDy0BWYA7E4D+DRWq7ZSW xLyVq3N7Ij11PW/u/FkpWy3dOsNmWjs8d3fARo99FKEsPiuA+JkfZFs2rC4SI5+vjtdP Xa4g== X-Gm-Message-State: AKS2vOz+PVY26XGMI6HnJd7B6f1O1KXl/PnxOIUCL1ELYm6clpY4RCGS Ty2WPg7r/8Lq+05Mw98= X-Received: by 10.55.4.139 with SMTP id 133mr60092379qke.259.1499394259856; Thu, 06 Jul 2017 19:24:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:57 -1000 Message-Id: <20170707022111.21836-14-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::241 Subject: [Qemu-devel] [PATCH v2 13/27] target/sh4: Hoist fp register bank selection 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Compute which register bank to use once at the start of translation. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno --- target/sh4/translate.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 878c0bd..fc743da 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -42,6 +42,7 @@ typedef struct DisasContext { int bstate; int memidx; int gbank; + int fbank; uint32_t delayed_pc; int singlestep_enabled; uint32_t features; @@ -365,12 +366,12 @@ static inline void gen_store_fpr64(DisasContext *ctx,= TCGv_i64 t, int reg) =20 #define REG(x) cpu_gregs[(x) ^ ctx->gbank] #define ALTREG(x) cpu_gregs[(x) ^ ctx->gbank ^ 0x10] +#define FREG(x) cpu_fregs[(x) ^ ctx->fbank] =20 -#define FREG(x) cpu_fregs[ctx->tbflags & FPSCR_FR ? (x) ^ 0x10 : (x)] #define XHACK(x) ((((x) & 1 ) << 4) | ((x) & 0xe)) -#define XREG(x) FREG(XHACK(x)) +#define XREG(x) FREG(XHACK(x)) /* Assumes lsb of (x) is always 0 */ -#define DREG(x) (ctx->tbflags & FPSCR_FR ? (x) ^ 0x10 : (x)) +#define DREG(x) ((x) ^ ctx->fbank) =20 #define CHECK_NOT_DELAY_SLOT \ if (ctx->envflags & DELAY_SLOT_MASK) { \ @@ -2252,6 +2253,7 @@ void gen_intermediate_code(CPUSH4State * env, struct = TranslationBlock *tb) ctx.has_movcal =3D (ctx.tbflags & TB_FLAG_PENDING_MOVCA); ctx.gbank =3D ((ctx.tbflags & (1 << SR_MD)) && (ctx.tbflags & (1 << SR_RB))) * 0x10; + ctx.fbank =3D ctx.tbflags & FPSCR_FR ? 0x10 : 0; =20 max_insns =3D tb->cflags & CF_COUNT_MASK; if (max_insns =3D=3D 0) { --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394515541330.68489976218507; Thu, 6 Jul 2017 19:28:35 -0700 (PDT) Received: from localhost ([::1]:54129 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ0U-0006KV-5A for importer@patchew.org; Thu, 06 Jul 2017 22:28:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34870) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIwT-00034d-90 for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIwS-0000uy-ML for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:25 -0400 Received: from mail-qt0-x243.google.com ([2607:f8b0:400d:c0d::243]:36578) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIwS-0000uZ-HU for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:24 -0400 Received: by mail-qt0-x243.google.com with SMTP id v31so2716690qtb.3 for ; Thu, 06 Jul 2017 19:24:24 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.24.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:24:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=Wa77iO/ZrdYNEsGDHkMqD31wwR0TNvNIyT2XwwbQqao=; b=R3/d2TGO9f+Qs4Lk16idaooU4hu3Ncjsnp27wc/VUu/f5+5hSLVHt9KTY0je1jkbkC KTgB2DjA9luOQJjxACb1rKWt6ZLDnswvcf2Y+d+M3eLGMkrxJvzfFJK5sQmq9Uazf2QF yNjaVM6ra5Fhzt/fv3s3WUIB79H0mKEi+SeD4PUjKmD5BNTph1hPaEjk5VeVqXhQByCF IRK9vDC7v88pelNaPEJyZJ/W04YU12ViEe/LaGnkXpXNb7p46Y8g6njbYIMu8oXIliaw kAdts/13MitxyxEsF3utOmYq83XSsaHuDkXMjpxwAQtHod1dIb/4OziSTUq+315Z2ZXK DZOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=Wa77iO/ZrdYNEsGDHkMqD31wwR0TNvNIyT2XwwbQqao=; b=WZbZoXF3YohyGAejSGrWtrkhA5zPFQgecBkD21cb1XzrmwcweR4Q2TWbC+4zWG+c1R /dYhLG5cxgaGaa68z9KhS/pog2GqlaDWuafWzi2dqUBROHvumaYQAcF7HSfVENMLGUUr um419AaPL7ttP1sNhrxfJDHCjuWhy3lMSNnwt2Mbg9bSy0Xj60Eid2yfCCJbf8ITDrSi OeRwIOvo7xS/4iiwnO6WtpCvjBZ/HMSYuzz1Am8fQ978Rw6OiJxjJnLmyTA+MEgmwE9/ 3IkrLnIjtmfEPN37kVSQgPGiuCDqvIiv+6eE93PpsEAgaCd6DIgWtnDcmJhiEC+UWHyW E5oA== X-Gm-Message-State: AKS2vOxXvyi3u/Of8bnPO7rgKPLQyoBc6mXIyLkzi+3B3OBNgYUsKW0l RKOmREZb+Fi44pHgIiE= X-Received: by 10.200.52.129 with SMTP id w1mr64465071qtb.77.1499394263925; Thu, 06 Jul 2017 19:24:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:58 -1000 Message-Id: <20170707022111.21836-15-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::243 Subject: [Qemu-devel] [PATCH v2 14/27] target/sh4: Eliminate unused XREG macro 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 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: Richard Henderson Reviewed-by: Aurelien Jarno --- target/sh4/translate.c | 1 - 1 file changed, 1 deletion(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index fc743da..b6c3ff9 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -369,7 +369,6 @@ static inline void gen_store_fpr64(DisasContext *ctx, T= CGv_i64 t, int reg) #define FREG(x) cpu_fregs[(x) ^ ctx->fbank] =20 #define XHACK(x) ((((x) & 1 ) << 4) | ((x) & 0xe)) -#define XREG(x) FREG(XHACK(x)) /* Assumes lsb of (x) is always 0 */ #define DREG(x) ((x) ^ ctx->fbank) =20 --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394721738408.86053439430873; Thu, 6 Jul 2017 19:32:01 -0700 (PDT) Received: from localhost ([::1]:54146 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ3o-00017i-7a for importer@patchew.org; Thu, 06 Jul 2017 22:32:00 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34900) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIwX-00038W-72 for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIwW-0000wq-4A for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:29 -0400 Received: from mail-qt0-x242.google.com ([2607:f8b0:400d:c0d::242]:36582) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIwV-0000wV-VP for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:28 -0400 Received: by mail-qt0-x242.google.com with SMTP id v31so2716815qtb.3 for ; Thu, 06 Jul 2017 19:24:27 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.24.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:24:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=G4BQ3QrdP0w0sg22ycSTniDlHtjGPLKDzVbB8fTM2D8=; b=WssgfRueXELsdRG3XdlTYBzgkaKpJZ4oPKUxTWlKYQBK13m+eDnYtPvhTg6HMwnHwl 7LMI1ddVnph7jVk2e/nQjPAsTG+CAz4U4xAuiMVjr+LWUH4OVWQAUeWMH9qjCTxnbytu +2PsbpCY6MKp0+eCd/q41o2XbDJsdXX3zK3+PCs01kRWrq6JhH5qc3DCtuzVD016je9j 1hWjrQ6gPcsVITDabj/WlviNl4uZdTi1tiMLWURzP6yAYhLUcbGyzbw/igQPTl9pbVyi 4HrSfyg/6eHRwf2whFY4ZOhyPuyK1YLI9ifZPVfC99vj//5Fm0rVMga+lZ9bUhJLSUBr 8lmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=G4BQ3QrdP0w0sg22ycSTniDlHtjGPLKDzVbB8fTM2D8=; b=izhoeaIgj/2/4niT1ZIKfdHjpRZ3XAMtYhINEgauj8ILYbMoXKt/HPvmVfqM2nF9ly Bu3qm4LZJ9V3k+WR/R3nvtTB4zpF9lOxFRx6KtknE9DI19DKwNNPysGMI7mbF4sVHEpw 9xukksI3UQ3VVyegMZYWwE1LeZojg2PLj2yFJKYIeo60khwW/lz6/ZBnoUOeweDQKXxZ +emfw9ywMNRJpVFvPGuIPepj5eiqPt4fPfq9uIThDxjOkUTJXo14aLnpDkNxC8oQtlM4 0PolBmVll+/mEorsgbJNNuZHRLSP/eaW+G1viYo24oQU+22DEaUYo0zvFfpDeCsCPwPF SYQw== X-Gm-Message-State: AIVw113yHAQmrMyMmr7lA9MeNxc1sckq36hCJ0elC1B7+kBxG/uCF1KX UenmINMlmotCzmk4nZY= X-Received: by 10.200.35.21 with SMTP id a21mr34591714qta.56.1499394267304; Thu, 06 Jul 2017 19:24:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:20:59 -1000 Message-Id: <20170707022111.21836-16-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::242 Subject: [Qemu-devel] [PATCH v2 15/27] target/sh4: Merge DREG into fpr64 routines 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Also add a debugging assert that we did signal illegal opc for odd double-precision registers. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno --- target/sh4/translate.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index b6c3ff9..616e615 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -346,11 +346,17 @@ static void gen_delayed_conditional_jump(DisasContext= * ctx) =20 static inline void gen_load_fpr64(DisasContext *ctx, TCGv_i64 t, int reg) { + /* We have already signaled illegal instruction for odd Dr. */ + tcg_debug_assert((reg & 1) =3D=3D 0); + reg ^=3D ctx->fbank; tcg_gen_concat_i32_i64(t, cpu_fregs[reg + 1], cpu_fregs[reg]); } =20 static inline void gen_store_fpr64(DisasContext *ctx, TCGv_i64 t, int reg) { + /* We have already signaled illegal instruction for odd Dr. */ + tcg_debug_assert((reg & 1) =3D=3D 0); + reg ^=3D ctx->fbank; tcg_gen_extr_i64_i32(cpu_fregs[reg + 1], cpu_fregs[reg], t); } =20 @@ -369,8 +375,6 @@ static inline void gen_store_fpr64(DisasContext *ctx, T= CGv_i64 t, int reg) #define FREG(x) cpu_fregs[(x) ^ ctx->fbank] =20 #define XHACK(x) ((((x) & 1 ) << 4) | ((x) & 0xe)) -/* Assumes lsb of (x) is always 0 */ -#define DREG(x) ((x) ^ ctx->fbank) =20 #define CHECK_NOT_DELAY_SLOT \ if (ctx->envflags & DELAY_SLOT_MASK) { \ @@ -1100,8 +1104,8 @@ static void _decode_opc(DisasContext * ctx) break; /* illegal instruction */ fp0 =3D tcg_temp_new_i64(); fp1 =3D tcg_temp_new_i64(); - gen_load_fpr64(ctx, fp0, DREG(B11_8)); - gen_load_fpr64(ctx, fp1, DREG(B7_4)); + gen_load_fpr64(ctx, fp0, B11_8); + gen_load_fpr64(ctx, fp1, B7_4); switch (ctx->opcode & 0xf00f) { case 0xf000: /* fadd Rm,Rn */ gen_helper_fadd_DT(fp0, cpu_env, fp0, fp1); @@ -1122,7 +1126,7 @@ static void _decode_opc(DisasContext * ctx) gen_helper_fcmp_gt_DT(cpu_sr_t, cpu_env, fp0, fp1); return; } - gen_store_fpr64(ctx, fp0, DREG(B11_8)); + gen_store_fpr64(ctx, fp0, B11_8); tcg_temp_free_i64(fp0); tcg_temp_free_i64(fp1); } else { @@ -1714,7 +1718,7 @@ static void _decode_opc(DisasContext * ctx) break; /* illegal instruction */ fp =3D tcg_temp_new_i64(); gen_helper_float_DT(fp, cpu_env, cpu_fpul); - gen_store_fpr64(ctx, fp, DREG(B11_8)); + gen_store_fpr64(ctx, fp, B11_8); tcg_temp_free_i64(fp); } else { @@ -1728,7 +1732,7 @@ static void _decode_opc(DisasContext * ctx) if (ctx->opcode & 0x0100) break; /* illegal instruction */ fp =3D tcg_temp_new_i64(); - gen_load_fpr64(ctx, fp, DREG(B11_8)); + gen_load_fpr64(ctx, fp, B11_8); gen_helper_ftrc_DT(cpu_fpul, cpu_env, fp); tcg_temp_free_i64(fp); } @@ -1750,9 +1754,9 @@ static void _decode_opc(DisasContext * ctx) if (ctx->opcode & 0x0100) break; /* illegal instruction */ TCGv_i64 fp =3D tcg_temp_new_i64(); - gen_load_fpr64(ctx, fp, DREG(B11_8)); + gen_load_fpr64(ctx, fp, B11_8); gen_helper_fsqrt_DT(fp, cpu_env, fp); - gen_store_fpr64(ctx, fp, DREG(B11_8)); + gen_store_fpr64(ctx, fp, B11_8); tcg_temp_free_i64(fp); } else { gen_helper_fsqrt_FT(FREG(B11_8), cpu_env, FREG(B11_8)); @@ -1778,7 +1782,7 @@ static void _decode_opc(DisasContext * ctx) { TCGv_i64 fp =3D tcg_temp_new_i64(); gen_helper_fcnvsd_FT_DT(fp, cpu_env, cpu_fpul); - gen_store_fpr64(ctx, fp, DREG(B11_8)); + gen_store_fpr64(ctx, fp, B11_8); tcg_temp_free_i64(fp); } return; @@ -1786,7 +1790,7 @@ static void _decode_opc(DisasContext * ctx) CHECK_FPU_ENABLED { TCGv_i64 fp =3D tcg_temp_new_i64(); - gen_load_fpr64(ctx, fp, DREG(B11_8)); + gen_load_fpr64(ctx, fp, B11_8); gen_helper_fcnvds_DT_FT(cpu_fpul, cpu_env, fp); tcg_temp_free_i64(fp); } --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 149939458103512.718337269595963; Thu, 6 Jul 2017 19:29:41 -0700 (PDT) Received: from localhost ([::1]:54133 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ1W-0007WI-Mf for importer@patchew.org; Thu, 06 Jul 2017 22:29:38 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34973) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIwc-0003Di-Pz for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIwb-00010E-3q for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:34 -0400 Received: from mail-qk0-x243.google.com ([2607:f8b0:400d:c09::243]:35594) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIwa-0000zz-Va for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:33 -0400 Received: by mail-qk0-x243.google.com with SMTP id 16so2746022qkg.2 for ; Thu, 06 Jul 2017 19:24:32 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.24.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:24:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=7sficcX29WEwhyfUIUIlPqDMP1Gs2uHB4tuikurdzPo=; b=ESj+vcBqZJR2j3D6Hr5pAUGv2rIs2e27AXBukBc4naLMWyI4wSQbNjUaorQ69wBk97 qeyHZo2D+SM48cHZ7gLQ9td8lN/OHIClfiZf0BtGaWbIFkmhoeMH/kPHa0fTAcT9bSPx wKup5P9H8JRZLUG0xNeWwylJNR/ypGSn8kljZQUmlx3Q0J4KrL1yzIoqHfXLNTV4bUrW tx4JC/jWoyWFZzK3m0B5sUIi7oUwzVkIOezMqHVY93MftucyuPfp5QffT5603yLT/oLa BdDlGvLsL3kVpbFbO/bDQ3TdjXQODSWHbvpXtmmK/ea8DUHPB+rL42FsnqPzb39fY16D lg0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=7sficcX29WEwhyfUIUIlPqDMP1Gs2uHB4tuikurdzPo=; b=WN7/S26xfib1b/oW23k2y4YiaEpmtucQW3K6rK8nUMOA1JvL87cyNed1hvUmjoEEc7 iHg9DV89fqycyhH0FTF15sIGuMM3QKTx0GBYieApvlOKS4tooiK+w1BnvDBDb0V+bYh+ AjOO5uQWtl5P2R899jp2hLmuIvGrAeA58YU0i7o6LlU9QiedTYxWxOfE76+v54fca+2j YOMgCHnuBWwZUCqKEHkEIYvaOJtiwSY8N7Sc+cF+DvhcZ5X/5JokBb/5bU2Uasod/R55 BN7b7/nHBA72foy1lMcctgPeIlU+9G3iu5963KGWxaozAw+Si12cbIGKpOR40yEji61k 4sLg== X-Gm-Message-State: AKS2vOzBjPeicrvi5UX3TZwFRUiRCmZauTqnK+6v/5w0YoYEXd7zy//2 0KNacr7orYO+cHX4X2Q= X-Received: by 10.55.79.131 with SMTP id d125mr61605777qkb.169.1499394272279; Thu, 06 Jul 2017 19:24:32 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:21:00 -1000 Message-Id: <20170707022111.21836-17-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::243 Subject: [Qemu-devel] [PATCH v2 16/27] target/sh4: Load/store Dr as 64-bit quantities 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This enforces proper alignment and makes the register update more natural. Note that there is a more serious bug fix for fmov {DX}Rn,@(R0,Rn) to use a store instead of a load. Signed-off-by: Richard Henderson --- target/sh4/translate.c | 74 ++++++++++++++++++++++++----------------------= ---- 1 file changed, 35 insertions(+), 39 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 616e615..fcdabe8 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -1004,12 +1004,10 @@ static void _decode_opc(DisasContext * ctx) case 0xf00a: /* fmov {F,D,X}Rm,@Rn - FPSCR: Nothing */ CHECK_FPU_ENABLED if (ctx->tbflags & FPSCR_SZ) { - TCGv addr_hi =3D tcg_temp_new(); - int fr =3D XHACK(B7_4); - tcg_gen_addi_i32(addr_hi, REG(B11_8), 4); - tcg_gen_qemu_st_i32(FREG(fr), REG(B11_8), ctx->memidx, MO_TEUL= ); - tcg_gen_qemu_st_i32(FREG(fr + 1), addr_hi, ctx->memidx, MO_TEU= L); - tcg_temp_free(addr_hi); + TCGv_i64 fp =3D tcg_temp_new_i64(); + gen_load_fpr64(ctx, fp, XHACK(B7_4)); + tcg_gen_qemu_st_i64(fp, REG(B11_8), ctx->memidx, MO_TEQ); + tcg_temp_free_i64(fp); } else { tcg_gen_qemu_st_i32(FREG(B7_4), REG(B11_8), ctx->memidx, MO_TE= UL); } @@ -1017,12 +1015,10 @@ static void _decode_opc(DisasContext * ctx) case 0xf008: /* fmov @Rm,{F,D,X}Rn - FPSCR: Nothing */ CHECK_FPU_ENABLED if (ctx->tbflags & FPSCR_SZ) { - TCGv addr_hi =3D tcg_temp_new(); - int fr =3D XHACK(B11_8); - tcg_gen_addi_i32(addr_hi, REG(B7_4), 4); - tcg_gen_qemu_ld_i32(FREG(fr), REG(B7_4), ctx->memidx, MO_TEUL); - tcg_gen_qemu_ld_i32(FREG(fr + 1), addr_hi, ctx->memidx, MO_TEU= L); - tcg_temp_free(addr_hi); + TCGv_i64 fp =3D tcg_temp_new_i64(); + tcg_gen_qemu_ld_i64(fp, REG(B7_4), ctx->memidx, MO_TEQ); + gen_store_fpr64(ctx, fp, XHACK(B11_8)); + tcg_temp_free_i64(fp); } else { tcg_gen_qemu_ld_i32(FREG(B11_8), REG(B7_4), ctx->memidx, MO_TE= UL); } @@ -1030,13 +1026,11 @@ static void _decode_opc(DisasContext * ctx) case 0xf009: /* fmov @Rm+,{F,D,X}Rn - FPSCR: Nothing */ CHECK_FPU_ENABLED if (ctx->tbflags & FPSCR_SZ) { - TCGv addr_hi =3D tcg_temp_new(); - int fr =3D XHACK(B11_8); - tcg_gen_addi_i32(addr_hi, REG(B7_4), 4); - tcg_gen_qemu_ld_i32(FREG(fr), REG(B7_4), ctx->memidx, MO_TEUL); - tcg_gen_qemu_ld_i32(FREG(fr + 1), addr_hi, ctx->memidx, MO_TEU= L); - tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 8); - tcg_temp_free(addr_hi); + TCGv_i64 fp =3D tcg_temp_new_i64(); + tcg_gen_qemu_ld_i64(fp, REG(B7_4), ctx->memidx, MO_TEQ); + gen_store_fpr64(ctx, fp, XHACK(B11_8)); + tcg_temp_free_i64(fp); + tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 8); } else { tcg_gen_qemu_ld_i32(FREG(B11_8), REG(B7_4), ctx->memidx, MO_TE= UL); tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 4); @@ -1044,18 +1038,20 @@ static void _decode_opc(DisasContext * ctx) return; case 0xf00b: /* fmov {F,D,X}Rm,@-Rn - FPSCR: Nothing */ CHECK_FPU_ENABLED - TCGv addr =3D tcg_temp_new_i32(); - tcg_gen_subi_i32(addr, REG(B11_8), 4); - if (ctx->tbflags & FPSCR_SZ) { - int fr =3D XHACK(B7_4); - tcg_gen_qemu_st_i32(FREG(fr + 1), addr, ctx->memidx, MO_TEUL); - tcg_gen_subi_i32(addr, addr, 4); - tcg_gen_qemu_st_i32(FREG(fr), addr, ctx->memidx, MO_TEUL); - } else { - tcg_gen_qemu_st_i32(FREG(B7_4), addr, ctx->memidx, MO_TEUL); - } - tcg_gen_mov_i32(REG(B11_8), addr); - tcg_temp_free(addr); + { + TCGv addr =3D tcg_temp_new_i32(); + if (ctx->tbflags & FPSCR_SZ) { + TCGv_i64 fp =3D tcg_temp_new_i64(); + gen_load_fpr64(ctx, fp, XHACK(B7_4)); + tcg_gen_qemu_st_i64(fp, addr, ctx->memidx, MO_TEQ); + tcg_temp_free_i64(fp); + } else { + tcg_gen_subi_i32(addr, REG(B11_8), 4); + tcg_gen_qemu_st_i32(FREG(B7_4), addr, ctx->memidx, MO_TEUL= ); + } + tcg_gen_mov_i32(REG(B11_8), addr); + tcg_temp_free(addr); + } return; case 0xf006: /* fmov @(R0,Rm),{F,D,X}Rm - FPSCR: Nothing */ CHECK_FPU_ENABLED @@ -1063,10 +1059,10 @@ static void _decode_opc(DisasContext * ctx) TCGv addr =3D tcg_temp_new_i32(); tcg_gen_add_i32(addr, REG(B7_4), REG(0)); if (ctx->tbflags & FPSCR_SZ) { - int fr =3D XHACK(B11_8); - tcg_gen_qemu_ld_i32(FREG(fr), addr, ctx->memidx, MO_TEUL); - tcg_gen_addi_i32(addr, addr, 4); - tcg_gen_qemu_ld_i32(FREG(fr + 1), addr, ctx->memidx, MO_TE= UL); + TCGv_i64 fp =3D tcg_temp_new_i64(); + tcg_gen_qemu_ld_i64(fp, addr, ctx->memidx, MO_TEQ); + gen_store_fpr64(ctx, fp, XHACK(B11_8)); + tcg_temp_free_i64(fp); } else { tcg_gen_qemu_ld_i32(FREG(B11_8), addr, ctx->memidx, MO_TEU= L); } @@ -1079,10 +1075,10 @@ static void _decode_opc(DisasContext * ctx) TCGv addr =3D tcg_temp_new(); tcg_gen_add_i32(addr, REG(B11_8), REG(0)); if (ctx->tbflags & FPSCR_SZ) { - int fr =3D XHACK(B7_4); - tcg_gen_qemu_ld_i32(FREG(fr), addr, ctx->memidx, MO_TEUL); - tcg_gen_addi_i32(addr, addr, 4); - tcg_gen_qemu_ld_i32(FREG(fr + 1), addr, ctx->memidx, MO_TE= UL); + TCGv_i64 fp =3D tcg_temp_new_i64(); + gen_load_fpr64(ctx, fp, XHACK(B7_4)); + tcg_gen_qemu_st_i64(fp, addr, ctx->memidx, MO_TEQ); + tcg_temp_free_i64(fp); } else { tcg_gen_qemu_st_i32(FREG(B7_4), addr, ctx->memidx, MO_TEUL= ); } --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394883595744.513429648567; Thu, 6 Jul 2017 19:34:43 -0700 (PDT) Received: from localhost ([::1]:54155 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ6Q-0003R6-5V for importer@patchew.org; Thu, 06 Jul 2017 22:34:42 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35006) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIwg-0003Gy-E0 for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIwf-00013F-KX for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:38 -0400 Received: from mail-qt0-x243.google.com ([2607:f8b0:400d:c0d::243]:33296) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIwf-000130-HX for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:37 -0400 Received: by mail-qt0-x243.google.com with SMTP id c20so2726565qte.0 for ; Thu, 06 Jul 2017 19:24:37 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.24.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:24:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=7R0Z1qeg4F3h/98UokYj1d9DLrgMh88RSDUQSKmB7a8=; b=eb8zmdApLH1ocaJGlx5zy3Ue10yiE27aQQwZUXowkMp9WwddliZfDn9cw1TAQpb8iZ fvKpNdlmSl1srWe23nKoKV2f5LQFWB/KsaDnT+jFPaMlzAPsRxcl7GHXbXIuoZ4SKGoD ObNpP464cZnSwk6vyBGJeCS/+2I7jPdGivz+4fOzR4aL4Vy0p9tL5f2GsqrFyy9N/FtE iGttWE+8td24+WC9k7dh6jxLqmWEM15ggoozT4UOMTGB0Edcw2+URmbrEp67DC1u9f3F AMOIFeh80JaHCmCJUATQvkt6MOw74ZF6s984spoo5spPBTSeyzR9WJxFN9YAysp0V+an NJZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=7R0Z1qeg4F3h/98UokYj1d9DLrgMh88RSDUQSKmB7a8=; b=tfr2otrBjadzQL0RlvFaSGaGdLek3dFJwIhFmN0HUi92Nzjq8cDeMlCf7b6t7KTSSy kQZJ+75JsEXjsbknk4G92ZCCeWI1pMCTRkcOl07xhYja43HP60Xd3huXqhbZfN+Fjjh/ QDwFksLBXECardIjJL1YZsnJQKWGpoaQLTdzKnH0f4I+OBh+4Han5EzNMrm3mDQBuqFD V2FpwQOACG8vm5En2iAiJDCaX5m1UT2eK+U6Fqnm7CUAy+vF59mYUICW8DipMhsnNdhS lop4349J/YggjSCM66Rgd3SQ2qnTf4UylILg4288gnEf17FLsAh5h+WhbAY6gelY2jrw GzCg== X-Gm-Message-State: AIVw112qrrjUg+fOM8rGnQLzfljAE61xbv/6LmrQtZB+rnavkWckGu4O QpcOs0wXRYEexDaTQVU= X-Received: by 10.200.47.114 with SMTP id k47mr39978257qta.18.1499394276952; Thu, 06 Jul 2017 19:24:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:21:01 -1000 Message-Id: <20170707022111.21836-18-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::243 Subject: [Qemu-devel] [PATCH v2 17/27] target/sh4: Simplify 64-bit fp reg-reg move 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We do not need to form full 64-bit quantities in order to perform the move. This reduces code expansion on 64-bit hosts. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno --- target/sh4/translate.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index fcdabe8..3453f19 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -993,10 +993,10 @@ static void _decode_opc(DisasContext * ctx) case 0xf00c: /* fmov {F,D,X}Rm,{F,D,X}Rn - FPSCR: Nothing */ CHECK_FPU_ENABLED if (ctx->tbflags & FPSCR_SZ) { - TCGv_i64 fp =3D tcg_temp_new_i64(); - gen_load_fpr64(ctx, fp, XHACK(B7_4)); - gen_store_fpr64(ctx, fp, XHACK(B11_8)); - tcg_temp_free_i64(fp); + int xsrc =3D XHACK(B7_4); + int xdst =3D XHACK(B11_8); + tcg_gen_mov_i32(FREG(xdst), FREG(xsrc)); + tcg_gen_mov_i32(FREG(xdst + 1), FREG(xsrc + 1)); } else { tcg_gen_mov_i32(FREG(B11_8), FREG(B7_4)); } --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499395110032767.0627262594198; Thu, 6 Jul 2017 19:38:30 -0700 (PDT) Received: from localhost ([::1]:54173 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJA4-0006TD-QG for importer@patchew.org; Thu, 06 Jul 2017 22:38:28 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35036) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIwj-0003Jv-VF for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIwj-000151-5P for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:41 -0400 Received: from mail-qk0-x241.google.com ([2607:f8b0:400d:c09::241]:33211) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIwj-00014o-0n for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:41 -0400 Received: by mail-qk0-x241.google.com with SMTP id p21so2760478qke.0 for ; Thu, 06 Jul 2017 19:24:40 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.24.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:24:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=UqTxQ/VJdPczOBf3ZqJD6xzHjSw4rbseaMYBqv+Z66g=; b=rNwuo3KWitD5a+vKuxs/Lzth15epWe8nPvMVg7ZCVRp/bPZod+9sPFG8CfcKhcRzYh lGp4yrne2ugYr48YbHyd6aXk6zmeRlmyxL/FCj/dATyWSTkkA/NBRog9WzUuh2OfWCcu Td0evn4aRWfIwpJ+L/v2WpWZsvdhzxCBKL2Q8PNjHp3O53WyvA/rOVsnuU1FjP12WcpZ bfH/5nsv4FtMKSlnR8jsfR5anyC5/H6kKpbBW8Nwvt5vCTlIJnY6u8UiioRcY4LcdtX+ q/Mu3X5AoFcrnqZzMB9MiLwN6ZeXW0ia7OpgHmfDjP+ExGbZKvc4ptr8hj+wZZr3NpVz WY/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=UqTxQ/VJdPczOBf3ZqJD6xzHjSw4rbseaMYBqv+Z66g=; b=inHUxa85tRS9byKWIl/Zv6Cv9EIkfAzToTXTXWiBfMELkQN3DBJrCfWzZyEUB4BzX+ pXvOaCcgt5aVt4dOQrF4ycwIfclPiimKPHrsK6wASEwcxEGVO/HIcj0TTIsv1hetyU8l dvjTfsn4ySCzdaylFHuWiQfuDAdIEP5upePhpJOJBufWJnhd/KyLB36tduqQfrWzVMw8 MMNPHb8mrn+xKojXRRN5qDai+jwwlrb9EqsL5nQ00L4QU6qDlQFkmNxlScRhoXA9dOJm O670rQhFreqN8VMIOFAr4QfXYooNRQGBbYXUhcRqmh217gyavmUcmvM5r5Y5WaoDjhN1 rbCw== X-Gm-Message-State: AKS2vOxRQETUPS6J/GOpw9jRpVCsnGkVxGnu3u2lIhHJtcQu+W13ig9i k/ftNKdntbyCuY5KGY0= X-Received: by 10.233.221.70 with SMTP id r67mr60896163qkf.81.1499394280405; Thu, 06 Jul 2017 19:24:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:21:02 -1000 Message-Id: <20170707022111.21836-19-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::241 Subject: [Qemu-devel] [PATCH v2 18/27] target/sh4: Unify code for CHECK_NOT_DELAY_SLOT 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We do not need to emit N copies of raising an exception. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/sh4/translate.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 3453f19..41157a0 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -377,11 +377,8 @@ static inline void gen_store_fpr64(DisasContext *ctx, = TCGv_i64 t, int reg) #define XHACK(x) ((((x) & 1 ) << 4) | ((x) & 0xe)) =20 #define CHECK_NOT_DELAY_SLOT \ - if (ctx->envflags & DELAY_SLOT_MASK) { \ - gen_save_cpu_state(ctx, true); \ - gen_helper_raise_slot_illegal_instruction(cpu_env); \ - ctx->bstate =3D BS_EXCP; \ - return; \ + if (ctx->envflags & DELAY_SLOT_MASK) { \ + goto do_illegal_slot; \ } =20 #define CHECK_PRIVILEGED \ @@ -1820,10 +1817,12 @@ static void _decode_opc(DisasContext * ctx) ctx->opcode, ctx->pc); fflush(stderr); #endif - gen_save_cpu_state(ctx, true); if (ctx->envflags & DELAY_SLOT_MASK) { + do_illegal_slot: + gen_save_cpu_state(ctx, true); gen_helper_raise_slot_illegal_instruction(cpu_env); } else { + gen_save_cpu_state(ctx, true); gen_helper_raise_illegal_instruction(cpu_env); } ctx->bstate =3D BS_EXCP; --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499395022147275.5640760845363; Thu, 6 Jul 2017 19:37:02 -0700 (PDT) Received: from localhost ([::1]:54169 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ8e-0005My-OG for importer@patchew.org; Thu, 06 Jul 2017 22:37:00 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35056) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIwo-0003NW-B4 for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIwn-00016S-Ht for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:46 -0400 Received: from mail-qk0-x244.google.com ([2607:f8b0:400d:c09::244]:35629) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIwn-00016G-Cz for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:45 -0400 Received: by mail-qk0-x244.google.com with SMTP id 16so2746613qkg.2 for ; Thu, 06 Jul 2017 19:24:45 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.24.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:24:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=KTBCGkD7lObR4sJz3hFV/VfsJKkUPnC0pCyHjqX/ocY=; b=ul8ukEOzfFacbr/n3Qssr1GQjzQJEV4amT5soS6tdU1QmhtbZe34aTj+CboYdCM+f9 GbcxbS7Ci9lpfub/fbAWquSait8RCRJsH2wwkzPAu8vLcPODCHrfnqqmcX1IzENdbiB+ Tbe3FCLIvicvQpMtT9IEHKNHa+xBfxi4SeRfkjMO0BQEBRq4wLumZ5zI3T89/3s3z/pH xoJ0yKmdid4G0v/TkhW9KCyzpwEkZeNpIQ0bfE5xdXwqLuPlQmzHYMejM6oPO1B7eGqI ksQi85lrNnuJWoew8LF9l38TB5Ts7eLTKY1oAE6Zta5XtlFkzuOQdYYvuaDqEUiFx8NF gAhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=KTBCGkD7lObR4sJz3hFV/VfsJKkUPnC0pCyHjqX/ocY=; b=MU9wcH4PJ4J1z+n4E6tdmDcNPurL39+fooyT/mItfZoORikZzHTCCXSuGAPMLZAVOi xjKmaiS59svmMqIWiUvIwrCZBm+hKDdUjNdN9W5XjXisVoGjLllYX/jPRov4I1FUuCti 6Ci+NUQbJVOrv6oKI5FHhH/d/7Uf5fxDbFs7go1xAaVaYy9V10iRjaD4c/Qf4HE9aUVt fJHM3VgJ5uiWrnC86XoplwIpHtZvIcs+/I5OWQFHi2iVekw0sfI7p/jmStlsdEDns360 03d6uAwa1B7lQ1Oad5DF6Pf3yxYABM/PgoEbpG3oSqlxvqzNMoDa/45u1VYDFDpyVVur cRxw== X-Gm-Message-State: AIVw113w+vKKPnLepXP0xv2l5me+sdM1hPmo0nVFa4g086gNkUdaXCUk MEODjUi6ZTj14Th9MkI= X-Received: by 10.55.178.135 with SMTP id b129mr18346982qkf.189.1499394284787; Thu, 06 Jul 2017 19:24:44 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:21:03 -1000 Message-Id: <20170707022111.21836-20-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::244 Subject: [Qemu-devel] [PATCH v2 19/27] target/sh4: Unify code for CHECK_PRIVILEGED 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We do not need to emit N copies of raising an exception. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/sh4/translate.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 41157a0..dd14b43 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -381,16 +381,9 @@ static inline void gen_store_fpr64(DisasContext *ctx, = TCGv_i64 t, int reg) goto do_illegal_slot; \ } =20 -#define CHECK_PRIVILEGED \ - if (IS_USER(ctx)) { \ - gen_save_cpu_state(ctx, true); \ - if (ctx->envflags & DELAY_SLOT_MASK) { \ - gen_helper_raise_slot_illegal_instruction(cpu_env); \ - } else { \ - gen_helper_raise_illegal_instruction(cpu_env); \ - } \ - ctx->bstate =3D BS_EXCP; \ - return; \ +#define CHECK_PRIVILEGED \ + if (IS_USER(ctx)) { \ + goto do_illegal; \ } =20 #define CHECK_FPU_ENABLED \ @@ -1817,6 +1810,7 @@ static void _decode_opc(DisasContext * ctx) ctx->opcode, ctx->pc); fflush(stderr); #endif + do_illegal: if (ctx->envflags & DELAY_SLOT_MASK) { do_illegal_slot: gen_save_cpu_state(ctx, true); --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394731008874.7465674633823; Thu, 6 Jul 2017 19:32:11 -0700 (PDT) Received: from localhost ([::1]:54147 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ3x-0001En-Lx for importer@patchew.org; Thu, 06 Jul 2017 22:32:09 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35104) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIwu-0003R8-Ii for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIwr-00018V-FO for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:52 -0400 Received: from mail-qk0-x242.google.com ([2607:f8b0:400d:c09::242]:34473) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIwr-00018H-Al for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:49 -0400 Received: by mail-qk0-x242.google.com with SMTP id 91so2764714qkq.1 for ; Thu, 06 Jul 2017 19:24:49 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.24.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:24:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=TJiYS0ZMP5YwsXdp4u0pkCtIgzCP2oD9Ug7lfYOzNag=; b=mH5SOCNqeq3VJ8nMHNJrOimPKjvtq9Qg7BIvnuWdI23gzSPkVgyxnegn2SREwclnYm Wq/qgXCCtPfdWmQB1hRp31xubMoFYD+eq8JhU6kjldyFNrBo2GNz/xzaToo7BK2F8INR lVxtN+MdnMujLq/9O9iKqbkmDb1pbW6a8YW2Td6jU7Vkmy/uMZ4C+PGxRPch/X09JgDO qwnDbulaYFxJPfJft4WxEnPak6SXjXn+7xFjk1UekXF28EeSzgJYNZ2FBYOp9PnpWw1P tJW5HFd7ycn1DYE4SxP+6NAPvQd85gVqoKOmjcfNBMSl3ret3c8G86H0RZjp65ZkOkDD Y4/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=TJiYS0ZMP5YwsXdp4u0pkCtIgzCP2oD9Ug7lfYOzNag=; b=WEMZXTbPV2YjpR3XPN/jg0qWmN1p7Xc3/VUDdflTGGwiM2y3IlA7jlE76lCFQ+VYyH zKO+OZgZ3qBAt9DJzBrUqJHC2TouWEd9IYx1uMpBMr0zzPzYkTmmfzVjq2MyIibZZmna 8FXQoZXxypyRTXiixUURT3mfyILgcgZiifzWz53aRSSvjljw5Tsio0yfjDRUR0qPQArc BjYS4t0wNLEPvSq6777xUgAyN0mYVrzXKnt0PNvONipLY536PoBmCchGv4OPkQIu/rU/ V7N1r6+8/hMRgsWB7QlBnnAg6HViyxdLgDPNZRkaBh1pRKOvpIj0/AFf6OGsFMDN0udU 70GQ== X-Gm-Message-State: AKS2vOy7zZP+zOSxYUhSDRt9ebe8qoFE8xnrP7Ws9doPlT+FYnkykG3h 0DjNSfUEYnDz7yR04Nk= X-Received: by 10.55.214.78 with SMTP id t75mr58388090qki.239.1499394288594; Thu, 06 Jul 2017 19:24:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:21:04 -1000 Message-Id: <20170707022111.21836-21-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::242 Subject: [Qemu-devel] [PATCH v2 20/27] target/sh4: Unify code for CHECK_FPU_ENABLED 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We do not need to emit N copies of raising an exception. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/sh4/translate.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index dd14b43..a4370c6 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -386,16 +386,9 @@ static inline void gen_store_fpr64(DisasContext *ctx, = TCGv_i64 t, int reg) goto do_illegal; \ } =20 -#define CHECK_FPU_ENABLED \ - if (ctx->tbflags & (1u << SR_FD)) { \ - gen_save_cpu_state(ctx, true); \ - if (ctx->envflags & DELAY_SLOT_MASK) { \ - gen_helper_raise_slot_fpu_disable(cpu_env); \ - } else { \ - gen_helper_raise_fpu_disable(cpu_env); \ - } \ - ctx->bstate =3D BS_EXCP; \ - return; \ +#define CHECK_FPU_ENABLED \ + if (ctx->tbflags & (1u << SR_FD)) { \ + goto do_fpu_disabled; \ } =20 static void _decode_opc(DisasContext * ctx) @@ -1820,6 +1813,17 @@ static void _decode_opc(DisasContext * ctx) gen_helper_raise_illegal_instruction(cpu_env); } ctx->bstate =3D BS_EXCP; + return; + + do_fpu_disabled: + gen_save_cpu_state(ctx, true); + if (ctx->envflags & DELAY_SLOT_MASK) { + gen_helper_raise_slot_fpu_disable(cpu_env); + } else { + gen_helper_raise_fpu_disable(cpu_env); + } + ctx->bstate =3D BS_EXCP; + return; } =20 static void decode_opc(DisasContext * ctx) --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 149939514867728.935079249105684; Thu, 6 Jul 2017 19:39:08 -0700 (PDT) Received: from localhost ([::1]:54175 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJAh-00078S-10 for importer@patchew.org; Thu, 06 Jul 2017 22:39:07 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35136) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIww-0003T2-IO for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIwv-0001BH-Pn for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:54 -0400 Received: from mail-qk0-x241.google.com ([2607:f8b0:400d:c09::241]:34476) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIwv-0001B6-LW for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:24:53 -0400 Received: by mail-qk0-x241.google.com with SMTP id 91so2764838qkq.1 for ; Thu, 06 Jul 2017 19:24:53 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.24.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:24:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=HGTCvmI5mKh7q7SAmMAOdcW42Zto47Mti1NgZc/4HUA=; b=h4pP4rZ8JUU8ibqPhBMu7WpD0o+43BjuBHf4KIS/VDeSQGsihf+5WT11aXQCsyl5Ld GkSoUxs8XuNmSyK79a0Y0TWRxS/PEXHbrOQZNppsCN4KW/z0Ipmtz6G7sHKRnVNKNiZZ gVeSjyI9RUxI/MNOCfhhs3GHQHe+84VHID/T7JkWJSZYnjyr+CM5L2Sgpj99uIAoapeU gbKCi0UTrSC1tvjTdbl8UbwhcTK5FXgSAFZy17SaNdyAjoNIsn2n9rFpXJ9k5mwOljyr YBp/NGBlIa8PLed0+UaYfvuGoSGSGfmE453MXrVqUa4kLXBUTBST2/vVnkQVKL8BqONq ncCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=HGTCvmI5mKh7q7SAmMAOdcW42Zto47Mti1NgZc/4HUA=; b=jU4drEKCoA+dwzJAz3mhVRm9BKgcVa8B0yiO0hgV2UBPYAcqdbshPTorTwAYLXMZxz wVKE9ii2oX8sVOxIrurnVMAhGW3eMerRJXj+5mCICQrr+ey7xsk0xOnWwsG2vyl226uB INCwxjGfJN3IlKSB1X3X1WlgGfoTQZnJ46hB/IGZNDbYQ9MKpWYEiGOzi2G5Lxtx0Gej /ByniBeekVt7FS31EDOO/RwHcqOzV01w97zGGKzXD1duXY9qGiJ+KznHnxbqN0jOiRc3 OZvAKmV5t86CIOVRC/bsOFxrS1sLt5nIDQbHH6j3nv7TPlyMf57q5nywGDst5cP0Y6Vp pyow== X-Gm-Message-State: AKS2vOxlrqBfq8BbTMYa88Xs0ltTUk5sEWwp9Vc+OfWUbzDwxvqZ2Ye/ 0VEKBwjCF4yi9MeEXig= X-Received: by 10.55.55.6 with SMTP id e6mr60647637qka.72.1499394293028; Thu, 06 Jul 2017 19:24:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:21:05 -1000 Message-Id: <20170707022111.21836-22-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::241 Subject: [Qemu-devel] [PATCH v2 21/27] target/sh4: Tidy misc illegal insn checks 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Now that we have a do_illegal label, use goto in order to self-document the forcing of the exception. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/sh4/translate.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index a4370c6..06cf649 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -1079,8 +1079,9 @@ static void _decode_opc(DisasContext * ctx) if (ctx->tbflags & FPSCR_PR) { TCGv_i64 fp0, fp1; =20 - if (ctx->opcode & 0x0110) - break; /* illegal instruction */ + if (ctx->opcode & 0x0110) { + goto do_illegal; + } fp0 =3D tcg_temp_new_i64(); fp1 =3D tcg_temp_new_i64(); gen_load_fpr64(ctx, fp0, B11_8); @@ -1142,7 +1143,7 @@ static void _decode_opc(DisasContext * ctx) { CHECK_FPU_ENABLED if (ctx->tbflags & FPSCR_PR) { - break; /* illegal instruction */ + goto do_illegal; } else { gen_helper_fmac_FT(FREG(B11_8), cpu_env, FREG(0), FREG(B7_4), FREG(B11_8)); @@ -1693,8 +1694,9 @@ static void _decode_opc(DisasContext * ctx) CHECK_FPU_ENABLED if (ctx->tbflags & FPSCR_PR) { TCGv_i64 fp; - if (ctx->opcode & 0x0100) - break; /* illegal instruction */ + if (ctx->opcode & 0x0100) { + goto do_illegal; + } fp =3D tcg_temp_new_i64(); gen_helper_float_DT(fp, cpu_env, cpu_fpul); gen_store_fpr64(ctx, fp, B11_8); @@ -1708,8 +1710,9 @@ static void _decode_opc(DisasContext * ctx) CHECK_FPU_ENABLED if (ctx->tbflags & FPSCR_PR) { TCGv_i64 fp; - if (ctx->opcode & 0x0100) - break; /* illegal instruction */ + if (ctx->opcode & 0x0100) { + goto do_illegal; + } fp =3D tcg_temp_new_i64(); gen_load_fpr64(ctx, fp, B11_8); gen_helper_ftrc_DT(cpu_fpul, cpu_env, fp); @@ -1730,8 +1733,9 @@ static void _decode_opc(DisasContext * ctx) case 0xf06d: /* fsqrt FRn */ CHECK_FPU_ENABLED if (ctx->tbflags & FPSCR_PR) { - if (ctx->opcode & 0x0100) - break; /* illegal instruction */ + if (ctx->opcode & 0x0100) { + goto do_illegal; + } TCGv_i64 fp =3D tcg_temp_new_i64(); gen_load_fpr64(ctx, fp, B11_8); gen_helper_fsqrt_DT(fp, cpu_env, fp); --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394831575723.2927760031652; Thu, 6 Jul 2017 19:33:51 -0700 (PDT) Received: from localhost ([::1]:54154 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ5a-0002Wk-8o for importer@patchew.org; Thu, 06 Jul 2017 22:33:50 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35318) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIxF-0003p4-Sa for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIxC-0001P9-Nb for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:13 -0400 Received: from mail-qk0-x241.google.com ([2607:f8b0:400d:c09::241]:35958) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIxC-0001OZ-K0 for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:10 -0400 Received: by mail-qk0-x241.google.com with SMTP id v143so2748930qkb.3 for ; Thu, 06 Jul 2017 19:25:10 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.24.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:25:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=NHW906zzHgKlCw+eErolbDw8DDizfeYMM0S+Sxd8lhc=; b=NJ58xiq721icxW5st4DRahZtGDutxKdecbbOsMZpDIRtdzIFVn4snGlc1OzGas/yP5 ttC1lIjP7Q4+klaDkmccJwnHv4Ok62SKdB13t0+hRZg1yEITCbB2Y0/h9R60pZ+qB3l/ IZpAwjOfTTxpl5iifweb6HwV/nbYl6L5ajq1W0aO0S6YilpEM+Tvg/TqkgH4WNtLu3L7 yFDqT7750tVyX/wczmOd9GDIthAr35HWyx4I1xIv9jBI5mLCKIKmrhh5g2bRAJ6qgs+S Jmb7FEUXLvf8CoYlvj0K7xfhuxnibECxNI6NrJaea/fjd7dzBvlzE0zbVjL3mXlhXM2K F3tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=NHW906zzHgKlCw+eErolbDw8DDizfeYMM0S+Sxd8lhc=; b=Fb3rzyYabci2w1iR+SQ6FcCsggRqTlEv4YXKohMwXGzql56deT/k69rjLdm2ESbmfB x61abmhsLQAxYbZ/3yJ9/YwlNJ87LKi2U5i43x/9tX4vuyj12H7Gm0BN+mdRa36vyv6F Q3dShMI5aptcuwSxTkBEpyEDpmVSOod+Zdj8uEYa84s8odubIkZEMcgRaOlL3794T7qu KWn7FJDyx9X7mOLEJEvqNGHnKLU46x2FWpd9mOT4/rqtG7XsL8r3BpJVA+PyygNPfZis wFERLZrbE+yAvj7AhspcdiI2abnYRmRB0CQ9Go9IG85r2Xju8jiO2aG6kItHpGnWPcMK vKvQ== X-Gm-Message-State: AKS2vOy4eBvVInhpqFV08LFo/T9fJIHQj5W2ivrSsk59QBv54+gFKLih yokwLH/2C8nEKuRN8aE= X-Received: by 10.55.40.89 with SMTP id o86mr63894570qkh.116.1499394309945; Thu, 06 Jul 2017 19:25:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:21:06 -1000 Message-Id: <20170707022111.21836-23-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::241 Subject: [Qemu-devel] [PATCH v2 22/27] target/sh4: Introduce CHECK_FPSCR_PR_* 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 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: Richard Henderson Reviewed-by: Aurelien Jarno --- target/sh4/translate.c | 57 +++++++++++++++++++++++++++-------------------= ---- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 06cf649..3d8ac59 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -391,6 +391,16 @@ static inline void gen_store_fpr64(DisasContext *ctx, = TCGv_i64 t, int reg) goto do_fpu_disabled; \ } =20 +#define CHECK_FPSCR_PR_0 \ + if (ctx->tbflags & FPSCR_PR) { \ + goto do_illegal; \ + } + +#define CHECK_FPSCR_PR_1 \ + if (!(ctx->tbflags & FPSCR_PR)) { \ + goto do_illegal; \ + } + static void _decode_opc(DisasContext * ctx) { /* This code tries to make movcal emulation sufficiently @@ -1140,16 +1150,11 @@ static void _decode_opc(DisasContext * ctx) } return; case 0xf00e: /* fmac FR0,RM,Rn */ - { - CHECK_FPU_ENABLED - if (ctx->tbflags & FPSCR_PR) { - goto do_illegal; - } else { - gen_helper_fmac_FT(FREG(B11_8), cpu_env, - FREG(0), FREG(B7_4), FREG(B11_8)); - return; - } - } + CHECK_FPU_ENABLED + CHECK_FPSCR_PR_0 + gen_helper_fmac_FT(FREG(B11_8), cpu_env, + FREG(0), FREG(B7_4), FREG(B11_8)); + return; } =20 switch (ctx->opcode & 0xff00) { @@ -1750,16 +1755,14 @@ static void _decode_opc(DisasContext * ctx) break; case 0xf08d: /* fldi0 FRn - FPSCR: R[PR] */ CHECK_FPU_ENABLED - if (!(ctx->tbflags & FPSCR_PR)) { - tcg_gen_movi_i32(FREG(B11_8), 0); - } - return; + CHECK_FPSCR_PR_0 + tcg_gen_movi_i32(FREG(B11_8), 0); + return; case 0xf09d: /* fldi1 FRn - FPSCR: R[PR] */ CHECK_FPU_ENABLED - if (!(ctx->tbflags & FPSCR_PR)) { - tcg_gen_movi_i32(FREG(B11_8), 0x3f800000); - } - return; + CHECK_FPSCR_PR_0 + tcg_gen_movi_i32(FREG(B11_8), 0x3f800000); + return; case 0xf0ad: /* fcnvsd FPUL,DRn */ CHECK_FPU_ENABLED { @@ -1780,10 +1783,10 @@ static void _decode_opc(DisasContext * ctx) return; case 0xf0ed: /* fipr FVm,FVn */ CHECK_FPU_ENABLED - if ((ctx->tbflags & FPSCR_PR) =3D=3D 0) { - TCGv m, n; - m =3D tcg_const_i32((ctx->opcode >> 8) & 3); - n =3D tcg_const_i32((ctx->opcode >> 10) & 3); + CHECK_FPSCR_PR_1 + { + TCGv m =3D tcg_const_i32((ctx->opcode >> 8) & 3); + TCGv n =3D tcg_const_i32((ctx->opcode >> 10) & 3); gen_helper_fipr(cpu_env, m, n); tcg_temp_free(m); tcg_temp_free(n); @@ -1792,10 +1795,12 @@ static void _decode_opc(DisasContext * ctx) break; case 0xf0fd: /* ftrv XMTRX,FVn */ CHECK_FPU_ENABLED - if ((ctx->opcode & 0x0300) =3D=3D 0x0100 && - (ctx->tbflags & FPSCR_PR) =3D=3D 0) { - TCGv n; - n =3D tcg_const_i32((ctx->opcode >> 10) & 3); + CHECK_FPSCR_PR_1 + { + if ((ctx->opcode & 0x0300) !=3D 0x0100) { + goto do_illegal; + } + TCGv n =3D tcg_const_i32((ctx->opcode >> 10) & 3); gen_helper_ftrv(cpu_env, n); tcg_temp_free(n); return; --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394982771692.1743013225191; Thu, 6 Jul 2017 19:36:22 -0700 (PDT) Received: from localhost ([::1]:54167 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ81-0004sK-EP for importer@patchew.org; Thu, 06 Jul 2017 22:36:21 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35411) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIxS-00040t-6C for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIxP-0001X0-1v for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:26 -0400 Received: from mail-qt0-x243.google.com ([2607:f8b0:400d:c0d::243]:35387) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIxO-0001Wj-Sr for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:22 -0400 Received: by mail-qt0-x243.google.com with SMTP id w12so2714688qta.2 for ; Thu, 06 Jul 2017 19:25:22 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.25.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:25:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=N8HU/YSd55JM5bNeAwURG7jHmANEdVnfH5HfFu/mY5Q=; b=kILtxK4suixdqfn1kSk5goMPJzTTugLap4f0+oIAHPqGe3LW99exUP7EQO8QJ9pmE2 jbxIwy3+dztQTe2f+vUSM/6v9dT/OPj6YZsHy5bAT0RkrgCHVjW71duw5h0iUJatjxzU gPFaGN6DsEtSnurQHDcSUmQseWUKpmUVXGFbVGmZrR1eQ7bDL35XySFzeOgP2cR6vG9+ rV6T1TR+JEn1/17tzGEzE2B65/7skbcGFDsjT1qvegOMWYzjB8QneGXmBe+f5tgNgq6e TdYwXYDYDq+dzuOSgEFbMovr6v1giC0Vzo5m3HXJbvLfjUQdGeS//n0gnB6jF/urSMdx yXAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=N8HU/YSd55JM5bNeAwURG7jHmANEdVnfH5HfFu/mY5Q=; b=EZkb4VJBs8s5KfRgKKHqKQo8JfyiKSUfVbrczQnrntfY59C/RwA7863XnVqHwJzkzd 637FCCGRlhmXb3KoqDqBhgCQqYDBd2eirQPHzhtTwDsDBbM2q4kv3tJykUGejvRBThCM 9bP94T7rywt/6XmjJg/yAU4NdF96O98a50KRulKJu4KlnoEYIANpKfY0Y59/MbtlUI/c +VdEj+zPE3S8lSs2v9g753TbVUf5mP0Ew9R9H99EHkkjlAEYZWoqNfClXTKK8tun1Xrn Kj+M2VslQSCDfqbySkgbKPtQl5h2kRsfok3I+d1gnLLSqs4pAHGpHwsRC41Yyupl0/wI 7fOA== X-Gm-Message-State: AKS2vOyg+znWlVD6lLc02o/S5Z+qQDSEiwO+34p09EXFZgYqZpFKM8zo rvkcBMxPBljvKWVKi2s= X-Received: by 10.237.55.129 with SMTP id j1mr61640193qtb.152.1499394322230; Thu, 06 Jul 2017 19:25:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:21:07 -1000 Message-Id: <20170707022111.21836-24-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::243 Subject: [Qemu-devel] [PATCH v2 23/27] target/sh4: Introduce CHECK_SH4A 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 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: Richard Henderson Reviewed-by: Aurelien Jarno --- target/sh4/translate.c | 64 +++++++++++++++++++++++-----------------------= ---- 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 3d8ac59..d164e62 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -401,6 +401,11 @@ static inline void gen_store_fpr64(DisasContext *ctx, = TCGv_i64 t, int reg) goto do_illegal; \ } =20 +#define CHECK_SH4A \ + if (!(ctx->features & SH_FEATURE_SH4A)) { \ + goto do_illegal; \ + } + static void _decode_opc(DisasContext * ctx) { /* This code tries to make movcal emulation sufficiently @@ -1478,7 +1483,7 @@ static void _decode_opc(DisasContext * ctx) LDST(ssr, 0x403e, 0x4037, 0x0032, 0x4033, CHECK_PRIVILEGED) LDST(spc, 0x404e, 0x4047, 0x0042, 0x4043, CHECK_PRIVILEGED) ST(sgr, 0x003a, 0x4032, CHECK_PRIVILEGED) - LD(sgr, 0x403a, 0x4036, CHECK_PRIVILEGED if (!(ctx->features & SH_FEATUR= E_SH4A)) break;) + LD(sgr, 0x403a, 0x4036, CHECK_PRIVILEGED CHECK_SH4A) LDST(dbr, 0x40fa, 0x40f6, 0x00fa, 0x40f2, CHECK_PRIVILEGED) LDST(mach, 0x400a, 0x4006, 0x000a, 0x4002, {}) LDST(macl, 0x401a, 0x4016, 0x001a, 0x4012, {}) @@ -1528,21 +1533,19 @@ static void _decode_opc(DisasContext * ctx) ctx->has_movcal =3D 1; return; case 0x40a9: /* movua.l @Rm,R0 */ + CHECK_SH4A /* Load non-boundary-aligned data */ - if (ctx->features & SH_FEATURE_SH4A) { - tcg_gen_qemu_ld_i32(REG(0), REG(B11_8), ctx->memidx, - MO_TEUL | MO_UNALN); - return; - } + tcg_gen_qemu_ld_i32(REG(0), REG(B11_8), ctx->memidx, + MO_TEUL | MO_UNALN); + return; break; case 0x40e9: /* movua.l @Rm+,R0 */ + CHECK_SH4A /* Load non-boundary-aligned data */ - if (ctx->features & SH_FEATURE_SH4A) { - tcg_gen_qemu_ld_i32(REG(0), REG(B11_8), ctx->memidx, - MO_TEUL | MO_UNALN); - tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4); - return; - } + tcg_gen_qemu_ld_i32(REG(0), REG(B11_8), ctx->memidx, + MO_TEUL | MO_UNALN); + tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4); + return; break; case 0x0029: /* movt Rn */ tcg_gen_mov_i32(REG(B11_8), cpu_sr_t); @@ -1553,7 +1556,8 @@ static void _decode_opc(DisasContext * ctx) If (T =3D=3D 1) R0 -> (Rn) 0 -> LDST */ - if (ctx->features & SH_FEATURE_SH4A) { + CHECK_SH4A + { TCGLabel *fail =3D gen_new_label(); TCGLabel *done =3D gen_new_label(); TCGv tmp; @@ -1572,8 +1576,6 @@ static void _decode_opc(DisasContext * ctx) =20 gen_set_label(done); return; - } else { - break; } case 0x0063: /* MOVLI.L @Rm,R0 @@ -1582,14 +1584,11 @@ static void _decode_opc(DisasContext * ctx) When interrupt/exception occurred 0 -> LDST */ - if (ctx->features & SH_FEATURE_SH4A) { - tcg_gen_qemu_ld_i32(REG(0), REG(B11_8), ctx->memidx, MO_TESL); - tcg_gen_mov_i32(cpu_lock_addr, REG(B11_8)); - tcg_gen_mov_i32(cpu_lock_value, REG(0)); - return; - } else { - break; - } + CHECK_SH4A + tcg_gen_qemu_ld_i32(REG(0), REG(B11_8), ctx->memidx, MO_TESL); + tcg_gen_mov_i32(cpu_lock_addr, REG(B11_8)); + tcg_gen_mov_i32(cpu_lock_value, REG(0)); + return; case 0x0093: /* ocbi @Rn */ { gen_helper_ocbi(cpu_env, REG(B11_8)); @@ -1604,20 +1603,15 @@ static void _decode_opc(DisasContext * ctx) case 0x0083: /* pref @Rn */ return; case 0x00d3: /* prefi @Rn */ - if (ctx->features & SH_FEATURE_SH4A) - return; - else - break; + CHECK_SH4A + return; case 0x00e3: /* icbi @Rn */ - if (ctx->features & SH_FEATURE_SH4A) - return; - else - break; + CHECK_SH4A + return; case 0x00ab: /* synco */ - if (ctx->features & SH_FEATURE_SH4A) { - tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC); - return; - } + CHECK_SH4A + tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC); + return; break; case 0x4024: /* rotcl Rn */ { --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499395110577779.4707400412004; Thu, 6 Jul 2017 19:38:30 -0700 (PDT) Received: from localhost ([::1]:54174 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJA5-0006TY-Dg for importer@patchew.org; Thu, 06 Jul 2017 22:38:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35422) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIxS-00041L-OD for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIxR-0001Yy-SL for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:26 -0400 Received: from mail-qk0-x244.google.com ([2607:f8b0:400d:c09::244]:35968) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIxR-0001Yk-Om for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:25 -0400 Received: by mail-qk0-x244.google.com with SMTP id v143so2749478qkb.3 for ; Thu, 06 Jul 2017 19:25:25 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.25.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:25:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=kdfLftNwtucH5yYANlbsg/6l/eSMcFZCHbo1wCbfbS8=; b=VFLTCvof6rFJHOu5Gq5gH6k44OnT7jko27k+62UnfwNWvolhFRet6CHwGDw6bB8FH3 EccTaYgmNyuHxacXs7lCSKty0X6lyw10XauwIKI/oNiaJZZabG9pq8pIO+cVPQ5vfpW8 fzzzDQEXyIYmggnXnyvEk0pRaReivbYobV1/nJUz0mTI13lX2FdC9E3ZU+KvFX6mNHQB kcmDDOlAlTTAb2mtJLAsGp7nG4qe/mmmmpeVZaIuTgwrI8ByfboTF97SMKt5tAc7+RMg FQEe22VA/ggLzpEGJDq4khEQ5mKYdlY6LH/tV5w2U/CeIj+OK7p5+vcroQGDeVV+q/4T dzVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=kdfLftNwtucH5yYANlbsg/6l/eSMcFZCHbo1wCbfbS8=; b=Bl8OXAvNdwqAEv10YRISeHTgkC6MUb9K7EK5nOadYaTO3jQUey/y4yQwJfTxSKpnJO jzmOWqIAkqH2Y5aQsPgrFo0Z9o5hP2Gbnh34WEOttpNwt0jor37nndOMhYo37dFpimIe wGCG49XXTITbY2NVK3VFCeW0RPlmAe7LSF4Vl5WqXAslPzGIwk5NKQq7ERTgM0ohvcqm qiIUPSjZ5vGxn/uX+121Vmj+CqC0oSwUJ73kqnM0z9XM3tP+6A2q5GO2sTcpmF/DuSLT 8f+EPoxB5MkVcGTCufQXVDBO+JbvFJjQvGuWeMIneOMQ1wqHxG7EEprRPH+uHVUl3jMV al3A== X-Gm-Message-State: AKS2vOzQPwAF9Qss1rv1+1JBX2n3IbzjcHr/gk1vszXwIIzrNZfBKut/ ABs+q1eQih6FaSbmce4= X-Received: by 10.55.55.6 with SMTP id e6mr60649219qka.72.1499394325184; Thu, 06 Jul 2017 19:25:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:21:08 -1000 Message-Id: <20170707022111.21836-25-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::244 Subject: [Qemu-devel] [PATCH v2 24/27] target/sh4: Implement fpchg 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 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: Richard Henderson Reviewed-by: Aurelien Jarno --- target/sh4/translate.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index d164e62..35a5c91 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -492,6 +492,11 @@ static void _decode_opc(DisasContext * ctx) tcg_gen_xori_i32(cpu_fpscr, cpu_fpscr, FPSCR_SZ); ctx->bstate =3D BS_STOP; return; + case 0xf7fd: /* fpchg */ + CHECK_SH4A + tcg_gen_xori_i32(cpu_fpscr, cpu_fpscr, FPSCR_PR); + ctx->bstate =3D BS_STOP; + return; case 0x0009: /* nop */ return; case 0x001b: /* sleep */ --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 149939522353863.13662629107512; Thu, 6 Jul 2017 19:40:23 -0700 (PDT) Received: from localhost ([::1]:54183 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJBu-0008Ev-82 for importer@patchew.org; Thu, 06 Jul 2017 22:40:22 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35458) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIxW-00044F-2x for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIxV-0001af-9r for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:30 -0400 Received: from mail-qk0-x242.google.com ([2607:f8b0:400d:c09::242]:33258) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIxV-0001aV-5h for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:29 -0400 Received: by mail-qk0-x242.google.com with SMTP id p21so2762222qke.0 for ; Thu, 06 Jul 2017 19:25:29 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.25.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:25:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=YQom9tkCzSCL9+YJa4a34BWwfhgCLnbjxZ+DnCP30iQ=; b=MsgAjAZc4EZ6csmtgAJQpRdf8ECn0agMXySi8asb6tbz47if1N39Sc+M+pcjiyNskt bV7OLQnzhpfvKNq72yYilKUCiqJDWLLWpbLQDAh103E/nj4uALgXAd5QL4t8KMg3W8Cl 6paDVN01w2jdHTx5NngbRUYNBRfT37DjD7uxlcO4sRemJ+0ZmkDoRa/ah/B0bgSXMqjE ua2F/KN/k2kn8T0whyll4GXT4rsK4ghCe/TIGw/OHC2LUw4rIwI3OUI6KPBDJTV1fKUI 7Z3e5N+7jEH+MrlMGcI+fUv1OR8XDH76dqKcNfTVvUmGT8nxNo/6ja8RzT11Y9K3c5Wp qrZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=YQom9tkCzSCL9+YJa4a34BWwfhgCLnbjxZ+DnCP30iQ=; b=YaLqLyAxdH9q30SPYsLPr+s62hOayp23dysdlreIvALZ6UowxSEVFDWB7hUOuq8Fts KI/OvS2SY7y0W9deOg/RpoqFKpQQqJexB0mlM+WgzAlyw0hScKgHic9VHDkZN2cMp0F9 lz8QpIcfgKGqiNZOpQuGDK6VIMv5NT2cXJS4qCCJCfWIlT9ZKaomu2hOmxbOSDM+nJfu 5VclBuDga7sxBi0GW3vCnjVrWsAsrntDw97t+zETYT77F9x3te1CpOnJiYalbpWYw0SF zIDZVmIidZzYRe7vJxTTqz/BuF3ugaOmqKumPhXV1SkuWMFwI6XbefnLx7iUy03Og7Tv HBhQ== X-Gm-Message-State: AKS2vOzaROa7jHD7C2zLvZQbfb+6AICjJlviOtMAAr4MwJcPA2dsOkQc CpOQqlqyn4IEqU9LngM= X-Received: by 10.55.221.220 with SMTP id u89mr61301680qku.236.1499394328546; Thu, 06 Jul 2017 19:25:28 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:21:09 -1000 Message-Id: <20170707022111.21836-26-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::242 Subject: [Qemu-devel] [PATCH v2 25/27] target/sh4: Add missing FPSCR.PR == 0 checks 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Both frchg and fschg require PR =3D=3D 0, otherwise undefined_operation. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno --- target/sh4/translate.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 35a5c91..2b62e39 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -485,10 +485,12 @@ static void _decode_opc(DisasContext * ctx) tcg_gen_movi_i32(cpu_sr_t, 1); return; case 0xfbfd: /* frchg */ + CHECK_FPSCR_PR_0 tcg_gen_xori_i32(cpu_fpscr, cpu_fpscr, FPSCR_FR); ctx->bstate =3D BS_STOP; return; case 0xf3fd: /* fschg */ + CHECK_FPSCR_PR_0 tcg_gen_xori_i32(cpu_fpscr, cpu_fpscr, FPSCR_SZ); ctx->bstate =3D BS_STOP; return; --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499395297113989.3333250770644; Thu, 6 Jul 2017 19:41:37 -0700 (PDT) Received: from localhost ([::1]:54188 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJD4-0000dF-RS for importer@patchew.org; Thu, 06 Jul 2017 22:41:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35518) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIxe-0004CQ-Om for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIxb-0001gz-J8 for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:38 -0400 Received: from mail-qk0-x241.google.com ([2607:f8b0:400d:c09::241]:35978) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIxb-0001gr-Ea for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:35 -0400 Received: by mail-qk0-x241.google.com with SMTP id v143so2750005qkb.3 for ; Thu, 06 Jul 2017 19:25:35 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.25.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:25:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=FtT5p1RMMWtDyxUOddIaqPH6P4RxEZjhx3DV2AWG3AA=; b=Z/9REBkntqhLJoYHVb4bePrqKVqG885oT/HIGYu/wFba2caQ7aT/VKy6btM4wgvj4C jpmMdIrJYVsOPRA8oCF3E6N4MQ5Bov8aMCH/hqFxAqb3sw/0QQKVhN3iBXMginNz76c/ y5D8b3OeQfwzGsv1CZhgX1R4oS3jWcVrU+gLeNYHCHvIioVzY+s8Pfc4Dw3q0DQpplgC 1yf4nEyh9EpCOLm1ROWTkZSLifKLHVE0/y7RKK8Rakv6ol4p7VPpq9rMGeYfnu3IS3iV YYmwEpJpaGPzuNwKlAEGfyFfHzp0O1MQ/V26aJEljCanYzW9tflcrRrjAynYDCoCvyHo ASLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=FtT5p1RMMWtDyxUOddIaqPH6P4RxEZjhx3DV2AWG3AA=; b=V0lxL5tWEtmElZEaudqRoO0q6kTKgKouQFV1oGJEPiLOMIOSshfy8uXQv5PQgiTJKz 4aAqVilNWWBiVtq0mMYZWiHlyQMlsYS5pe1tkAXQCFpc947pmglW4sFQ3Ay3J3RrccZ6 CP0DJffZtMutkhuZzGqxgmftVJPUKo1rolk+Fk7CZsyadM3F8Ld4pt4o42HGT5ZDhGqE zvIRm3OAcDXCYiyzD5RtfWoMYagzsm/Ywv/zjd7lGFP4A8U8oun4URUk/B4OP146OJ/q hXOH3wr1bItONSANPBgn4ztGka1oXJh9u2BwUA9uckwviz7boUB7oD1akrWlC/MR2a6O Dt2g== X-Gm-Message-State: AKS2vOx+QDTpjq3DR3WwBJ+h8Qq+iZLvFcBITzmLx+H7xk3W3PvbYEF8 DRyjFEpqXBjyL2xNf4Q= X-Received: by 10.55.43.214 with SMTP id r83mr58829378qkr.59.1499394334750; Thu, 06 Jul 2017 19:25:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:21:10 -1000 Message-Id: <20170707022111.21836-27-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::241 Subject: [Qemu-devel] [PATCH v2 26/27] target/sh4: Implement fsrra 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 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: Richard Henderson --- target/sh4/helper.h | 1 + target/sh4/op_helper.c | 16 ++++++++++++++++ target/sh4/translate.c | 2 ++ 3 files changed, 19 insertions(+) diff --git a/target/sh4/helper.h b/target/sh4/helper.h index 6c6fa04..ea92dc0 100644 --- a/target/sh4/helper.h +++ b/target/sh4/helper.h @@ -37,6 +37,7 @@ DEF_HELPER_FLAGS_3(fsub_FT, TCG_CALL_NO_WG, f32, env, f32= , f32) DEF_HELPER_FLAGS_3(fsub_DT, TCG_CALL_NO_WG, f64, env, f64, f64) DEF_HELPER_FLAGS_2(fsqrt_FT, TCG_CALL_NO_WG, f32, env, f32) DEF_HELPER_FLAGS_2(fsqrt_DT, TCG_CALL_NO_WG, f64, env, f64) +DEF_HELPER_FLAGS_2(fsrra_FT, TCG_CALL_NO_WG, i32, env, i32) DEF_HELPER_FLAGS_2(ftrc_FT, TCG_CALL_NO_WG, i32, env, f32) DEF_HELPER_FLAGS_2(ftrc_DT, TCG_CALL_NO_WG, i32, env, f64) DEF_HELPER_3(fipr, void, env, i32, i32) diff --git a/target/sh4/op_helper.c b/target/sh4/op_helper.c index 8513f38..d798f23 100644 --- a/target/sh4/op_helper.c +++ b/target/sh4/op_helper.c @@ -406,6 +406,22 @@ float64 helper_fsqrt_DT(CPUSH4State *env, float64 t0) return t0; } =20 +float32 helper_fsrra_FT(CPUSH4State *env, float32 t0) +{ + set_float_exception_flags(0, &env->fp_status); + /* "Approximate" 1/sqrt(x) via actual computation. */ + t0 =3D float32_sqrt(t0, &env->fp_status); + t0 =3D float32_div(float32_one, t0, &env->fp_status); + /* Since this is supposed to be an approximation, an imprecision + exception is required. One supposes this also follows the usual + IEEE rule that other exceptions take precidence. */ + if (get_float_exception_flags(&env->fp_status) =3D=3D 0) { + set_float_exception_flags(float_flag_inexact, &env->fp_status); + } + update_fpscr(env, GETPC()); + return t0; +} + float32 helper_fsub_FT(CPUSH4State *env, float32 t0, float32 t1) { set_float_exception_flags(0, &env->fp_status); diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 2b62e39..5fae872 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -1753,6 +1753,8 @@ static void _decode_opc(DisasContext * ctx) return; case 0xf07d: /* fsrra FRn */ CHECK_FPU_ENABLED + CHECK_FPSCR_PR_0 + gen_helper_fsrra_FT(FREG(B11_8), cpu_env, FREG(B11_8)); break; case 0xf08d: /* fldi0 FRn - FPSCR: R[PR] */ CHECK_FPU_ENABLED --=20 2.9.4 From nobody Wed Nov 5 07:34:32 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; dkim=fail; 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 1499394891187530.1064450100873; Thu, 6 Jul 2017 19:34:51 -0700 (PDT) Received: from localhost ([::1]:54156 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTJ6X-0003ZX-VM for importer@patchew.org; Thu, 06 Jul 2017 22:34:50 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35532) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTIxg-0004Ea-PH for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTIxg-0001jH-2T for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:40 -0400 Received: from mail-qt0-x241.google.com ([2607:f8b0:400d:c0d::241]:34507) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dTIxf-0001j6-R7 for qemu-devel@nongnu.org; Thu, 06 Jul 2017 22:25:39 -0400 Received: by mail-qt0-x241.google.com with SMTP id m54so2718357qtb.1 for ; Thu, 06 Jul 2017 19:25:39 -0700 (PDT) Received: from bigtime.twiddle.net.com (rrcs-66-91-136-156.west.biz.rr.com. [66.91.136.156]) by smtp.gmail.com with ESMTPSA id i85sm1407176qke.66.2017.07.06.19.25.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 19:25:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=oQgSWlfb/A4jP/SrCT0DSoy/kNTz5ejPs1RH7YQBOG0=; b=BFNQxs7LkJ+hqpmBL+VjxdsSG9vG/931/QTBbrcYMjfVgktlhvOTy/9s/Opr848cX5 CJp4CF1xXGodM6IvRJxRv/mtXz+Xb4AXHpcPPKQTYBQzha0aXracOzl9OrkCf0SpNQ0v Fx8Jrwp79zz2ORaDaq4p/G4ZIPNhj6em6gyvb6LBhw0s31frVGjp/KMHoK8fJZhx/AV6 RJreCT+M9WiM8OA68vy4a/JbRmbFM0JJB7pOc6hIvlf/RcrL53D1Sp47DbkJTnnb19sy lJMEGCuGyAHksl+GqETNJ5O4DOhly23jPkbC67MOf/NR/Xw5V6/RXn3Kgo6/m3SC8kfL Cncg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=oQgSWlfb/A4jP/SrCT0DSoy/kNTz5ejPs1RH7YQBOG0=; b=nXlycjZA86YuLGFt5MRpImbPpMgPKo6PO5jQW3pNg6TXsflbXDsPIpJUAqNViF0kFT asIH3nP5ZUdhTTS4GDcxyF0rgpAFiLzf2I3dmSREudEbNh3MD0vCKskatODhvkGYJPnw mdeCmueatySqbzLIYamkyJDH+hkxLVwG4VOXs8OVHIxZOYj0HIDN3IifDAkUDlJOq2ft /in8LBFYys0Qi2NJeVrVPiz6eyzVC/q8yzbDNixMUZdVC37xSaLnlENTfh1Lij79tyMA ONKm9gt+IwnLDngfQzHMbuKPPve2NTWG63Fkbqz/8xfx7tSI8Jre7BCVxLSFXHKYG56l 3Wkg== X-Gm-Message-State: AIVw1110UlhCAyURZecpssd8QmftbrPM6mkn+JUKoZG+2xuz+qaiHWb1 0GexhuNDOGSVZeMExnQ= X-Received: by 10.237.60.80 with SMTP id u16mr40594087qte.100.1499394339185; Thu, 06 Jul 2017 19:25:39 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 6 Jul 2017 16:21:11 -1000 Message-Id: <20170707022111.21836-28-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170707022111.21836-1-rth@twiddle.net> References: <20170707022111.21836-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::241 Subject: [Qemu-devel] [PATCH v2 27/27] target/sh4: Use tcg_gen_lookup_and_goto_ptr 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: bruno@clisp.org, laurent@vivier.eu, aurelien@aurel32.net, glaubitz@debian.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 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: Richard Henderson --- target/sh4/translate.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 5fae872..7e80e10 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -235,12 +235,15 @@ static inline void gen_save_cpu_state(DisasContext *c= tx, bool save_pc) } } =20 +static inline bool use_exit_tb(DisasContext *ctx) +{ + return (ctx->tbflags & GUSA_EXCLUSIVE) !=3D 0; +} + static inline bool use_goto_tb(DisasContext *ctx, target_ulong dest) { - if (unlikely(ctx->singlestep_enabled)) { - return false; - } - if (ctx->tbflags & GUSA_EXCLUSIVE) { + /* Use a direct jump if in same page and singlestep not enabled */ + if (unlikely(ctx->singlestep_enabled || use_exit_tb(ctx))) { return false; } #ifndef CONFIG_USER_ONLY @@ -253,28 +256,35 @@ static inline bool use_goto_tb(DisasContext *ctx, tar= get_ulong dest) static void gen_goto_tb(DisasContext *ctx, int n, target_ulong dest) { if (use_goto_tb(ctx, dest)) { - /* Use a direct jump if in same page and singlestep not enabled */ tcg_gen_goto_tb(n); tcg_gen_movi_i32(cpu_pc, dest); tcg_gen_exit_tb((uintptr_t)ctx->tb + n); } else { tcg_gen_movi_i32(cpu_pc, dest); - if (ctx->singlestep_enabled) + if (ctx->singlestep_enabled) { gen_helper_debug(cpu_env); - tcg_gen_exit_tb(0); + } else if (use_exit_tb(ctx)) { + tcg_gen_exit_tb(0); + } else { + tcg_gen_lookup_and_goto_ptr(cpu_pc); + } } } =20 static void gen_jump(DisasContext * ctx) { - if (ctx->delayed_pc =3D=3D (uint32_t) - 1) { + if (ctx->delayed_pc =3D=3D -1) { /* Target is not statically known, it comes necessarily from a delayed jump as immediate jump are conditinal jumps */ tcg_gen_mov_i32(cpu_pc, cpu_delayed_pc); tcg_gen_discard_i32(cpu_delayed_pc); - if (ctx->singlestep_enabled) + if (ctx->singlestep_enabled) { gen_helper_debug(cpu_env); - tcg_gen_exit_tb(0); + } else if (use_exit_tb(ctx)) { + tcg_gen_exit_tb(0); + } else { + tcg_gen_lookup_and_goto_ptr(cpu_pc); + } } else { gen_goto_tb(ctx, 0, ctx->delayed_pc); } --=20 2.9.4