From patchwork Wed Aug 28 19:04:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 172471 Delivered-To: patch@linaro.org Received: by 2002:a92:d204:0:0:0:0:0 with SMTP id y4csp1233667ily; Wed, 28 Aug 2019 13:05:14 -0700 (PDT) X-Google-Smtp-Source: APXvYqzS6bmrUnTxicXGaDNnOzGhCnjIbpTEcR+DFL6MUCfW3pl+7pTx3OduZulTIhKSPXfSfeWW X-Received: by 2002:ac8:604c:: with SMTP id k12mr6572636qtm.62.1567022714206; Wed, 28 Aug 2019 13:05:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1567022714; cv=none; d=google.com; s=arc-20160816; b=x3Dh2BqsurQpZ8RpRu+kvJJGSexKzu+efc7/Tx9ncNvBV/PmjC6zGJmQqMTjRpeE8w B7nAUEx7Bhi8R3P72sIC60kpJUF1+zusvRou1WjyMszr5/68/Mw3WDUHQZNq8uPcoCpC bnMqQGm8jY0KbbQK5awQu9Hio8ChmARFJX7N0OZzhTo01nZHBb6JLREi7Do3binU7Wav 0Hg7wlNgQv5KfuDBWSm5ccPHqMnp51Whu+ExmcAWhRGNpMMbwUVSO3joBcfYXRCH2biZ TSA/VUIQfxy2vkPr/g4Qn/rqLuSGWh3nfN7s8tQCRK6FY00xbu9cO6BvBlp8zI4tB6Dr xiqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=gHxh7NJ9ZDQD5ad3sh/ZYrxo8RnJxM/j1QAWPCspKQ8=; b=BnmeUQvrnD4GEUbyq+Rl5REoeHw4DDO9sDwx1elizsXO4w0Ol0cLS9resW4aMoHwc1 fjtonycbue9bfr5V987klCMBhIn5pU5MrIYjMRpDU9tH0wb0XViin/iJtLQsYykw0R21 gCgtUv/KFMy4Yo0rlzVnrEZIb4zR6Sv9q2wKxzwFPmBOwuSPSop+1/QG9ZxJBZnFmczR LZRBrwRkmu4dRVqbs3QHgwU7OU8AzyswZRNJGlroKyJx4x0V6D6FXJRXS7oObS1QmcjE takvga56cXHQ1F3ww3IbJ0UWmY663EVhFsr/B/LXikIOs2V8rerIlJl8ZgkSzH4VgaBR Xkcg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=jCb+9M3H; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 48si264469qvq.185.2019.08.28.13.05.14 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 28 Aug 2019 13:05:14 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=jCb+9M3H; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:41944 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i34Bt-000343-25 for patch@linaro.org; Wed, 28 Aug 2019 16:05:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39109) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i33H8-0004AC-0z for qemu-devel@nongnu.org; Wed, 28 Aug 2019 15:06:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i33H6-0000sm-KD for qemu-devel@nongnu.org; Wed, 28 Aug 2019 15:06:33 -0400 Received: from mail-pl1-x642.google.com ([2607:f8b0:4864:20::642]:43394) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1i33H5-0000pv-4m for qemu-devel@nongnu.org; Wed, 28 Aug 2019 15:06:32 -0400 Received: by mail-pl1-x642.google.com with SMTP id 4so388790pld.10 for ; Wed, 28 Aug 2019 12:06:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=gHxh7NJ9ZDQD5ad3sh/ZYrxo8RnJxM/j1QAWPCspKQ8=; b=jCb+9M3HZ8mMyUcbr7jvJ4BKrD6Mldz8iF22quWO5UNM3T/caBgOkNaKkOuP52mdkS rpSC6bnPRLSF4UbTvKiLJBnNEC7WFDphwL7+qjnRMJbc5oTuVRIohGQZmyDOKd//ok/+ kVJ+qq/XY+xVG7Y5uOrht+zJDeYwyt6P59/kib/Pqns+ZbnC4mLU8k0tI/OQuhGfEgsN Sy3xYwHe0ihKhfCaLwVakpplAGcFr03tWd/8fj5d4P9xVOVzsXmmIqI7ZNBSWbrX7vMd w6lW6dJ97hImbuQ2TatuJdvL/ppt6ZCyHLCOXjreefGXr77s/iMcuzBQtTlHg6NnYMO2 S9LQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=gHxh7NJ9ZDQD5ad3sh/ZYrxo8RnJxM/j1QAWPCspKQ8=; b=jLeEECvhbI3WBQ3VPy6Qt7z3Z/ZXHlOpzk3VlyGyO6ZkFsa2fmZ52GtXZrNM88rgSk PQHT/+ZNSl+TjaeU/divPjWUw48qYpmWH7b5Jt3nGgOPGfmmQ94Plwu/5jHQnqN6lVAX KXhPt8QXdeEI/PsoxUBlDxPyzh/I2NDkoMcCIM+wodlzdnnKc4YywPtZ3V7qY73FC7EV NPmHQaiwWxSHjAD6AjtPa0SYzeeRMC1UCjr52c33oSLTXQtAvjuRtOVGMFQDdF8V+urR fVBkqQbnM2EDs1Cqky9zzzjt9SAlvl2X1HWnKov11oy2oRWPVMFMN8aUzlRF5Y1RmG+/ uVxA== X-Gm-Message-State: APjAAAUIXYZFoEjh6o3nu5VuF0jTJoXkNj5uE9yG61TAyKYDn7gkMbWs 4yg/ObKhiNn8+TOHROdzGLSqZvnBHOE= X-Received: by 2002:a17:902:ff02:: with SMTP id f2mr5394995plj.99.1567019187200; Wed, 28 Aug 2019 12:06:27 -0700 (PDT) Received: from localhost.localdomain (97-113-7-119.tukw.qwest.net. [97.113.7.119]) by smtp.gmail.com with ESMTPSA id f27sm2967944pgm.60.2019.08.28.12.06.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 Aug 2019 12:06:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 28 Aug 2019 12:04:56 -0700 Message-Id: <20190828190456.30315-70-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190828190456.30315-1-richard.henderson@linaro.org> References: <20190828190456.30315-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::642 Subject: [Qemu-devel] [PATCH v3 69/69] target/arm: Inline gen_bx_im into callers X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" There are only two remaining uses of gen_bx_im. In each case, we know the destination mode -- not changing in the case of gen_jmp or changing in the case of trans_BLX_i. Use this to simplify the surrounding code. For trans_BLX_i, use gen_jmp for the actual branch. For gen_jmp, use gen_set_pc_im to set up the single-step. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/translate.c | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) -- 2.17.1 diff --git a/target/arm/translate.c b/target/arm/translate.c index 5a9a6d3a1e..253f9f4142 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -765,21 +765,6 @@ static inline void gen_set_pc_im(DisasContext *s, target_ulong val) tcg_gen_movi_i32(cpu_R[15], val); } -/* Set PC and Thumb state from an immediate address. */ -static inline void gen_bx_im(DisasContext *s, uint32_t addr) -{ - TCGv_i32 tmp; - - s->base.is_jmp = DISAS_JUMP; - if (s->thumb != (addr & 1)) { - tmp = tcg_temp_new_i32(); - tcg_gen_movi_i32(tmp, addr & 1); - tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUARMState, thumb)); - tcg_temp_free_i32(tmp); - } - tcg_gen_movi_i32(cpu_R[15], addr & ~1); -} - /* Set PC and Thumb state from var. var is marked as dead. */ static inline void gen_bx(DisasContext *s, TCGv_i32 var) { @@ -2706,9 +2691,8 @@ static inline void gen_jmp (DisasContext *s, uint32_t dest) { if (unlikely(is_singlestepping(s))) { /* An indirect jump so that we still trigger the debug exception. */ - if (s->thumb) - dest |= 1; - gen_bx_im(s, dest); + gen_set_pc_im(s, dest); + s->base.is_jmp = DISAS_JUMP; } else { gen_goto_tb(s, 0, dest); } @@ -10105,12 +10089,16 @@ static bool trans_BL(DisasContext *s, arg_i *a) static bool trans_BLX_i(DisasContext *s, arg_BLX_i *a) { + TCGv_i32 tmp; + /* For A32, ARCH(5) is checked near the start of the uncond block. */ if (s->thumb && (a->imm & 2)) { return false; } tcg_gen_movi_i32(cpu_R[14], s->base.pc_next | s->thumb); - gen_bx_im(s, (read_pc(s) & ~3) + a->imm + !s->thumb); + tmp = tcg_const_i32(!s->thumb); + store_cpu_field(tmp, thumb); + gen_jmp(s, (read_pc(s) & ~3) + a->imm); return true; }