From: Richard Henderson <rth@twiddle.net>
To: qemu-devel@nongnu.org
Cc: pbonzini@redhat.com, "Vassili Karpov (malc)" <av1474@comtv.ru>,
aurelien@aurel32.net, Richard Henderson <rth@twiddle.net>
Subject: [Qemu-devel] [PATCH v2 6/7] tcg-ppc: Use conditional branch and link to slow path
Date: Mon, 9 Sep 2013 17:28:21 -0700 [thread overview]
Message-ID: <1378772902-4074-7-git-send-email-rth@twiddle.net> (raw)
In-Reply-To: <1378772902-4074-1-git-send-email-rth@twiddle.net>
Saves one insn per slow path. Note that we can no longer use
a tail call into the store helper.
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
tcg/ppc/tcg-target.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/tcg/ppc/tcg-target.c b/tcg/ppc/tcg-target.c
index a5f1f99..516d28f 100644
--- a/tcg/ppc/tcg-target.c
+++ b/tcg/ppc/tcg-target.c
@@ -611,9 +611,14 @@ static void tcg_out_tlb_check (TCGContext *s, int r0, int r1, int r2,
tcg_out32 (s, CMP | BF (6) | RA (addr_reg2) | RB (r1));
tcg_out32 (s, CRAND | BT (7, CR_EQ) | BA (6, CR_EQ) | BB (7, CR_EQ));
#endif
+
+ /* Use a conditional branch-and-link so that we load a pointer to
+ somewhere within the current opcode, for passing on to the helper.
+ This address cannot be used for a tail call, but it's shorter
+ than forming an address from scratch. */
*label_ptr = s->code_ptr;
retranst = ((uint16_t *) s->code_ptr)[1] & ~3;
- tcg_out32 (s, BC | BI (7, CR_EQ) | retranst | BO_COND_FALSE);
+ tcg_out32(s, BC | BI(7, CR_EQ) | retranst | BO_COND_FALSE | LK);
/* r0 now contains &env->tlb_table[mem_index][index].addr_x */
tcg_out32 (s, (LWZ
@@ -853,7 +858,7 @@ static void tcg_out_qemu_ld_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
tcg_out_mov(s, TCG_TYPE_I32, ir++, l->addrlo_reg);
}
tcg_out_movi(s, TCG_TYPE_I32, ir++, l->mem_index);
- tcg_out_movi(s, TCG_TYPE_PTR, ir, (uintptr_t)l->raddr);
+ tcg_out32(s, MFSPR | RT(ir++) | LR);
tcg_out_b(s, LK, (uintptr_t)ld_trampolines[l->opc & 3]);
datalo = l->datalo_reg;
@@ -928,9 +933,9 @@ static void tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *l)
ir++;
tcg_out_movi(s, TCG_TYPE_I32, ir++, l->mem_index);
- tcg_out_movi(s, TCG_TYPE_PTR, ir, (uintptr_t)l->raddr);
- tcg_out32(s, MTSPR | RS(ir) | LR);
- tcg_out_b(s, 0, (uintptr_t)st_trampolines[l->opc]);
+ tcg_out32(s, MFSPR | RT(ir++) | LR);
+ tcg_out_b(s, LK, (uintptr_t)st_trampolines[l->opc]);
+ tcg_out_b(s, 0, (uintptr_t)l->raddr);
}
void tcg_out_tb_finalize(TCGContext *s)
--
1.8.3.1
next prev parent reply other threads:[~2013-09-10 0:28 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-10 0:28 [Qemu-devel] [PATCH v2 0/7] tcg-ppc qemu_ldst improvements Richard Henderson
2013-09-10 0:28 ` [Qemu-devel] [PATCH v2 1/7] tcg-ppc: fix qemu_ld/qemu_st for AIX ABI Richard Henderson
2013-09-10 0:28 ` [Qemu-devel] [PATCH v2 2/7] tcg-ppc: use new return-argument ld/st helpers Richard Henderson
2013-09-10 0:28 ` [Qemu-devel] [PATCH v2 3/7] configure: Allow command-line configure for ppc32 Richard Henderson
2013-09-10 0:28 ` [Qemu-devel] [PATCH v2 4/7] tcg-ppc: Avoid code for nop move Richard Henderson
2013-09-10 0:28 ` [Qemu-devel] [PATCH v2 5/7] tcg-ppc: Cleanup tcg_out_qemu_ld/st_slow_path Richard Henderson
2013-09-10 0:28 ` Richard Henderson [this message]
2013-09-10 0:28 ` [Qemu-devel] [PATCH v2 7/7] tcg-ppc: Fix and cleanup tcg_out_tlb_check Richard Henderson
2013-09-10 0:33 ` Richard Henderson
2013-09-10 0:39 ` [Qemu-devel] [PATCH v3 " Richard Henderson
2013-09-10 0:42 ` [Qemu-devel] [PATCH v4 " Richard Henderson
2013-09-10 6:56 ` [Qemu-devel] [PATCH v2 0/7] tcg-ppc qemu_ldst improvements Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1378772902-4074-7-git-send-email-rth@twiddle.net \
--to=rth@twiddle.net \
--cc=aurelien@aurel32.net \
--cc=av1474@comtv.ru \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).