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 4/7] tcg/ppc: Use PLD in tcg_out_movi for constant pool
Date: Wed, 09 Aug 2023 21:20:36 +1000 [thread overview]
Message-ID: <CUNZ2SOR0AMY.2H67OHTB0OVDC@wheely> (raw)
In-Reply-To: <20230808030250.50602-5-richard.henderson@linaro.org>
On Tue Aug 8, 2023 at 1:02 PM AEST, Richard Henderson wrote:
> The prefixed instruction has a pc-relative form to use here.
I don't understand this code very well but going by existing
relocs it looks okay.
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
> tcg/ppc/tcg-target.c.inc | 24 ++++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
>
> diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc
> index 61ae9d8ab7..b3b2e9874d 100644
> --- a/tcg/ppc/tcg-target.c.inc
> +++ b/tcg/ppc/tcg-target.c.inc
> @@ -101,6 +101,10 @@
> #define ALL_GENERAL_REGS 0xffffffffu
> #define ALL_VECTOR_REGS 0xffffffff00000000ull
>
> +#ifndef R_PPC64_PCREL34
> +#define R_PPC64_PCREL34 132
> +#endif
> +
> #define have_isel (cpuinfo & CPUINFO_ISEL)
>
> #ifndef CONFIG_SOFTMMU
> @@ -260,6 +264,19 @@ static bool reloc_pc14(tcg_insn_unit *src_rw, const tcg_insn_unit *target)
> return false;
> }
>
> +static bool reloc_pc34(tcg_insn_unit *src_rw, const tcg_insn_unit *target)
> +{
> + const tcg_insn_unit *src_rx = tcg_splitwx_to_rx(src_rw);
> + ptrdiff_t disp = tcg_ptr_byte_diff(target, src_rx);
> +
> + if (disp == sextract64(disp, 0, 34)) {
> + src_rw[0] = (src_rw[0] & ~0x3ffff) | ((disp >> 16) & 0x3ffff);
> + src_rw[1] = (src_rw[1] & ~0xffff) | (disp & 0xffff);
> + return true;
> + }
> + return false;
> +}
> +
> /* test if a constant matches the constraint */
> static bool tcg_target_const_match(int64_t val, TCGType type, int ct)
> {
> @@ -684,6 +701,8 @@ static bool patch_reloc(tcg_insn_unit *code_ptr, int type,
> return reloc_pc14(code_ptr, target);
> case R_PPC_REL24:
> return reloc_pc24(code_ptr, target);
> + case R_PPC64_PCREL34:
> + return reloc_pc34(code_ptr, target);
> case R_PPC_ADDR16:
> /*
> * We are (slightly) abusing this relocation type. In particular,
> @@ -1111,6 +1130,11 @@ static void tcg_out_movi_int(TCGContext *s, TCGType type, TCGReg ret,
> }
>
> /* Use the constant pool, if possible. */
> + if (have_isa_3_10) {
> + tcg_out_8ls_d(s, PLD, ret, 0, 0, 1);
> + new_pool_label(s, arg, R_PPC64_PCREL34, s->code_ptr - 2, 0);
> + return;
> + }
> if (!in_prologue && USE_REG_TB) {
> new_pool_label(s, arg, R_PPC_ADDR16, s->code_ptr,
> tcg_tbrel_diff(s, NULL));
next prev parent reply other threads:[~2023-08-09 11:21 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
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 [this message]
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=CUNZ2SOR0AMY.2H67OHTB0OVDC@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.