On Mon, Jul 13, 2026 at 03:03:53PM +0530, jeevitha wrote:
> Hi All,
>
> The following patch has been bootstrapped and regtested on powerpc64le-linux.
>
> Add a new %W print modifier to print_operand that prints the VSX
> register number plus two.
>
> Some future Power instruction patterns require printing two VSX
> registers corresponding to a __vector_pair operand. The existing
> %x print modifier emits the first VSX register using VSX register
> numbering. Add a new %W print modifier to emit the second VSX
> register in the pair.
>
> 2025-07-13 Jeevitha Palanisamy <[email protected]>
> Kishan Parmar <[email protected]>
>
> gcc/
> * config/rs6000/rs6000.cc (print_operand): Add the `%W`
> print modifier to print the VSX register number plus two.
Note, this patch looks ill-formed. Please re-do the patch from the
current sources. In particular, the patch does not have a 'W': case
(which should be between 'w' and 'x'). The lines in the #ifDEF are
part of the %x case.
> diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
> index d8669d9ffce..6bbae4ad2f6 100644
> --- a/gcc/config/rs6000/rs6000.cc
> +++ b/gcc/config/rs6000/rs6000.cc
> @@ -14514,6 +14514,27 @@ print_operand (FILE *file, rtx x, int code)
> ? reg - 32
> : reg - FIRST_ALTIVEC_REGNO + 32);
>
> +#ifdef TARGET_REGNAMES
> + if (TARGET_REGNAMES)
> + fprintf (file, "%%vs%d", vsx_reg);
> + else
> +#endif
> + fprintf (file, "%d", vsx_reg);
> + }
> + return;
> +
> + /* Like '%x', but prints the VSX register number +2. */
> + if (!REG_P (x) || !VSX_REGNO_P (REGNO (x)))
> + output_operand_lossage ("invalid %%W value");
> + else
> + {
> + int reg = REGNO (x);
> + int vsx_reg = (FP_REGNO_P (reg)
> + ? reg - 32
> + : reg - FIRST_ALTIVEC_REGNO + 32);
> + vsx_reg += 2;
> +
> #ifdef TARGET_REGNAMES
> if (TARGET_REGNAMES)
> fprintf (file, "%%vs%d", vsx_reg);
>
--
Michael Meissner, IBM
PO Box 98, Ayer, Massachusetts, USA, 01432
email: [email protected]