OSDN Git Service

(MOD[SD]I_LIBCALL): Call ots$rem, not ots$mod.
[pf3gnuchains/gcc-fork.git] / gcc / config / alpha / vms.h
index 30918aa..59ac57b 100644 (file)
@@ -1,5 +1,5 @@
 /* Output variables, constants and external declarations, for GNU compiler.
 /* Output variables, constants and external declarations, for GNU compiler.
-   Copyright (C) 1996 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
 
 This file is part of GNU CC.
 
@@ -65,11 +65,10 @@ Boston, MA 02111-1307, USA.  */
 /* By default, allow $ to be part of an identifier.  */
 #define DOLLARS_IN_IDENTIFIERS 2
 
 /* By default, allow $ to be part of an identifier.  */
 #define DOLLARS_IN_IDENTIFIERS 2
 
-/* no-soft-float, fp-regs, gas, open_vms, float-ieee  */
 #undef TARGET_DEFAULT
 #undef TARGET_DEFAULT
-#define TARGET_DEFAULT 263
+#define TARGET_DEFAULT (MASK_FP|MASK_FPREGS|MASK_GAS|MASK_OPEN_VMS)
 #undef TARGET_NAME   
 #undef TARGET_NAME   
-#define TARGET_NAME "openVMS/Alpha"
+#define TARGET_NAME "OpenVMS/Alpha"
 #undef TARGET_VERSION
 #define TARGET_VERSION fprintf (stderr, " (%s)", TARGET_NAME);           
 
 #undef TARGET_VERSION
 #define TARGET_VERSION fprintf (stderr, " (%s)", TARGET_NAME);           
 
@@ -156,39 +155,40 @@ do {                                                              \
          = vmskrunch (XSTR (XEXP (DECL_RTL (DECL), 0), 0));    \
 } while (0)
 
          = vmskrunch (XSTR (XEXP (DECL_RTL (DECL), 0), 0));    \
 } while (0)
 
-/* Don't use BLKmode if VAX floats are used.  */
+/* Perform any needed actions needed for a function that is receiving a
+   variable number of arguments. 
+
+   CUM is as for INIT_CUMULATIVE_ARGS.
+
+   MODE and TYPE are the mode and type of the current parameter.
+
+   PRETEND_SIZE is a variable that should be set to the amount of stack
+   that must be pushed by the prolog to pretend that our caller pushed
+   it.
+
+   Normally, this macro will push all remaining incoming registers on the
+   stack and set PRETEND_SIZE to the length of the registers pushed. 
+
+   For VMS, we allocate space for all 6 arg registers plus a count.
+
+   However, if NO registers need to be saved, don't allocate any space.
+   This is not only because we won't need the space, but because AP includes
+   the current_pretend_args_size and we don't want to mess up any
+   ap-relative addresses already made.   */
+
 #undef SETUP_INCOMING_VARARGS
 #define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL)      \
 #undef SETUP_INCOMING_VARARGS
 #define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL)      \
-{ if ((CUM & 0xff) < 6)                                                        \
-    {                                                                  \
-      if (! (NO_RTL))                                                  \
-       {                                                               \
-         move_block_from_reg                                           \
-           (16 + (CUM & 0xff),                                         \
-            gen_rtx (MEM, BLKmode,                                     \
-                     plus_constant (virtual_incoming_args_rtx,         \
-                                    ((CUM & 0xff) + 6)* UNITS_PER_WORD)),\
-            6 - (CUM & 0xff), (6 - (CUM & 0xff)) * UNITS_PER_WORD);    \
-         if (!TARGET_FLOAT_VAX || !TARGET_FPREGS)                      \
-           move_block_from_reg                                         \
-             (16 + (TARGET_FPREGS ? 32 : 0) + (CUM & 0xff),            \
-               gen_rtx (MEM, BLKmode,                                  \
-                        plus_constant (virtual_incoming_args_rtx,      \
-                                       (CUM & 0xff) * UNITS_PER_WORD)),\
-               6 - (CUM & 0xff), (6 - (CUM & 0xff)) * UNITS_PER_WORD); \
-         else                                                          \
-           {                                                           \
-             int i;                                                    \
-             for (i = (CUM & 0xff); i < 6; i++)                        \
-               emit_move_insn (                                        \
-                 gen_rtx (MEM, DFmode,                                 \
-                   plus_constant (virtual_incoming_args_rtx,           \
-                                  i * UNITS_PER_WORD)),                \
-                 gen_rtx (REG, DFmode, 48+i));                         \
-           }                                                           \
-        }                                                              \
-      PRETEND_SIZE = 12 * UNITS_PER_WORD;                              \
-    }                                                                  \
+{ if ((CUM) < 6)                                       \
+    {                                                  \
+      if (! (NO_RTL))                                  \
+       {                                               \
+         emit_move_insn (gen_rtx (REG, DImode, 1),     \
+                         virtual_incoming_args_rtx);   \
+         emit_insn (gen_arg_home ());                  \
+       }                                               \
+                                                       \
+      PRETEND_SIZE = 7 * UNITS_PER_WORD;               \
+    }                                                  \
 }
 
 #undef ASM_DECLARE_FUNCTION_NAME
 }
 
 #undef ASM_DECLARE_FUNCTION_NAME
@@ -278,42 +278,6 @@ void *function_arg ();
 { ASM_OUTPUT_ALIGN (FILE, 3); ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); }
 
 #define NO_MD_PROTOTYPES
 { ASM_OUTPUT_ALIGN (FILE, 3); ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); }
 
 #define NO_MD_PROTOTYPES
-/* Perform any needed actions needed for a function that is receiving a
-   variable number of arguments. 
-
-   CUM is as above.
-
-   MODE and TYPE are the mode and type of the current parameter.
-
-   PRETEND_SIZE is a variable that should be set to the amount of stack
-   that must be pushed by the prolog to pretend that our caller pushed
-   it.
-
-   Normally, this macro will push all remaining incoming registers on the
-   stack and set PRETEND_SIZE to the length of the registers pushed. 
-
-   For VMS, we allocate space for all 6 arg registers plus a count.
-
-   However, if NO registers need to be saved, don't allocate any space.
-   This is not only because we won't need the space, but because AP includes
-   the current_pretend_args_size and we don't want to mess up any
-   ap-relative addresses already made.   */
-   
-
-#undef SETUP_INCOMING_VARARGS
-#define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL)      \
-{ if ((CUM) < 6)                                       \
-    {                                                  \
-      if (! (NO_RTL))                                  \
-       {                                               \
-         emit_move_insn (gen_rtx (REG, DImode, 1),     \
-                         virtual_incoming_args_rtx);   \
-         emit_insn (gen_arg_home ());                  \
-       }                                               \
-                                                       \
-      PRETEND_SIZE = 7 * UNITS_PER_WORD;               \
-    }                                                  \
-}
 \f
 /* Output assembler code for a block containing the constant parts
    of a trampoline, leaving space for the variable parts.
 \f
 /* Output assembler code for a block containing the constant parts
    of a trampoline, leaving space for the variable parts.
@@ -400,14 +364,14 @@ void *function_arg ();
 #define STARTFILE_SPEC ""
 
 #undef ENDFILE_SPEC
 #define STARTFILE_SPEC ""
 
 #undef ENDFILE_SPEC
-#define ENDFILE_SPEC "gnu_cc:[000000]crt0.obj"
+#define ENDFILE_SPEC "gnu:[000000]crt0.obj"
 
 /* Define the names of the division and modulus functions.  */
 #define DIVSI3_LIBCALL "ots$div_i"
 #define DIVDI3_LIBCALL "ots$div_l"
 #define UDIVSI3_LIBCALL "ots$div_ui"
 #define UDIVDI3_LIBCALL "ots$div_ul"
 
 /* Define the names of the division and modulus functions.  */
 #define DIVSI3_LIBCALL "ots$div_i"
 #define DIVDI3_LIBCALL "ots$div_l"
 #define UDIVSI3_LIBCALL "ots$div_ui"
 #define UDIVDI3_LIBCALL "ots$div_ul"
-#define MODSI3_LIBCALL "ots$mod_i"
-#define MODDI3_LIBCALL "ots$mod_l"
+#define MODSI3_LIBCALL "ots$rem_i"
+#define MODDI3_LIBCALL "ots$rem_l"
 #define UMODSI3_LIBCALL "ots$rem_ui"
 #define UMODDI3_LIBCALL "ots$rem_ul"
 #define UMODSI3_LIBCALL "ots$rem_ui"
 #define UMODDI3_LIBCALL "ots$rem_ul"