summaryrefslogtreecommitdiff
path: root/gcc/config/rs6000
diff options
context:
space:
mode:
authorJanis Johnson <janis187@us.ibm.com>2007-02-20 23:11:43 +0000
committerJanis Johnson <janis@gcc.gnu.org>2007-02-20 23:11:43 +0000
commitb639c3c245c82affaa8d0d1784259a312936c075 (patch)
treeefb29cd2b4a4e9481050182b5b8b3e7c9903b4ac /gcc/config/rs6000
parent7cd689bcf045c55b1786cdbc84c9f63a07070a58 (diff)
downloadgcc-b639c3c245c82affaa8d0d1784259a312936c075.tar.gz
invoke.texi (RS/6000 and PowerPC Options): Add -mcmpb and -mdfp.
* doc/invoke.texi (RS/6000 and PowerPC Options): Add -mcmpb and -mdfp. * configure.ac (HAVE_GAS_CMPB): Check for assembler support of the cmpb instruction. (HAVE_GAS_DFP): Check for assembler support of decimal floating point instructions. * configure: Regenerate. * config.in: Regenerate. * config/rs6000/rs6000.opt (mcmpb, mdfp): New. * config/rs6000/rs6000.c (rs6000_override_options): Add CMPB and DFP masks to power6 and power6x and to POWERPC_MASKS. * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Define _ARCH_PWR6. * config/rs6000/rs6000.h: Check assembler support for CMPB and DFP. * config/rs6000/sysv4.opt (mprototype): Use variable, not mask. * config/rs6000/linux64.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Access PROTOTYPE as variable, not mask. From-SVN: r122179
Diffstat (limited to 'gcc/config/rs6000')
-rw-r--r--gcc/config/rs6000/linux64.h4
-rw-r--r--gcc/config/rs6000/rs6000-c.c2
-rw-r--r--gcc/config/rs6000/rs6000.c6
-rw-r--r--gcc/config/rs6000/rs6000.h15
-rw-r--r--gcc/config/rs6000/rs6000.opt10
-rw-r--r--gcc/config/rs6000/sysv4.opt2
6 files changed, 32 insertions, 7 deletions
diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
index 5b954a9535d..8937dcd7b72 100644
--- a/gcc/config/rs6000/linux64.h
+++ b/gcc/config/rs6000/linux64.h
@@ -98,9 +98,9 @@ extern int dot_symbols;
target_flags &= ~MASK_EABI; \
error (INVALID_64BIT, "eabi"); \
} \
- if (target_flags & MASK_PROTOTYPE) \
+ if (TARGET_PROTOTYPE) \
{ \
- target_flags &= ~MASK_PROTOTYPE; \
+ TARGET_PROTOTYPE = 0; \
error (INVALID_64BIT, "prototype"); \
} \
if ((target_flags & MASK_POWERPC64) == 0) \
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index 1845eda584a..fa215fcbc91 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -106,6 +106,8 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfile)
builtin_define ("_ARCH_PWR5");
if (TARGET_FPRND)
builtin_define ("_ARCH_PWR5X");
+ if (TARGET_CMPB)
+ builtin_define ("_ARCH_PWR6");
if (TARGET_MFPGPR)
builtin_define ("_ARCH_PWR6X");
if (! TARGET_POWER && ! TARGET_POWER2 && ! TARGET_POWERPC)
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index ecedffd8fec..7a61d6c4b6f 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -1323,10 +1323,10 @@ rs6000_override_options (const char *default_cpu)
| MASK_MFCRF | MASK_POPCNTB | MASK_FPRND},
{"power6", PROCESSOR_POWER6,
POWERPC_7400_MASK | MASK_POWERPC64 | MASK_MFCRF | MASK_POPCNTB
- | MASK_FPRND},
+ | MASK_FPRND | MASK_CMPB | MASK_DFP },
{"power6x", PROCESSOR_POWER6,
POWERPC_7400_MASK | MASK_POWERPC64 | MASK_MFCRF | MASK_POPCNTB
- | MASK_FPRND | MASK_MFPGPR},
+ | MASK_FPRND | MASK_CMPB | MASK_MFPGPR | MASK_DFP },
{"powerpc", PROCESSOR_POWERPC, POWERPC_BASE_MASK},
{"powerpc64", PROCESSOR_POWERPC64,
POWERPC_BASE_MASK | MASK_PPC_GFXOPT | MASK_POWERPC64},
@@ -1353,7 +1353,7 @@ rs6000_override_options (const char *default_cpu)
POWERPC_MASKS = (POWERPC_BASE_MASK | MASK_PPC_GPOPT | MASK_STRICT_ALIGN
| MASK_PPC_GFXOPT | MASK_POWERPC64 | MASK_ALTIVEC
| MASK_MFCRF | MASK_POPCNTB | MASK_FPRND | MASK_MULHW
- | MASK_DLMZB | MASK_MFPGPR)
+ | MASK_DLMZB | MASK_CMPB | MASK_MFPGPR | MASK_DFP)
};
rs6000_init_hard_regno_mode_ok ();
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index decaf8fae8f..386a7c1d359 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -164,6 +164,14 @@
#define TARGET_FPRND 0
#endif
+/* Define TARGET_CMPB if the target assembler does not support the
+ cmpb instruction. */
+
+#ifndef HAVE_AS_CMPB
+#undef TARGET_CMPB
+#define TARGET_CMPB 0
+#endif
+
/* Define TARGET_MFPGPR if the target assembler does not support the
mffpr and mftgpr instructions. */
@@ -172,6 +180,13 @@
#define TARGET_MFPGPR 0
#endif
+/* Define TARGET_DFP if the target assembler does not support decimal
+ floating point instructions. */
+#ifndef HAVE_AS_DFP
+#undef TARGET_DFP
+#define TARGET_DFP 0
+#endif
+
#ifndef TARGET_SECURE_PLT
#define TARGET_SECURE_PLT 0
#endif
diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt
index bbf6235b8e3..f7091f50869 100644
--- a/gcc/config/rs6000/rs6000.opt
+++ b/gcc/config/rs6000/rs6000.opt
@@ -1,6 +1,6 @@
; Options for the rs6000 port of the compiler
;
-; Copyright (C) 2005 Free Software Foundation, Inc.
+; Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
; Contributed by Aldy Hernandez <aldy@quesejoda.com>.
;
; This file is part of GCC.
@@ -64,6 +64,10 @@ mfprnd
Target Report Mask(FPRND)
Use PowerPC V2.02 floating point rounding instructions
+mcmpb
+Target Report Mask(CMPB)
+Use PowerPC V2.05 compare bytes instruction
+
mmfpgpr
Target Report Mask(MFPGPR)
Use extended PowerPC V2.05 move floating point to/from GPR instructions
@@ -72,6 +76,10 @@ maltivec
Target Report Mask(ALTIVEC)
Use AltiVec instructions
+mdfp
+Target Report Mask(DFP)
+Use decimal floating point instructions
+
mmulhw
Target Report Mask(MULHW)
Use 4xx half-word multiply instructions
diff --git a/gcc/config/rs6000/sysv4.opt b/gcc/config/rs6000/sysv4.opt
index c483ea5e00a..bcdfd485586 100644
--- a/gcc/config/rs6000/sysv4.opt
+++ b/gcc/config/rs6000/sysv4.opt
@@ -75,7 +75,7 @@ Target RejectNegative
no description yet
mprototype
-Target Mask(PROTOTYPE)
+Target Var(TARGET_PROTOTYPE)
Assume all variable arg functions are prototyped
;; FIXME: Does nothing.