[gcc(refs/users/meissner/heads/work251-dmf)] DMF patch 2

Michael Meissner via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:ac701c6a97e7dffe5bb840bd46ac899baae11c2e

commit ac701c6a97e7dffe5bb840bd46ac899baae11c2e
Author: Michael Meissner <[email protected]>
Date:   Sat Jul 18 02:30:36 2026 -0400

    DMF patch 2
    
    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 of the pair.
    
    2025-07-14  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.

Diff:
---
 gcc/config/rs6000/rs6000.cc | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 7743c9cdc4a1..64683102e9e6 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -14527,6 +14527,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;
+
+    case 'W':
+      /* 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);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.