]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
(MASK_*, TARGET_*): Add target masks and tests.
authorRichard Kenner <kenner@gcc.gnu.org>
Wed, 8 Sep 1993 14:49:18 +0000 (10:49 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Wed, 8 Sep 1993 14:49:18 +0000 (10:49 -0400)
(TARGET_SWITCHES): Add target switches for various architectures and mnemonics
options.
(TARGET_OPTIONS): Add cpu type as special target option.
(OVERRIDE_OPTIONS): Call rs6000_override_options to decipher.

From-SVN: r5282

gcc/config/rs6000/rs6000.h

index e4706fccaeca2e0241006ddc3f3121172c78fd9b..e7e2062161fa01a4ef1ebbd06caa1b1bc48b0f2a 100644 (file)
@@ -63,40 +63,116 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 /* Don't turn -B into -L if the argument specifies a relative file name.  */
 #define RELATIVE_PREFIX_NOT_LINKDIR
 
-/* Run-time compilation parameters selecting different hardware subsets.  */
+/* Architecture type.  */
 
-/* Flag to disable putting fp constants in the TOC; can be turned on when
-   the TOC overflows.  */
+extern int target_flags;
+
+/* Use POWER architecture instructions and MQ register.  */
+#define MASK_POWER             0x01
+
+/* Use PowerPC architecture instructions.  */
+#define MASK_POWERPC           0x02
 
-#define TARGET_NO_FP_IN_TOC  (target_flags & 1)
+/* Use PowerPC-64 architecture instructions.  */
+#define MASK_POWERPC64         0x04
 
-/* Flag to output only one TOC entry per module.  Normally linking fails if
+/* Use revised mnemonic names defined for PowerPC architecture.  */
+#define MASK_NEW_MNEMONICS     0x08
+
+/* Disable placing fp constants in the TOC; can be turned on when the
+   TOC overflows.  */
+#define MASK_NO_FP_IN_TOC      0x10
+
+/* Output only one TOC entry per module.  Normally linking fails if
    there are more than 16K unique variables/constants in an executable.  With
    this option, linking fails only if there are more than 16K modules, or
    if there are more than 16K unique variables/constant in a single module.
 
    This is at the cost of having 2 extra loads and one extra store per
    function, and one less allocatable register.  */
+#define MASK_MINIMAL_TOC       0x20
 
-#define TARGET_MINIMAL_TOC (target_flags & 2)
+#define TARGET_POWER                   (target_flags & MASK_POWER)
+#define TARGET_POWERPC                 (target_flags & MASK_POWERPC)
+#define TARGET_POWERPC64               (target_flags & MASK_POWERPC64)
+#define TARGET_NEW_MNEMONICS           (target_flags & MASK_NEW_MNEMONICS)
+#define TARGET_NO_FP_IN_TOC            (target_flags & MASK_NO_FP_IN_TOC)
+#define TARGET_MINIMAL_TOC             (target_flags & MASK_MINIMAL_TOC)
 
-extern int target_flags;
+/* Run-time compilation parameters selecting different hardware subsets.
 
-/* Macro to define tables used to set the flags.
+   Macro to define tables used to set the flags.
    This is a list in braces of pairs in braces,
    each pair being { "NAME", VALUE }
    where VALUE is the bits to set or minus the bits to clear.
    An empty string NAME is used to identify the default VALUE.  */
 
-#define TARGET_SWITCHES                \
-  {{"normal-toc", - (1|2)},    \
-   {"no-fp-in-toc", 1},        \
-   {"minimal-toc", 2},         \
-   { "", TARGET_DEFAULT}}
-
-#define TARGET_DEFAULT 0
-
-/* On the RS/6000, we turn on various flags if optimization is selected.  */
+#define TARGET_SWITCHES                                                \
+ {{"power",            MASK_POWER},                            \
+  {"no-power",         - MASK_POWER},                          \
+  {"powerpc",          MASK_POWERPC},                          \
+  {"no-powerpc",       - (MASK_POWERPC | MASK_POWERPC64)},     \
+  {"powerpc64",                MASK_POWERPC | MASK_POWERPC64},         \
+  {"no-powerpc64",     -MASK_POWERPC64},                       \
+  {"new-mnemonics",    MASK_NEW_MNEMONICS},                    \
+  {"old-mnemonics",    -MASK_NEW_MNEMONICS},                   \
+  {"normal-toc",       - (MASK_NO_FP_IN_TOC | MASK_MINIMAL_TOC)}, \
+  {"fp-in-toc",                - MASK_NO_FP_IN_TOC},                   \
+  {"no-fp-in-toc",     MASK_NO_FP_IN_TOC},                     \
+  {"minimal-toc",      MASK_MINIMAL_TOC},                      \
+  {"no-minimal-toc",   - MASK_MINIMAL_TOC},                    \
+  {"",                 TARGET_DEFAULT}}
+
+#define TARGET_DEFAULT MASK_POWER
+
+/* Processor type.  */
+enum processor_type
+ {PROCESSOR_RIOS,
+  PROCESSOR_RIOS2,
+  PROCESSOR_PPC601,
+  PROCESSOR_PPC603,
+  PROCESSOR_PPC604,
+  PROCESSOR_PPC620};
+
+extern enum processor_type rs6000_cpu;
+
+/* Recast the processor type to the cpu attribute.  */
+#define rs6000_cpu_attr ((enum attr_cpu)rs6000_cpu)
+
+/* Define the default processor.  This is overridden by other tm.h files.  */
+#define PROCESSOR_DEFAULT PROCESSOR_RIOS
+
+/* This macro is similar to `TARGET_SWITCHES' but defines names of
+   command options that have values.  Its definition is an
+   initializer with a subgrouping for each command option.
+
+   Each subgrouping contains a string constant, that defines the
+   fixed part of the option name, and the address of a variable.
+   The variable, type `char *', is set to the variable part of the
+   given option if the fixed part matches.  The actual option name
+   is made by appending `-m' to the specified name.
+
+   Here is an example which defines `-mshort-data-NUMBER'.  If the
+   given option is `-mshort-data-512', the variable `m88k_short_data'
+   will be set to the string `"512"'.
+
+       extern char *m88k_short_data;
+       #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } }  */
+
+#define TARGET_OPTIONS         \
+{ {"cpu=", &rs6000_cpu_string}}
+
+extern char *rs6000_cpu_string;
+
+/* Sometimes certain combinations of command options do not make sense
+   on a particular target machine.  You can define a macro
+   `OVERRIDE_OPTIONS' to take account of this.  This macro, if
+   defined, is executed once just after all the command options have
+   been parsed.
+
+   On the RS/6000 this is used to define the target cpu type.  */
+
+#define OVERRIDE_OPTIONS rs6000_override_options ()
 
 #define OPTIMIZATION_OPTIONS(LEVEL)    \
 {                                      \
@@ -106,13 +182,6 @@ extern int target_flags;
       flag_omit_frame_pointer = 1;     \
     }                                  \
 }
-
-/* Define this to modify the options specified by the user.  */
-
-#define OVERRIDE_OPTIONS               \
-{                                      \
-   profile_block_flag = 0;             \
-}
 \f
 /* target machine storage layout */