From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49253) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZlkaA-0004lG-Vi for qemu-devel@nongnu.org; Mon, 12 Oct 2015 17:24:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zlka7-0001GS-5o for qemu-devel@nongnu.org; Mon, 12 Oct 2015 17:24:35 -0400 Received: from mail-pa0-x22a.google.com ([2607:f8b0:400e:c03::22a]:36195) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zlka6-0001GO-Rw for qemu-devel@nongnu.org; Mon, 12 Oct 2015 17:24:31 -0400 Received: by pacex6 with SMTP id ex6so9552630pac.3 for ; Mon, 12 Oct 2015 14:24:30 -0700 (PDT) Received: from bigtime.com ([101.191.203.214]) by smtp.gmail.com with ESMTPSA id zc4sm20083274pbb.24.2015.10.12.14.24.29 for (version=TLSv1/SSLv3 cipher=OTHER); Mon, 12 Oct 2015 14:24:29 -0700 (PDT) Sender: Richard Henderson From: Richard Henderson Date: Tue, 13 Oct 2015 08:23:46 +1100 Message-Id: <1444685028-4950-2-git-send-email-rth@twiddle.net> In-Reply-To: <1444685028-4950-1-git-send-email-rth@twiddle.net> References: <1444685028-4950-1-git-send-email-rth@twiddle.net> Subject: [Qemu-devel] [PATCH 1/3] tcg/ppc: Adjust exit_tb for change in prologue placement List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Changing the prologue to the beginning of the code_gen_buffer changes the direction of the "return" branch. Need to change the logic to match. Signed-off-by: Richard Henderson --- tcg/ppc/tcg-target.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tcg/ppc/tcg-target.c b/tcg/ppc/tcg-target.c index 92ef719..fd7a3e0 100644 --- a/tcg/ppc/tcg-target.c +++ b/tcg/ppc/tcg-target.c @@ -1855,12 +1855,10 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, const TCGArg *args, if (USE_REG_RA) { ptrdiff_t disp = tcg_pcrel_diff(s, tb_ret_addr); - /* If we can use a direct branch, otherwise use the value in RA. - Note that the direct branch is always forward. If it's in - range now, it'll still be in range after the movi. Don't - bother about the 20 bytes where the test here fails but it - would succeed below. */ - if (!in_range_b(disp)) { + /* Use a direct branch if we can, otherwise use the value in RA. + Note that the direct branch is always backward, thus we need + to account for the possibility of 5 insns from the movi. */ + if (!in_range_b(disp - 20)) { tcg_out32(s, MTSPR | RS(TCG_REG_RA) | CTR); tcg_out_movi(s, TCG_TYPE_PTR, TCG_REG_R3, args[0]); tcg_out32(s, BCCTR | BO_ALWAYS); -- 2.4.3