OSDN Git Service

Merge branch 'trunk' of git://gcc.gnu.org/git/gcc into rework
[pf3gnuchains/gcc-fork.git] / gcc / config / rs6000 / rs6000.h
index 43feb27..b3465b7 100644 (file)
 /* Note that some other tm.h files include this one and then override
    many of the definitions.  */
 
+#ifndef RS6000_OPTS_H
+#include "config/rs6000/rs6000-opts.h"
+#endif
+
 /* Definitions for the object file format.  These are set at
    compile-time.  */
 
@@ -299,16 +303,6 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
 #define TARGET_SECURE_PLT 0
 #endif
 
-/* Code model for 64-bit linux.
-   small: 16-bit toc offsets.
-   medium: 32-bit toc offsets, static data and code within 2G of TOC pointer.
-   large: 32-bit toc offsets, no limit on static data and code.  */
-enum rs6000_cmodel {
-  CMODEL_SMALL,
-  CMODEL_MEDIUM,
-  CMODEL_LARGE
-};
-
 #ifndef TARGET_CMODEL
 #define TARGET_CMODEL CMODEL_SMALL
 #endif
@@ -338,40 +332,6 @@ enum rs6000_cmodel {
 
 #define TARGET_DEFAULT (MASK_POWER | MASK_MULTIPLE | MASK_STRING)
 
-/* Processor type.  Order must match cpu attribute in MD file.  */
-enum processor_type
- {
-   PROCESSOR_RIOS1,
-   PROCESSOR_RIOS2,
-   PROCESSOR_RS64A,
-   PROCESSOR_MPCCORE,
-   PROCESSOR_PPC403,
-   PROCESSOR_PPC405,
-   PROCESSOR_PPC440,
-   PROCESSOR_PPC476,
-   PROCESSOR_PPC601,
-   PROCESSOR_PPC603,
-   PROCESSOR_PPC604,
-   PROCESSOR_PPC604e,
-   PROCESSOR_PPC620,
-   PROCESSOR_PPC630,
-   PROCESSOR_PPC750,
-   PROCESSOR_PPC7400,
-   PROCESSOR_PPC7450,
-   PROCESSOR_PPC8540,
-   PROCESSOR_PPCE300C2,
-   PROCESSOR_PPCE300C3,
-   PROCESSOR_PPCE500MC,
-   PROCESSOR_PPCE500MC64,
-   PROCESSOR_POWER4,
-   PROCESSOR_POWER5,
-   PROCESSOR_POWER6,
-   PROCESSOR_POWER7,
-   PROCESSOR_CELL,
-   PROCESSOR_PPCA2,
-   PROCESSOR_TITAN
-};
-
 /* FPU operations supported. 
    Each use of TARGET_SINGLE_FLOAT or TARGET_DOUBLE_FLOAT must 
    also test TARGET_HARD_FLOAT.  */
@@ -381,8 +341,6 @@ enum processor_type
 #define TARGET_SIMPLE_FPU   0
 #define TARGET_XILINX_FPU   0
 
-extern enum processor_type rs6000_cpu;
-
 /* Recast the processor type to the cpu attribute.  */
 #define rs6000_cpu_attr ((enum attr_cpu)rs6000_cpu)
 
@@ -396,47 +354,12 @@ extern enum processor_type rs6000_cpu;
 #define PROCESSOR_DEFAULT   PROCESSOR_RIOS1
 #define PROCESSOR_DEFAULT64 PROCESSOR_RS64A
 
-/* FP processor type.  */
-enum fpu_type_t
-{
-       FPU_NONE,               /* No FPU */
-       FPU_SF_LITE,            /* Limited Single Precision FPU */
-       FPU_DF_LITE,            /* Limited Double Precision FPU */
-       FPU_SF_FULL,            /* Full Single Precision FPU */
-       FPU_DF_FULL             /* Full Double Single Precision FPU */
-};
-
 extern enum fpu_type_t fpu_type;
 
 /* Specify the dialect of assembler to use.  New mnemonics is dialect one
    and the old mnemonics are dialect zero.  */
 #define ASSEMBLER_DIALECT (TARGET_NEW_MNEMONICS ? 1 : 0)
 
-/* Types of costly dependences.  */
-enum rs6000_dependence_cost
- {
-   max_dep_latency = 1000,
-   no_dep_costly,
-   all_deps_costly,
-   true_store_to_load_dep_costly,
-   store_to_load_dep_costly
- };
-
-/* Types of nop insertion schemes in sched target hook sched_finish.  */
-enum rs6000_nop_insertion
-  {
-    sched_finish_regroup_exact = 1000,
-    sched_finish_pad_groups,
-    sched_finish_none
-  };
-
-/* Dispatch group termination caused by an insn.  */
-enum group_termination
-  {
-    current_group,
-    previous_group
-  };
-
 /* rs6000_select[0] is reserved for the default cpu defined via --with-cpu */
 struct rs6000_cpu_select
 {
@@ -449,42 +372,25 @@ struct rs6000_cpu_select
 extern struct rs6000_cpu_select rs6000_select[];
 
 /* Debug support */
-extern const char *rs6000_debug_name;  /* Name for -mdebug-xxxx option */
-extern int rs6000_debug_stack;         /* debug stack applications */
-extern int rs6000_debug_arg;           /* debug argument handling */
-extern int rs6000_debug_reg;           /* debug register handling */
-extern int rs6000_debug_addr;          /* debug memory addressing */
-extern int rs6000_debug_cost;          /* debug rtx_costs */
-
-#define        TARGET_DEBUG_STACK      rs6000_debug_stack
-#define        TARGET_DEBUG_ARG        rs6000_debug_arg
-#define TARGET_DEBUG_REG       rs6000_debug_reg
-#define TARGET_DEBUG_ADDR      rs6000_debug_addr
-#define TARGET_DEBUG_COST      rs6000_debug_cost
-
-extern const char *rs6000_traceback_name; /* Type of traceback table.  */
-
-/* These are separate from target_flags because we've run out of bits
-   there.  */
-extern int rs6000_long_double_type_size;
-extern int rs6000_ieeequad;
-extern int rs6000_altivec_abi;
-extern int rs6000_spe_abi;
-extern int rs6000_spe;
-extern int rs6000_float_gprs;
-extern int rs6000_alignment_flags;
-extern const char *rs6000_sched_insert_nops_str;
-extern enum rs6000_nop_insertion rs6000_sched_insert_nops;
-
-/* Describe which vector unit to use for a given machine mode.  */
-enum rs6000_vector {
-  VECTOR_NONE,                 /* Type is not  a vector or not supported */
-  VECTOR_ALTIVEC,              /* Use altivec for vector processing */
-  VECTOR_VSX,                  /* Use VSX for vector processing */
-  VECTOR_PAIRED,               /* Use paired floating point for vectors */
-  VECTOR_SPE,                  /* Use SPE for vector processing */
-  VECTOR_OTHER                 /* Some other vector unit */
-};
+#define MASK_DEBUG_STACK       0x01    /* debug stack applications */
+#define        MASK_DEBUG_ARG          0x02    /* debug argument handling */
+#define MASK_DEBUG_REG         0x04    /* debug register handling */
+#define MASK_DEBUG_ADDR                0x08    /* debug memory addressing */
+#define MASK_DEBUG_COST                0x10    /* debug rtx codes */
+#define MASK_DEBUG_TARGET      0x20    /* debug target attribute/pragma */
+#define MASK_DEBUG_ALL         (MASK_DEBUG_STACK \
+                                | MASK_DEBUG_ARG \
+                                | MASK_DEBUG_REG \
+                                | MASK_DEBUG_ADDR \
+                                | MASK_DEBUG_COST \
+                                | MASK_DEBUG_TARGET)
+
+#define        TARGET_DEBUG_STACK      (rs6000_debug & MASK_DEBUG_STACK)
+#define        TARGET_DEBUG_ARG        (rs6000_debug & MASK_DEBUG_ARG)
+#define TARGET_DEBUG_REG       (rs6000_debug & MASK_DEBUG_REG)
+#define TARGET_DEBUG_ADDR      (rs6000_debug & MASK_DEBUG_ADDR)
+#define TARGET_DEBUG_COST      (rs6000_debug & MASK_DEBUG_COST)
+#define TARGET_DEBUG_TARGET    (rs6000_debug & MASK_DEBUG_TARGET)
 
 extern enum rs6000_vector rs6000_vector_unit[];
 
@@ -628,6 +534,7 @@ extern unsigned char rs6000_recip_bits[];
 /* Target pragma.  */
 #define REGISTER_TARGET_PRAGMAS() do {                         \
   c_register_pragma (0, "longcall", rs6000_pragma_longcall);   \
+  targetm.target_option.pragma_parse = rs6000_pragma_target_parse; \
   targetm.resolve_overloaded_builtin = altivec_resolve_overloaded_builtin; \
 } while (0)
 
@@ -1195,11 +1102,6 @@ extern unsigned rs6000_pointer_size;
 
 #define FIXED_SCRATCH 0
 
-/* Define this macro to change register usage conditional on target
-   flags.  */
-
-#define CONDITIONAL_REGISTER_USAGE rs6000_conditional_register_usage ()
-
 /* Specify the registers used for certain standard purposes.
    The values of these macros are register numbers.  */
 
@@ -1465,16 +1367,6 @@ extern enum reg_class rs6000_constraints[RS6000_CONSTRAINT_MAX];
 
 /* Stack layout; function entry, exit and calling.  */
 
-/* Enumeration to give which calling sequence to use.  */
-enum rs6000_abi {
-  ABI_NONE,
-  ABI_AIX,                     /* IBM's AIX */
-  ABI_V4,                      /* System V.4/eabi */
-  ABI_DARWIN                   /* Apple's Darwin (OS X kernel) */
-};
-
-extern enum rs6000_abi rs6000_current_abi;     /* available for use by subtarget */
-
 /* Define this if pushing a word on the stack
    makes the stack pointer a smaller address.  */
 #define STACK_GROWS_DOWNWARD