From: "Nicholas Piggin" <npiggin@gmail.com>
To: "Richard Henderson" <richard.henderson@linaro.org>,
<qemu-devel@nongnu.org>
Cc: <jniethe5@gmail.com>, <qemu-ppc@nongnu.org>
Subject: Re: [PATCH v2 2/7] tcg/ppc: Use PADDI in tcg_out_movi
Date: Wed, 09 Aug 2023 19:03:43 +1000 [thread overview]
Message-ID: <CUNW5ZQWZ32V.3MXWUU3X0QI8O@wheely> (raw)
In-Reply-To: <20230808030250.50602-3-richard.henderson@linaro.org>
On Tue Aug 8, 2023 at 1:02 PM AEST, Richard Henderson wrote:
> PADDI can load 34-bit immediates and 34-bit pc-relative addresses.
>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
> Reviewed-by: Jordan Niethe <jniethe5@gmail.com>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
> tcg/ppc/tcg-target.c.inc | 51 ++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 51 insertions(+)
>
> diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc
> index 642d0fd128..2141c0bc78 100644
> --- a/tcg/ppc/tcg-target.c.inc
> +++ b/tcg/ppc/tcg-target.c.inc
> @@ -707,6 +707,38 @@ static bool patch_reloc(tcg_insn_unit *code_ptr, int type,
> return true;
> }
>
> +/* Ensure that the prefixed instruction does not cross a 64-byte boundary. */
> +static bool tcg_out_need_prefix_align(TCGContext *s)
> +{
> + return ((uintptr_t)s->code_ptr & 0x3f) == 0x3c;
> +}
> +
> +static void tcg_out_prefix_align(TCGContext *s)
> +{
> + if (tcg_out_need_prefix_align(s)) {
> + tcg_out32(s, NOP);
> + }
> +}
> +
> +static ptrdiff_t tcg_pcrel_diff_for_prefix(TCGContext *s, const void *target)
> +{
> + return tcg_pcrel_diff(s, target) - (tcg_out_need_prefix_align(s) ? 4 : 0);
> +}
> +
> +/* Output Type 10 Prefix - Modified Load/Store Form (MLS:D) */
> +static void tcg_out_mls_d(TCGContext *s, tcg_insn_unit opc, unsigned rt,
> + unsigned ra, tcg_target_long imm, bool r)
> +{
> + tcg_insn_unit p, i;
> +
> + p = OPCD(1) | (2 << 24) | (r << 20) | ((imm >> 16) & 0x3ffff);
> + i = opc | TAI(rt, ra, imm);
> +
> + tcg_out_prefix_align(s);
> + tcg_out32(s, p);
> + tcg_out32(s, i);
> +}
> +
> static void tcg_out_mem_long(TCGContext *s, int opi, int opx, TCGReg rt,
> TCGReg base, tcg_target_long offset);
>
> @@ -992,6 +1024,25 @@ static void tcg_out_movi_int(TCGContext *s, TCGType type, TCGReg ret,
> return;
> }
>
> + /*
> + * Load values up to 34 bits, and pc-relative addresses,
> + * with one prefixed insn.
> + */
> + if (have_isa_3_10) {
> + if (arg == sextract64(arg, 0, 34)) {
> + /* pli ret,value = paddi ret,0,value,0 */
> + tcg_out_mls_d(s, ADDI, ret, 0, arg, 0);
> + return;
> + }
> +
> + tmp = tcg_pcrel_diff_for_prefix(s, (void *)arg);
> + if (tmp == sextract64(tmp, 0, 34)) {
> + /* pla ret,value = paddi ret,0,value,1 */
> + tcg_out_mls_d(s, ADDI, ret, 0, tmp, 1);
> + return;
> + }
> + }
> +
> /* Load 32-bit immediates with two insns. Note that we've already
> eliminated bare ADDIS, so we know both insns are required. */
> if (TCG_TARGET_REG_BITS == 32 || arg == (int32_t)arg) {
next prev parent reply other threads:[~2023-08-09 9:04 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-08 3:02 [PATCH for-8.2 v2 0/7] tcg/ppc: Support power10 prefixed instructions Richard Henderson
2023-08-08 3:02 ` [PATCH v2 1/7] tcg/ppc: Untabify tcg-target.c.inc Richard Henderson
2023-08-09 8:55 ` Nicholas Piggin
2023-08-08 3:02 ` [PATCH v2 2/7] tcg/ppc: Use PADDI in tcg_out_movi Richard Henderson
2023-08-09 9:03 ` Nicholas Piggin [this message]
2023-08-08 3:02 ` [PATCH v2 3/7] tcg/ppc: Use prefixed instructions in tcg_out_mem_long Richard Henderson
2023-08-09 11:00 ` Nicholas Piggin
2023-08-08 3:02 ` [PATCH v2 4/7] tcg/ppc: Use PLD in tcg_out_movi for constant pool Richard Henderson
2023-08-09 11:20 ` Nicholas Piggin
2023-08-08 3:02 ` [PATCH v2 5/7] tcg/ppc: Use prefixed instructions in tcg_out_dupi_vec Richard Henderson
2023-08-08 3:02 ` [PATCH v2 6/7] tcg/ppc: Disable USE_REG_TB for Power v3.1 Richard Henderson
2023-08-09 11:21 ` Nicholas Piggin
2023-08-08 3:02 ` [PATCH v2 7/7] tcg/ppc: Use prefixed instructions for tcg_out_goto_tb Richard Henderson
2023-08-09 2:56 ` Jordan Niethe
2023-08-09 3:18 ` Richard Henderson
2023-08-09 11:24 ` Nicholas Piggin
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=CUNW5ZQWZ32V.3MXWUU3X0QI8O@wheely \
--to=npiggin@gmail.com \
--cc=jniethe5@gmail.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=richard.henderson@linaro.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.