OSDN Git Service

* target.h (struct gcc_target): Add calls.pass_by_reference.
[pf3gnuchains/gcc-fork.git] / gcc / config / c4x / c4x.h
index 8ee98a4..ff2e634 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions of target machine for GNU compiler.  TMS320C[34]x
    Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-   2003 Free Software Foundation, Inc.
+   2003, 2004 Free Software Foundation, Inc.
 
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
               and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl).
@@ -306,11 +306,14 @@ extern int target_flags;
 #define TARGET_C40             (target_flags & C40_FLAG)
 #define TARGET_C44             (target_flags & C44_FLAG)
 
-/* Define some options to control code generation.  */
+/* Nonzero to use load_immed_addr pattern rather than forcing memory
+   addresses into memory.  */
 #define TARGET_LOAD_ADDRESS    (1 || (! TARGET_C3X && ! TARGET_SMALL))
+
 /* Nonzero to convert direct memory references into HIGH/LO_SUM pairs
    during RTL generation.  */
 #define TARGET_EXPOSE_LDP      0
+
 /* Nonzero to force loading of direct memory references into a register.  */
 #define TARGET_LOAD_DIRECT_MEMS        0
 
@@ -320,8 +323,6 @@ extern int target_flags;
 
 #define TARGET_RPTS_CYCLES(CYCLES) (TARGET_RPTS || (CYCLES) < c4x_rpts_cycles)
 
-#define        BCT_CHECK_LOOP_ITERATIONS  !(TARGET_LOOP_UNSIGNED)
-
 /* -mcpu=XX    with XX = target DSP version number.  */
 
 extern const char *c4x_rpts_cycles_string, *c4x_cpu_version_string;
@@ -1113,7 +1114,7 @@ typedef struct c4x_args
 }
 CUMULATIVE_ARGS;
 
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)      \
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
   (c4x_init_cumulative_args (&CUM, FNTYPE, LIBNAME))
 
 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)   \
@@ -1129,10 +1130,6 @@ CUMULATIVE_ARGS;
 
 #define CALLER_SAVE_PROFITABLE(REFS,CALLS) 0
 
-/* Never pass data by reference.  */
-
-#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) 0
-
 #define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) 0
 
 /* 1 if N is a possible register number for function argument passing.  */
@@ -1150,22 +1147,16 @@ CUMULATIVE_ARGS;
 /* How Scalar Function Values Are Returned.  */
 
 #define FUNCTION_VALUE(VALTYPE, FUNC) \
-       gen_rtx(REG, TYPE_MODE(VALTYPE), R0_REGNO)      /* Return in R0.  */
+       gen_rtx_REG (TYPE_MODE(VALTYPE), R0_REGNO)      /* Return in R0.  */
 
 #define LIBCALL_VALUE(MODE) \
-       gen_rtx(REG, MODE, R0_REGNO)    /* Return in R0.  */
+       gen_rtx_REG (MODE, R0_REGNO)    /* Return in R0.  */
 
 #define FUNCTION_VALUE_REGNO_P(REGNO) ((REGNO) == R0_REGNO)
 
 /* How Large Values Are Returned.  */
 
 #define DEFAULT_PCC_STRUCT_RETURN      0
-#define STRUCT_VALUE_REGNUM            AR0_REGNO       /* AR0.  */
-
-/* Varargs handling.  */
-
-#define EXPAND_BUILTIN_VA_ARG(valist, type) \
-  c4x_va_arg (valist, type)
 
 /* Generating Code for Profiling.  */
 
@@ -1193,10 +1184,6 @@ CUMULATIVE_ARGS;
        fprintf (FILE, "\tpop\tar2\n");                         \
      }
 
-/* Implicit Calls to Library Routines.  */
-
-#define TARGET_MEM_FUNCTIONS
-
 /* CC_NOOVmode should be used when the first operand is a PLUS, MINUS, NEG
    or MULT.
    CCmode should be used when no special processing is needed.  */
@@ -1284,6 +1271,7 @@ CUMULATIVE_ARGS;
 #define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \
 {                                                                      \
   rtx new;                                                             \
+                                                                       \
   new = c4x_legitimize_address (X, MODE);                              \
   if (new != NULL_RTX)                                                 \
   {                                                                    \
@@ -1489,13 +1477,6 @@ fini_section ()                                                  \
 #define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
 c4x_external_ref (NAME)
 
-/* A C statement to output on FILE an assembler pseudo-op to
-   declare a library function named external.
-   (Only needed to keep asm30 happy for ___divqf3 etc.)  */
-
-#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
-c4x_external_ref (XSTR (FUN, 0))
-
 /* The prefix to add to user-visible assembler symbols.  */
 
 #define USER_LABEL_PREFIX "_"
@@ -1783,33 +1764,33 @@ do { fprintf (asm_out_file, "\t.sdef\t");               \
       tmp2 = expand_shift (LSHIFT_EXPR, QImode,                                \
                           GEN_INT (0x5069), size_int (16), 0, 1);      \
       emit_insn (gen_iorqi3 (tmp1, tmp1, tmp2));                       \
-      emit_move_insn (gen_rtx (MEM, QImode,                            \
-                              plus_constant (tramp, 0)), tmp1);        \
+      emit_move_insn (gen_rtx_MEM (QImode,                             \
+                              plus_constant (TRAMP, 0)), tmp1);        \
       tmp1 = expand_and (QImode, FNADDR, GEN_INT (0xffff), 0);         \
       tmp2 = expand_shift (LSHIFT_EXPR, QImode,                                \
                           GEN_INT (0x1069), size_int (16), 0, 1);      \
       emit_insn (gen_iorqi3 (tmp1, tmp1, tmp2));                       \
-      emit_move_insn (gen_rtx (MEM, QImode,                            \
-                              plus_constant (tramp, 2)), tmp1);        \
+      emit_move_insn (gen_rtx_MEM (QImode,                             \
+                              plus_constant (TRAMP, 2)), tmp1);        \
       tmp1 = expand_shift (RSHIFT_EXPR, QImode, CXT,                   \
                           size_int (16), 0, 1);                        \
       tmp2 = expand_shift (LSHIFT_EXPR, QImode,                                \
                           GEN_INT (0x5068), size_int (16), 0, 1);      \
       emit_insn (gen_iorqi3 (tmp1, tmp1, tmp2));                       \
-      emit_move_insn (gen_rtx (MEM, QImode,                            \
-                              plus_constant (tramp, 3)), tmp1);        \
+      emit_move_insn (gen_rtx_MEM (QImode,                             \
+                              plus_constant (TRAMP, 3)), tmp1);        \
       tmp1 = expand_and (QImode, CXT, GEN_INT (0xffff), 0);            \
       tmp2 = expand_shift (LSHIFT_EXPR, QImode,                                \
                           GEN_INT (0x1068), size_int (16), 0, 1);      \
       emit_insn (gen_iorqi3 (tmp1, tmp1, tmp2));                       \
-      emit_move_insn (gen_rtx (MEM, QImode,                            \
-                              plus_constant (tramp, 6)), tmp1);        \
+      emit_move_insn (gen_rtx_MEM (QImode,                             \
+                              plus_constant (TRAMP, 6)), tmp1);        \
     }                                                                  \
   else                                                                 \
     {                                                                  \
-      emit_move_insn (gen_rtx (MEM, QImode,                            \
+      emit_move_insn (gen_rtx_MEM (QImode,                             \
                               plus_constant (TRAMP, 8)), FNADDR);      \
-      emit_move_insn (gen_rtx (MEM, QImode,                            \
+      emit_move_insn (gen_rtx_MEM (QImode,                             \
                               plus_constant (TRAMP, 9)), CXT);         \
     }                                                                  \
 }
@@ -1918,3 +1899,8 @@ enum c4x_builtins
   C4X_BUILTIN_FRIEEE,  /*      frieee     (only C4x)   */
   C4X_BUILTIN_RCPF     /*      fast_invf  (only C4x)   */
 };
+
+
+/* Hack to overcome use of libgcc2.c using auto-host.h to determine
+   HAVE_GAS_HIDDEN.  */
+#undef HAVE_GAS_HIDDEN