aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené Rebe <rene@exactcode.de>2024-07-12 21:17:08 +0000
committerPeter Bergner <bergner@linux.ibm.com>2024-07-18 13:13:34 -0500
commit6962835bca3e6bef0f6ceae84a7814138b08b8a5 (patch)
treeaa9cfbf7ac42c97178860c1f69e2131144d66dd3
parentc19237614b42ddae80a9a24e0b282cecc8aefb86 (diff)
downloadgcc-6962835bca3e6bef0f6ceae84a7814138b08b8a5.zip
gcc-6962835bca3e6bef0f6ceae84a7814138b08b8a5.tar.gz
gcc-6962835bca3e6bef0f6ceae84a7814138b08b8a5.tar.bz2
rs6000: Fix .machine cpu selection w/ altivec [PR97367]
There are various non-IBM CPUs with altivec, so we cannot use that flag to determine which .machine cpu to use, so ignore it. Emit an additional ".machine altivec" if Altivec is enabled so that the assembler doesn't require an explicit -maltivec option to assemble any Altivec instructions for those targets where the ".machine cpu" is insufficient to enable Altivec. For example, -mcpu=G5 emits a ".machine power4". 2024-07-18 René Rebe <rene@exactcode.de> Peter Bergner <bergner@linux.ibm.com> gcc/ PR target/97367 * config/rs6000/rs6000.cc (rs6000_machine_from_flags): Do not consider OPTION_MASK_ALTIVEC. (emit_asm_machine): For Altivec compiles, emit a ".machine altivec". gcc/testsuite/ PR target/97367 * gcc.target/powerpc/pr97367.c: New test. Signed-off-by: René Rebe <rene@exactcode.de>
-rw-r--r--gcc/config/rs6000/rs6000.cc5
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr97367.c13
2 files changed, 17 insertions, 1 deletions
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 2c0a7fc..5ed64b1 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -5896,7 +5896,8 @@ rs6000_machine_from_flags (void)
HOST_WIDE_INT flags = rs6000_isa_flags;
/* Disable the flags that should never influence the .machine selection. */
- flags &= ~(OPTION_MASK_PPC_GFXOPT | OPTION_MASK_PPC_GPOPT | OPTION_MASK_ISEL);
+ flags &= ~(OPTION_MASK_PPC_GFXOPT | OPTION_MASK_PPC_GPOPT | OPTION_MASK_ISEL
+ | OPTION_MASK_ALTIVEC);
if ((flags & (ISA_3_1_MASKS_SERVER & ~ISA_3_0_MASKS_SERVER)) != 0)
return "power10";
@@ -5921,6 +5922,8 @@ void
emit_asm_machine (void)
{
fprintf (asm_out_file, "\t.machine %s\n", rs6000_machine);
+ if (TARGET_ALTIVEC)
+ fprintf (asm_out_file, "\t.machine altivec\n");
}
#endif
diff --git a/gcc/testsuite/gcc.target/powerpc/pr97367.c b/gcc/testsuite/gcc.target/powerpc/pr97367.c
new file mode 100644
index 0000000..ef269a5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr97367.c
@@ -0,0 +1,13 @@
+/* PR target/97367 */
+/* { dg-options "-mdejagnu-cpu=G5" } */
+
+/* Verify we emit a ".machine power4" and ".machine altivec" rather
+ than a ".machine power7". */
+
+int dummy (void)
+{
+ return 0;
+}
+
+/* { dg-final { scan-assembler {\.machine power4\M} } } */
+/* { dg-final { scan-assembler {\.machine altivec\M} } } */