[gcc(refs/users/meissner/heads/work247-test)] Add paddis support.
Michael Meissner
meissner@gcc.gnu.org
Tue Jun 9 15:56:51 GMT 2026
https://gcc.gnu.org/g:10eb3b9851e0cac60c1286d2dff46911e597dcd1
commit 10eb3b9851e0cac60c1286d2dff46911e597dcd1
Author: Michael Meissner <meissner@linux.ibm.com>
Date: Tue Jun 9 11:56:29 2026 -0400
Add paddis support.
This patch adds support for the paddis instruction that might be added to a
future PowerPC processor.
2026-06-09 Michael Meissner <meissner@linux.ibm.com>
gcc/
* config/rs6000/constraints.md (eU): New constraint.
(eV): Likewise.
* config/rs6000/predicates.md (paddis_operand): New predicate.
(paddis_paddi_operand): Likewise.
(add_cint_operand): Add paddis support.
(add_operand): Likewise.
* config/rs6000/rs6000.cc (num_insns_constant_gpr): Likewise.
(print_operand): Add %B<n> for paddis support.
* config/rs6000/rs6000.h (TARGET_PADDIS): New macro.
(SIGNED_INTEGER_64BIT_P): Likewise.
* config/rs6000/rs6000.md (isa attribute): Add paddis support.
(enabled attribute); Likewise.
(add<mode>3): Likewise.
(adddi3 splitter): New splitter for paddis.
(movdi_internal64): Add paddis support.
(movdi splitter): New splitter for paddis.
* doc/md.texi (PowerPC constraints): Add eU and eV documentation.
gcc/testsuite/
* gcc.target/powerpc/prefixed-addis.c: New test.
Diff:
---
gcc/config/rs6000/rs6000.cc | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 32cd1de3055b..0e7848315139 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -6245,17 +6245,17 @@ num_insns_constant_gpr (HOST_WIDE_INT value)
return 1;
/* PADDIS support. */
- else if (TARGET_PADDIS && SIGNED_INTEGER_64BIT_P (value))
+ else if (TARGET_PADDIS)
{
- if ((value & HOST_WIDE_INT_C(0xffffffff)) == 0)
+ rtx num = GEN_INT (value);
+ if (paddis_operand (num, VOIDmode))
return 1; /* paddis alone. */
- /* Don't do paddi + paddis if we can do addis and rldicl. */
- if (!rs6000_is_valid_and_mask (GEN_INT (value), DImode))
- return 2; /* paddi + paddis. */
+ if (paddis_paddi_operand (num, VOIDmode))
+ return 2; /* paddis + paddi/addi. */
}
- else if (TARGET_POWERPC64)
+ if (TARGET_POWERPC64)
{
int num_insns = 0;
rs6000_emit_set_long_const (nullptr, value, &num_insns);
More information about the Gcc-cvs
mailing list