OSDN Git Service

* defaults.h (ASM_OUTPUT_TYPE_DIRECTIVE, ASM_OUTPUT_SIZE_DIRECTIVE,
[pf3gnuchains/gcc-fork.git] / gcc / config / rs6000 / sysv4.h
index 8aee2e2..5db8487 100644 (file)
@@ -34,10 +34,6 @@ Boston, MA 02111-1307, USA.  */
 #undef ASM_DEFAULT_SPEC
 #define        ASM_DEFAULT_SPEC "-mppc"
 
-/* Override rs6000.h definition.  */
-#undef CPP_DEFAULT_SPEC
-#define        CPP_DEFAULT_SPEC "-D_ARCH_PPC"
-
 /* Small data support types.  */
 enum rs6000_sdata_type {
   SDATA_NONE,                  /* No small data support.  */
@@ -614,11 +610,7 @@ extern int rs6000_pic_labelno;
        putc ('\n', FILE);                                              \
       }                                                                        \
                                                                        \
-    fprintf (FILE, "%s", TYPE_ASM_OP);                                 \
-    assemble_name (FILE, NAME);                                                \
-    putc (',', FILE);                                                  \
-    fprintf (FILE, TYPE_OPERAND_FMT, "function");                      \
-    putc ('\n', FILE);                                                 \
+    ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function");                        \
     ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));                     \
                                                                        \
     if (DEFAULT_ABI == ABI_AIX)                                                \
@@ -719,11 +711,7 @@ do {                                                                       \
       ASM_OUTPUT_LABEL (FILE, NAME);                                   \
       ASM_OUTPUT_SKIP (FILE, SIZE);                                    \
       if (!flag_inhibit_size_directive && (SIZE) > 0)                  \
-       {                                                               \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                            \
-         assemble_name (FILE, NAME);                                   \
-         fprintf (FILE, ",%d\n",  SIZE);                               \
-       }                                                               \
+       ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, SIZE);                   \
     }                                                                  \
   else                                                                 \
     {                                                                  \
@@ -740,6 +728,34 @@ do {                                                                       \
   ASM_OUTPUT_ALIGNED_LOCAL (FILE, NAME, SIZE, ALIGN);                  \
 } while (0)
 
+/* This is how to output code to push a register on the stack.
+   It need not be very fast code.
+
+   On the rs6000, we must keep the backchain up to date.  In order
+   to simplify things, always allocate 16 bytes for a push (System V
+   wants to keep stack aligned to a 16 byte boundary).  */
+
+#define        ASM_OUTPUT_REG_PUSH(FILE, REGNO)                                \
+do {                                                                   \
+  if (DEFAULT_ABI == ABI_V4)                                           \
+    asm_fprintf (FILE,                                                 \
+                "\t{stu|stwu} %s,-16(%s)\n\t{st|stw} %s,12(%s)\n",     \
+                reg_names[1], reg_names[1], reg_names[REGNO],          \
+                reg_names[1]);                                         \
+} while (0)
+
+/* This is how to output an insn to pop a register from the stack.
+   It need not be very fast code.  */
+
+#define        ASM_OUTPUT_REG_POP(FILE, REGNO)                                 \
+do {                                                                   \
+  if (DEFAULT_ABI == ABI_V4)                                           \
+    asm_fprintf (FILE,                                                 \
+                "\t{l|lwz} %s,12(%s)\n\t{ai|addic} %s,%s,16\n",        \
+                reg_names[REGNO], reg_names[1], reg_names[1],          \
+                reg_names[1]);                                         \
+} while (0)
+
 /* Switch  Recognition by gcc.c.  Add -G xx support.  */
 
 /* Override svr4.h definition.  */
@@ -812,9 +828,19 @@ do {                                               \
 #define        TARGET_VERSION fprintf (stderr, " (PowerPC System V.4)");
 #endif
 \f
-#ifndef        CPP_PREDEFINES
-#define        CPP_PREDEFINES \
-  "-DPPC -Dunix -D__svr4__ -Asystem=unix -Asystem=svr4 -Acpu=powerpc -Amachine=powerpc"
+#ifndef        TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS()          \
+  do                                      \
+    {                                     \
+      builtin_define_std ("PPC");         \
+      builtin_define_std ("unix");        \
+      builtin_define ("__svr4__");        \
+      builtin_assert ("system=unix");     \
+      builtin_assert ("system=svr4");     \
+      builtin_assert ("cpu=powerpc");     \
+      builtin_assert ("machine=powerpc"); \
+    }                                     \
+  while (0)
 #endif
 
 /* Pass various options to the assembler.  */
@@ -969,55 +995,11 @@ do {                                              \
 #define CPP_SYSV_SPEC \
 "%{mrelocatable*: -D_RELOCATABLE} \
 %{fpic: -D__PIC__=1 -D__pic__=1} \
-%{!fpic: %{fPIC: -D__PIC__=2 -D__pic__=2}} \
-%{mlong-double-128: -D__LONG_DOUBLE_128__=1} \
-%{!mlong-double-64: %(cpp_longdouble_default)} \
-%{mcall-sysv: -D_CALL_SYSV} \
-%{mcall-aix: -D_CALL_AIX} %{mcall-aixdesc: -D_CALL_AIX -D_CALL_AIXDESC} \
-%{!mcall-sysv: %{!mcall-aix: %{!mcall-aixdesc: %(cpp_sysv_default) }}} \
-%{msoft-float: -D_SOFT_FLOAT} \
-%{!msoft-float: %{!mhard-float: \
-    %{mcpu=401: -D_SOFT_FLOAT} \
-    %{mcpu=403: -D_SOFT_FLOAT} \
-    %{mcpu=405: -D_SOFT_FLOAT} \
-    %{mcpu=ec603e: -D_SOFT_FLOAT} \
-    %{mcpu=801: -D_SOFT_FLOAT} \
-    %{mcpu=821: -D_SOFT_FLOAT} \
-    %{mcpu=823: -D_SOFT_FLOAT} \
-    %{mcpu=860: -D_SOFT_FLOAT} \
-    %{!mcpu*: %(cpp_float_default) }}}"
-
-/* Whether floating point is disabled by default.  */
-#define        CPP_FLOAT_DEFAULT_SPEC ""
-
-/* Whether 'long double' is 128 bits by default.  */
-#define        CPP_LONGDOUBLE_DEFAULT_SPEC ""
-
-#define        CPP_SYSV_DEFAULT_SPEC "-D_CALL_SYSV"
-
-#define CPP_ENDIAN_BIG_SPEC "-D_BIG_ENDIAN -D__BIG_ENDIAN__ -Amachine=bigendian"
-
-#define CPP_ENDIAN_LITTLE_SPEC "-D_LITTLE_ENDIAN -D__LITTLE_ENDIAN__ -Amachine=littleendian"
-
-#define        CPP_ENDIAN_SPEC \
-"%{mlittle: %(cpp_endian_little) } \
-%{mlittle-endian: %(cpp_endian_little) } \
-%{mbig: %(cpp_endian_big) } \
-%{mbig-endian: %(cpp_endian_big) } \
-%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \
-    %{mcall-freebsd: %(cpp_endian_big) } \
-    %{mcall-linux: %(cpp_endian_big) } \
-    %{mcall-gnu: %(cpp_endian_big) } \
-    %{mcall-netbsd: %(cpp_endian_big) } \
-    %{mcall-i960-old: %(cpp_endian_little) } \
-    %{mcall-aixdesc:  %(cpp_endian_big) } \
-    %{!mcall-linux: %{!mcall-gnu: %{!mcall-freebsd: %{!mcall-netbsd: %{!mcall-aixdesc: %(cpp_endian_default) }}}}}}}}}"
-
-#define        CPP_ENDIAN_DEFAULT_SPEC "%(cpp_endian_big)"
+%{!fpic: %{fPIC: -D__PIC__=2 -D__pic__=2}}"
 
 /* Override rs6000.h definition.  */
 #undef CPP_SPEC
-#define        CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_sysv) %(cpp_endian) %(cpp_cpu) \
+#define        CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_sysv) \
 %{mads: %(cpp_os_ads) } \
 %{myellowknife: %(cpp_os_yellowknife) } \
 %{mmvme: %(cpp_os_mvme) } \
@@ -1323,9 +1305,6 @@ ncrtn.o%s"
 #undef SUBTARGET_EXTRA_SPECS
 #define        SUBTARGET_EXTRA_SPECS                                           \
   { "cpp_sysv",                        CPP_SYSV_SPEC },                        \
-  { "cpp_sysv_default",                CPP_SYSV_DEFAULT_SPEC },                \
-  { "cpp_endian_default",      CPP_ENDIAN_DEFAULT_SPEC },              \
-  { "cpp_endian",              CPP_ENDIAN_SPEC },                      \
   { "crtsavres_default",        CRTSAVRES_DEFAULT_SPEC },              \
   { "lib_ads",                 LIB_ADS_SPEC },                         \
   { "lib_yellowknife",         LIB_YELLOWKNIFE_SPEC },                 \
@@ -1390,10 +1369,6 @@ ncrtn.o%s"
   { "cc1_endian_big",          CC1_ENDIAN_BIG_SPEC },                  \
   { "cc1_endian_little",       CC1_ENDIAN_LITTLE_SPEC },               \
   { "cc1_endian_default",      CC1_ENDIAN_DEFAULT_SPEC },              \
-  { "cpp_endian_big",          CPP_ENDIAN_BIG_SPEC },                  \
-  { "cpp_endian_little",       CPP_ENDIAN_LITTLE_SPEC },               \
-  { "cpp_float_default",       CPP_FLOAT_DEFAULT_SPEC },               \
-  { "cpp_longdouble_default",  CPP_LONGDOUBLE_DEFAULT_SPEC },          \
   { "cpp_os_ads",              CPP_OS_ADS_SPEC },                      \
   { "cpp_os_yellowknife",      CPP_OS_YELLOWKNIFE_SPEC },              \
   { "cpp_os_mvme",             CPP_OS_MVME_SPEC },                     \