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 3/7] tcg/ppc: Use prefixed instructions in tcg_out_mem_long
Date: Wed, 09 Aug 2023 21:00:39 +1000 [thread overview]
Message-ID: <CUNYNIVKCB1U.2Q6WCY073ER5L@wheely> (raw)
In-Reply-To: <20230808030250.50602-4-richard.henderson@linaro.org>
On Tue Aug 8, 2023 at 1:02 PM AEST, Richard Henderson wrote:
> When the offset is out of range of the non-prefixed insn, but
> fits the 34-bit immediate of the prefixed insn, use that.
>
The switch will fall through in some cases (at least opi == 0).
Should it have a default: break; to make that obvious?
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 | 66 ++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 66 insertions(+)
>
> diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc
> index 2141c0bc78..61ae9d8ab7 100644
> --- a/tcg/ppc/tcg-target.c.inc
> +++ b/tcg/ppc/tcg-target.c.inc
> @@ -323,6 +323,15 @@ static bool tcg_target_const_match(int64_t val, TCGType type, int ct)
> #define STDX XO31(149)
> #define STQ XO62( 2)
>
> +#define PLWA OPCD( 41)
> +#define PLD OPCD( 57)
> +#define PLXSD OPCD( 42)
> +#define PLXV OPCD(25 * 2 + 1) /* force tx=1 */
> +
> +#define PSTD OPCD( 61)
> +#define PSTXSD OPCD( 46)
> +#define PSTXV OPCD(27 * 2 + 1) /* force sx=1 */
> +
> #define ADDIC OPCD( 12)
> #define ADDI OPCD( 14)
> #define ADDIS OPCD( 15)
> @@ -725,6 +734,20 @@ 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 00 Prefix - 8-Byte Load/Store Form (8LS:D) */
> +static void tcg_out_8ls_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) | (r << 20) | ((imm >> 16) & 0x3ffff);
> + i = opc | TAI(rt, ra, imm);
> +
> + tcg_out_prefix_align(s);
> + tcg_out32(s, p);
> + tcg_out32(s, i);
> +}
> +
> /* 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)
> @@ -1368,6 +1391,49 @@ static void tcg_out_mem_long(TCGContext *s, int opi, int opx, TCGReg rt,
> break;
> }
>
> + /* For unaligned or large offsets, use the prefixed form. */
> + if (have_isa_3_10
> + && (offset != (int16_t)offset || (offset & align))
> + && offset == sextract64(offset, 0, 34)) {
> + /*
> + * Note that the MLS:D insns retain their un-prefixed opcode,
> + * while the 8LS:D insns use a different opcode space.
> + */
> + switch (opi) {
> + case LBZ:
> + case LHZ:
> + case LHA:
> + case LWZ:
> + case STB:
> + case STH:
> + case STW:
> + case ADDI:
> + tcg_out_mls_d(s, opi, rt, base, offset, 0);
> + return;
> + case LWA:
> + tcg_out_8ls_d(s, PLWA, rt, base, offset, 0);
> + return;
> + case LD:
> + tcg_out_8ls_d(s, PLD, rt, base, offset, 0);
> + return;
> + case STD:
> + tcg_out_8ls_d(s, PSTD, rt, base, offset, 0);
> + return;
> + case LXSD:
> + tcg_out_8ls_d(s, PLXSD, rt & 31, base, offset, 0);
> + return;
> + case STXSD:
> + tcg_out_8ls_d(s, PSTXSD, rt & 31, base, offset, 0);
> + return;
> + case LXV:
> + tcg_out_8ls_d(s, PLXV, rt & 31, base, offset, 0);
> + return;
> + case STXV:
> + tcg_out_8ls_d(s, PSTXV, rt & 31, base, offset, 0);
> + return;
> + }
> + }
> +
> /* For unaligned, or very large offsets, use the indexed form. */
> if (offset & align || offset != (int32_t)offset || opi == 0) {
> if (rs == base) {
next prev parent reply other threads:[~2023-08-09 11:01 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 [this message]
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=CUNYNIVKCB1U.2Q6WCY073ER5L@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.