aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-09-08 10:49:49 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1993-09-08 10:49:49 -0400
commit5248c9618c10842a86f0d9b8bb990590435898e5 (patch)
treebef98be96548414422a9ee990165b7add7de1096 /gcc
parentfb623df5013441f0486591bb9c811d30946608c4 (diff)
downloadgcc-5248c9618c10842a86f0d9b8bb990590435898e5.zip
gcc-5248c9618c10842a86f0d9b8bb990590435898e5.tar.gz
gcc-5248c9618c10842a86f0d9b8bb990590435898e5.tar.bz2
(rs6000_cpu, rs6000_cpu_string): New variables.
(rs6000_override_options): New function. From-SVN: r5283
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/rs6000/rs6000.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 2529067..568a225 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -36,10 +36,16 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "tree.h"
extern char *language_string;
+extern int profile_block_flag;
#define min(A,B) ((A) < (B) ? (A) : (B))
#define max(A,B) ((A) > (B) ? (A) : (B))
+/* Target cpu type */
+
+enum processor_type rs6000_cpu;
+char *rs6000_cpu_string;
+
/* Set to non-zero by "fix" operation to indicate that itrunc and
uitrunc must be defined. */
@@ -55,6 +61,63 @@ static int trunc_defined;
rtx rs6000_compare_op0, rs6000_compare_op1;
int rs6000_compare_fp_p;
+/* Override command line options. Mostly we process the processor
+ type and sometimes adjust other TARGET_ options. */
+
+void
+rs6000_override_options ()
+{
+ int i;
+
+ static struct ptt
+ {
+ char *name; /* Canonical processor name. */
+ enum processor_type processor; /* Processor type enum value. */
+ int target_enable; /* Target flags to enable. */
+ int target_disable; /* Target flags to disable. */
+ } processor_target_table[]
+ = {{"all", PROCESSOR_DEFAULT,
+ 0, MASK_POWER | MASK_POWERPC | MASK_POWERPC64},
+ {"rios", PROCESSOR_RIOS,
+ MASK_POWER, MASK_POWERPC | MASK_POWERPC64},
+ {"rios2", PROCESSOR_RIOS2,
+ MASK_POWER, MASK_POWERPC | MASK_POWERPC64},
+ {"601", PROCESSOR_PPC601,
+ MASK_POWER | MASK_POWERPC | MASK_NEW_MNEMONICS, MASK_POWERPC64},
+ {"603", PROCESSOR_PPC603,
+ MASK_POWERPC | MASK_NEW_MNEMONICS, MASK_POWER | MASK_POWERPC64},
+ {"604", PROCESSOR_PPC604,
+ MASK_POWERPC | MASK_NEW_MNEMONICS, MASK_POWER | MASK_POWERPC64},
+ {"620", PROCESSOR_PPC620,
+ MASK_POWERPC | MASK_POWERPC64 | MASK_NEW_MNEMONICS, MASK_POWER}};
+
+ int ptt_size = sizeof (processor_target_table) / sizeof (struct ptt);
+
+ profile_block_flag = 0;
+
+ /* Identify the processor type */
+ if (rs6000_cpu_string == 0)
+ rs6000_cpu = PROCESSOR_DEFAULT;
+ else
+ {
+ for (i = 0; i < ptt_size; i++)
+ if (! strcmp (rs6000_cpu_string, processor_target_table[i].name))
+ {
+ rs6000_cpu = processor_target_table[i].processor;
+ target_flags |= processor_target_table[i].target_enable;
+ target_flags &= ~processor_target_table[i].target_disable;
+ break;
+ }
+
+ if (i == ptt_size)
+ {
+ error ("bad value (%s) for -mcpu= switch", rs6000_cpu_string);
+ rs6000_cpu_string = "default";
+ rs6000_cpu = PROCESSOR_DEFAULT;
+ }
+ }
+}
+
/* Return non-zero if this function is known to have a null epilogue. */
int