From 5248c9618c10842a86f0d9b8bb990590435898e5 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Wed, 8 Sep 1993 10:49:49 -0400 Subject: [PATCH] (rs6000_cpu, rs6000_cpu_string): New variables. (rs6000_override_options): New function. From-SVN: r5283 --- gcc/config/rs6000/rs6000.c | 63 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 2529067a408..568a2256920 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 -- 2.30.2