OSDN Git Service

* defaults.h (ASM_OUTPUT_TYPE_DIRECTIVE, ASM_OUTPUT_SIZE_DIRECTIVE,
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 25 Jul 2002 05:14:23 +0000 (05:14 +0000)
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 25 Jul 2002 05:14:23 +0000 (05:14 +0000)
ASM_OUTPUT_MEASURED_SIZE): New default definitions of new macros.
* doc/tm.texi: Document them.  Also document SIZE_ASM_OP,
TYPE_ASM_OP, and TYPE_OPERAND_FMT.

* config/elfos.h, config/netbsd-aout.h, config/openbsd.h,
config/alpha/elf.h, config/arm/elf.h, config/avr/avr.h,
config/cris/aout.h, config/i386/freebsd-aout.h,
config/i386/sco5.h, config/ia64/ia64.c, config/ip2k/ip2k.h,
config/m68k/m68kelf.h, config/m68k/m68kv4.h, config/m88k/m88k.h,
config/mcore/mcore-elf.h, config/mips/elf.h, config/mips/elf64.h,
config/mips/iris6.h, config/mips/linux.h, config/pa/pa-linux.h,
config/pa/pa64-hpux.h, config/rs6000/sysv4.h,
config/xtensa/elf.h, config/xtensa/linux.h:
Use the new macros.
Where possible, remove redundant definitions of SIZE_ASM_OP,
TYPE_ASM_OP, and TYPE_OPERAND_FMT.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55735 138bc75d-0d04-0410-961f-82ee72b054a4

27 files changed:
gcc/ChangeLog
gcc/config/alpha/elf.h
gcc/config/arm/elf.h
gcc/config/avr/avr.h
gcc/config/cris/aout.h
gcc/config/elfos.h
gcc/config/i386/freebsd-aout.h
gcc/config/i386/sco5.h
gcc/config/ia64/ia64.c
gcc/config/ip2k/ip2k.h
gcc/config/m68k/m68kelf.h
gcc/config/m68k/m68kv4.h
gcc/config/m88k/m88k.h
gcc/config/mcore/mcore-elf.h
gcc/config/mips/elf.h
gcc/config/mips/elf64.h
gcc/config/mips/iris6.h
gcc/config/mips/linux.h
gcc/config/netbsd-aout.h
gcc/config/openbsd.h
gcc/config/pa/pa-linux.h
gcc/config/pa/pa64-hpux.h
gcc/config/rs6000/sysv4.h
gcc/config/xtensa/elf.h
gcc/config/xtensa/linux.h
gcc/defaults.h
gcc/doc/tm.texi

index 4e37e14..2562899 100644 (file)
@@ -1,3 +1,23 @@
+2002-07-24  Zack Weinberg  <zack@codesourcery.com>
+
+       * defaults.h (ASM_OUTPUT_TYPE_DIRECTIVE, ASM_OUTPUT_SIZE_DIRECTIVE,
+       ASM_OUTPUT_MEASURED_SIZE): New default definitions of new macros.
+       * doc/tm.texi: Document them.  Also document SIZE_ASM_OP,
+       TYPE_ASM_OP, and TYPE_OPERAND_FMT.
+
+       * config/elfos.h, config/netbsd-aout.h, config/openbsd.h,
+       config/alpha/elf.h, config/arm/elf.h, config/avr/avr.h,
+       config/cris/aout.h, config/i386/freebsd-aout.h,
+       config/i386/sco5.h, config/ia64/ia64.c, config/ip2k/ip2k.h,
+       config/m68k/m68kelf.h, config/m68k/m68kv4.h, config/m88k/m88k.h,
+       config/mcore/mcore-elf.h, config/mips/elf.h, config/mips/elf64.h,
+       config/mips/iris6.h, config/mips/linux.h, config/pa/pa-linux.h,
+       config/pa/pa64-hpux.h, config/rs6000/sysv4.h,
+       config/xtensa/elf.h, config/xtensa/linux.h:
+       Use the new macros.
+       Where possible, remove redundant definitions of SIZE_ASM_OP,
+       TYPE_ASM_OP, and TYPE_OPERAND_FMT.
+
 2002-07-24  Aldy Hernandez  <aldyh@redhat.com>
 
        * config/rs6000/eabi.h: Define TARGET_SPE_ABI, TARGET_SPE,
index 180fbcb..15018aa 100644 (file)
@@ -142,17 +142,9 @@ do {                                                                       \
     sbss_section();                                                    \
   else                                                                 \
     bss_section();                                                     \
-  fprintf (FILE, "%s", TYPE_ASM_OP);                                   \
-  assemble_name (FILE, NAME);                                          \
-  putc (',', FILE);                                                    \
-  fprintf (FILE, TYPE_OPERAND_FMT, "object");                          \
-  putc ('\n', FILE);                                                   \
+  ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                    \
   if (!flag_inhibit_size_directive)                                    \
-    {                                                                  \
-      fprintf (FILE, "%s", SIZE_ASM_OP);                               \
-      assemble_name (FILE, NAME);                                      \
-      fprintf (FILE, ",%d\n", (SIZE));                                 \
-    }                                                                  \
+    ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, SIZE);                      \
   ASM_OUTPUT_ALIGN ((FILE), exact_log2((ALIGN) / BITS_PER_UNIT));      \
   ASM_OUTPUT_LABEL(FILE, NAME);                                                \
   ASM_OUTPUT_SKIP((FILE), (SIZE) ? (SIZE) : 1);                                \
@@ -331,22 +323,14 @@ void FN ()                                        \
 #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)              \
   do {                                                         \
     HOST_WIDE_INT size;                                                \
-    fprintf (FILE, "%s", TYPE_ASM_OP);                         \
-    assemble_name (FILE, NAME);                                        \
-    putc (',', FILE);                                          \
-    fprintf (FILE, TYPE_OPERAND_FMT, "object");                        \
-    putc ('\n', FILE);                                         \
+    ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");          \
     size_directive_output = 0;                                 \
     if (!flag_inhibit_size_directive                           \
        && DECL_SIZE (DECL)                                     \
        && (size = int_size_in_bytes (TREE_TYPE (DECL))) > 0)   \
       {                                                                \
        size_directive_output = 1;                              \
-       fprintf (FILE, "%s", SIZE_ASM_OP);                      \
-       assemble_name (FILE, NAME);                             \
-       fputc (',', FILE);                                      \
-       fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, size);          \
-       fputc ('\n', FILE);                                     \
+        ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);          \
       }                                                                \
     ASM_OUTPUT_LABEL(FILE, NAME);                              \
   } while (0)
@@ -370,11 +354,7 @@ void FN ()                                 \
        && (size = int_size_in_bytes (TREE_TYPE (DECL))) > 0)           \
       {                                                                        \
        size_directive_output = 1;                                      \
-       fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-       assemble_name (FILE, name);                                     \
-       fputc (',', FILE);                                              \
-       fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, size);                  \
-       fputc ('\n', FILE);                                             \
+       ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);                   \
       }                                                                        \
   } while (0)
 
index 003ab2c..6b3da48 100644 (file)
@@ -62,18 +62,14 @@ Boston, MA 02111-1307, USA.  */
 
 /* We might need a ARM specific header to function declarations.  */
 #undef  ASM_DECLARE_FUNCTION_NAME
-#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)    \
-  do                                                   \
-    {                                                  \
-      ARM_DECLARE_FUNCTION_NAME (FILE, NAME, DECL);     \
-      fprintf (FILE, "%s", TYPE_ASM_OP);               \
-      assemble_name (FILE, NAME);                      \
-      putc (',', FILE);                                        \
-      fprintf (FILE, TYPE_OPERAND_FMT, "function");    \
-      putc ('\n', FILE);                               \
-      ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));   \
-      ASM_OUTPUT_LABEL(FILE, NAME);                    \
-    }                                                  \
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)            \
+  do                                                           \
+    {                                                          \
+      ARM_DECLARE_FUNCTION_NAME (FILE, NAME, DECL);            \
+      ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function");      \
+      ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));           \
+      ASM_OUTPUT_LABEL(FILE, NAME);                            \
+    }                                                          \
   while (0)
 
 /* We might need an ARM specific trailer for function declarations.  */
@@ -89,13 +85,7 @@ Boston, MA 02111-1307, USA.  */
          labelno ++;                                           \
          ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);  \
          ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);     \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                    \
-         assemble_name (FILE, (FNAME));                        \
-          fprintf (FILE, ",");                                 \
-         assemble_name (FILE, label);                          \
-          fprintf (FILE, "-");                                 \
-         assemble_name (FILE, (FNAME));                        \
-         putc ('\n', FILE);                                    \
+         ASM_OUTPUT_MEASURED_SIZE (FILE, (FNAME), label);      \
         }                                                      \
     }                                                          \
   while (0)
index eb40497..0090dbe 100644 (file)
@@ -1950,16 +1950,12 @@ do {                                                                    \
    is just a default.  You may need to override it in your machine-
    specific tm.h file (depending upon the particulars of your assembler).  */
 
-
-#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)    \
-do {                                                   \
-     fprintf (FILE, "%s", TYPE_ASM_OP);                        \
-     assemble_name (FILE, NAME);                       \
-     putc (',', FILE);                                 \
-     fprintf (FILE, TYPE_OPERAND_FMT, "function");     \
-     putc ('\n', FILE);                                        \
-     ASM_OUTPUT_LABEL (FILE, NAME);                    \
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)            \
+do {                                                           \
+     ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function");       \
+     ASM_OUTPUT_LABEL (FILE, NAME);                            \
 } while (0)
+
 /* A C statement (sans semicolon) to output to the stdio stream
    STREAM any text necessary for declaring the name NAME of a
    function which is being defined.  This macro is responsible for
@@ -1979,13 +1975,7 @@ do {                                                     \
        labelno++;                                                      \
        ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);            \
        ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);               \
-       fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-       assemble_name (FILE, (FNAME));                                  \
-        fprintf (FILE, ",");                                           \
-       assemble_name (FILE, label);                                    \
-        fprintf (FILE, "-");                                           \
-       assemble_name (FILE, (FNAME));                                  \
-       putc ('\n', FILE);                                              \
+       ASM_OUTPUT_MEASURED_SIZE (FILE, (FNAME), label);                \
       }                                                                        \
   } while (0)
 /* A C statement (sans semicolon) to output to the stdio stream
@@ -1997,22 +1987,17 @@ do {                                                    \
    If this macro is not defined, then the function size is not
    defined.  */
 
-#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                        \
-do {                                                                     \
-      fprintf (FILE, "%s", TYPE_ASM_OP);                                 \
-      assemble_name (FILE, NAME);                                        \
-      putc (',', FILE);                                                          \
-      fprintf (FILE, TYPE_OPERAND_FMT, "object");                        \
-      putc ('\n', FILE);                                                 \
-      size_directive_output = 0;                                         \
-      if (!flag_inhibit_size_directive && DECL_SIZE (DECL))              \
-       {                                                                 \
-         size_directive_output = 1;                                      \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-         assemble_name (FILE, NAME);                                     \
-         fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
-    }                                                                    \
-  ASM_OUTPUT_LABEL(FILE, NAME);                                                  \
+#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                      \
+do {                                                                   \
+  ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                    \
+  size_directive_output = 0;                                           \
+  if (!flag_inhibit_size_directive && DECL_SIZE (DECL))                        \
+    {                                                                  \
+      size_directive_output = 1;                                       \
+      ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME,                           \
+                                int_size_in_bytes (TREE_TYPE (DECL))); \
+    }                                                                  \
+  ASM_OUTPUT_LABEL(FILE, NAME);                                                \
 } while (0)
 /* A C statement (sans semicolon) to output to the stdio stream
    STREAM any text necessary for declaring the name NAME of an
@@ -2027,17 +2012,18 @@ do {                                                                      \
 #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)        \
 do {                                                                    \
      const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);            \
+     HOST_WIDE_INT size;                                                \
      if (!flag_inhibit_size_directive && DECL_SIZE (DECL)               \
          && ! AT_END && TOP_LEVEL                                       \
         && DECL_INITIAL (DECL) == error_mark_node                       \
         && !size_directive_output)                                      \
        {                                                                \
         size_directive_output = 1;                                      \
-        fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-        assemble_name (FILE, name);                                     \
-        fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
+        size = int_size_in_bytes (TREE_TYPE (DECL));                    \
+        ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);                   \
        }                                                                \
    } while (0)
+
 /* A C statement (sans semicolon) to finish up declaring a variable
    name once the compiler has processed its initializer fully and
    thus has had a chance to determine the size of an array when
index ce906e7..b6dda1e 100644 (file)
@@ -288,42 +288,30 @@ Boston, MA 02111-1307, USA.  */
     }                                  \
   while (0)
 
-#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)    \
-  do                                                   \
-    {                                                  \
-      fprintf (FILE, "%s", TYPE_ASM_OP);               \
-      assemble_name (FILE, NAME);                      \
-      putc (',', FILE);                                        \
-      fprintf (FILE, TYPE_OPERAND_FMT, "function");    \
-      putc ('\n', FILE);                               \
-                                                       \
-      ASM_OUTPUT_LABEL(FILE, NAME);                    \
-    }                                                  \
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)            \
+  do                                                           \
+    {                                                          \
+      ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function");      \
+      ASM_OUTPUT_LABEL(FILE, NAME);                            \
+    }                                                          \
   while (0)
 
 #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)              \
   do                                                           \
     {                                                          \
-      fprintf (FILE, "%s", TYPE_ASM_OP);                       \
-      assemble_name (FILE, NAME);                              \
-      putc (',', FILE);                                                \
-      fprintf (FILE, TYPE_OPERAND_FMT, "object");              \
-      putc ('\n', FILE);                                       \
-                                                               \
+      HOST_WIDE_INT size;                                      \
+                                                               \
+      ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                \
+                                                               \
       size_directive_output = 0;                               \
-                                                               \
       if (!flag_inhibit_size_directive                         \
          && (DECL) && DECL_SIZE (DECL))                        \
        {                                                       \
          size_directive_output = 1;                            \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                    \
-         assemble_name (FILE, NAME);                           \
-         putc (',', FILE);                                     \
-         fprintf (FILE, HOST_WIDE_INT_PRINT_DEC,               \
-                  int_size_in_bytes (TREE_TYPE (DECL)));       \
-         fputc ('\n', FILE);                                   \
+          size = int_size_in_bytes (TREE_TYPE (DECL));         \
+          ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);                \
        }                                                       \
-                                                               \
+                                                               \
       ASM_OUTPUT_LABEL (FILE, NAME);                           \
     }                                                          \
   while (0)
@@ -332,6 +320,7 @@ Boston, MA 02111-1307, USA.  */
   do                                                           \
     {                                                          \
       const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);  \
+      HOST_WIDE_INT size;                                      \
                                                                \
       if (!flag_inhibit_size_directive                         \
          && DECL_SIZE (DECL)                                   \
@@ -340,12 +329,8 @@ Boston, MA 02111-1307, USA.  */
          && !size_directive_output)                            \
        {                                                       \
          size_directive_output = 1;                            \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                    \
-         assemble_name (FILE, name);                           \
-         putc (',', FILE);                                     \
-         fprintf (FILE, HOST_WIDE_INT_PRINT_DEC,               \
-                  int_size_in_bytes (TREE_TYPE (DECL)));       \
-         fputc ('\n', FILE);                                   \
+         size = int_size_in_bytes (TREE_TYPE (DECL));          \
+         ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);         \
        }                                                       \
     }                                                          \
   while (0)
@@ -362,14 +347,7 @@ Boston, MA 02111-1307, USA.  */
                                                                \
          ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);  \
          ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);     \
-                                                               \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                    \
-         assemble_name (FILE, (FNAME));                        \
-         fprintf (FILE, ",");                                  \
-         assemble_name (FILE, label);                          \
-         fprintf (FILE, "-");                                  \
-         assemble_name (FILE, (FNAME));                        \
-         putc ('\n', FILE);                                    \
+         ASM_OUTPUT_MEASURED_SIZE (FILE, (FNAME), label);      \
        }                                                       \
     }                                                          \
   while (0)
index 46a13b4..5b0ec6d 100644 (file)
@@ -291,18 +291,13 @@ Boston, MA 02111-1307, USA.  */
    function's return value.  We allow for that here.  */
 
 #ifndef ASM_DECLARE_FUNCTION_NAME
-#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)    \
-  do                                                   \
-    {                                                  \
-      fprintf (FILE, "%s", TYPE_ASM_OP);               \
-      assemble_name (FILE, NAME);                      \
-      putc (',', FILE);                                        \
-      fprintf (FILE, TYPE_OPERAND_FMT, "function");    \
-      putc ('\n', FILE);                               \
-                                                       \
-      ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));   \
-      ASM_OUTPUT_LABEL(FILE, NAME);                    \
-    }                                                  \
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)            \
+  do                                                           \
+    {                                                          \
+      ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function");      \
+      ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));           \
+      ASM_OUTPUT_LABEL (FILE, NAME);                           \
+    }                                                          \
   while (0)
 #endif
 
@@ -311,26 +306,19 @@ Boston, MA 02111-1307, USA.  */
 #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)              \
   do                                                           \
     {                                                          \
-      fprintf (FILE, "%s", TYPE_ASM_OP);                       \
-      assemble_name (FILE, NAME);                              \
-      putc (',', FILE);                                                \
-      fprintf (FILE, TYPE_OPERAND_FMT, "object");              \
-      putc ('\n', FILE);                                       \
-                                                               \
+      HOST_WIDE_INT size;                                      \
+                                                               \
+      ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                \
+                                                               \
       size_directive_output = 0;                               \
-                                                               \
       if (!flag_inhibit_size_directive                         \
          && (DECL) && DECL_SIZE (DECL))                        \
        {                                                       \
          size_directive_output = 1;                            \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                    \
-         assemble_name (FILE, NAME);                           \
-         putc (',', FILE);                                     \
-         fprintf (FILE, HOST_WIDE_INT_PRINT_DEC,               \
-                  int_size_in_bytes (TREE_TYPE (DECL)));       \
-         fputc ('\n', FILE);                                   \
+         size = int_size_in_bytes (TREE_TYPE (DECL));          \
+         ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);         \
        }                                                       \
-                                                               \
+                                                               \
       ASM_OUTPUT_LABEL (FILE, NAME);                           \
     }                                                          \
   while (0)
@@ -345,6 +333,7 @@ Boston, MA 02111-1307, USA.  */
   do                                                           \
     {                                                          \
       const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);  \
+      HOST_WIDE_INT size;                                      \
                                                                \
       if (!flag_inhibit_size_directive                         \
          && DECL_SIZE (DECL)                                   \
@@ -353,12 +342,8 @@ Boston, MA 02111-1307, USA.  */
          && !size_directive_output)                            \
        {                                                       \
          size_directive_output = 1;                            \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                    \
-         assemble_name (FILE, name);                           \
-         putc (',', FILE);                                     \
-         fprintf (FILE, HOST_WIDE_INT_PRINT_DEC,               \
-                  int_size_in_bytes (TREE_TYPE (DECL)));       \
-         fputc ('\n', FILE);                                   \
+         size = int_size_in_bytes (TREE_TYPE (DECL));          \
+         ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);         \
        }                                                       \
     }                                                          \
   while (0)
@@ -377,14 +362,7 @@ Boston, MA 02111-1307, USA.  */
                                                                \
          ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);  \
          ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);     \
-                                                               \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                    \
-         assemble_name (FILE, (FNAME));                        \
-         fprintf (FILE, ",");                                  \
-         assemble_name (FILE, label);                          \
-         fprintf (FILE, "-");                                  \
-         assemble_name (FILE, (FNAME));                        \
-         putc ('\n', FILE);                                    \
+         ASM_OUTPUT_MEASURED_SIZE (FILE, (FNAME), label);      \
        }                                                       \
     }                                                          \
   while (0)
index c5ce80a..0c8ad98 100644 (file)
@@ -150,36 +150,36 @@ Boston, MA 02111-1307, USA.  */
    Some svr4 assemblers need to also have something extra said about the
    function's return value.  We allow for that here.  */
 
-#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)                    \
-  do {                                                                 \
-    fprintf (FILE, "%s", TYPE_ASM_OP);                                 \
-    assemble_name (FILE, NAME);                                                \
-    putc (',', FILE);                                                  \
-    fprintf (FILE, TYPE_OPERAND_FMT, "function");                      \
-    putc ('\n', FILE);                                                 \
-    ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));                     \
-    ASM_OUTPUT_LABEL(FILE, NAME);                                      \
-  } while (0)
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)            \
+  do                                                           \
+    {                                                          \
+      ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function");      \
+      ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));           \
+      ASM_OUTPUT_LABEL (FILE, NAME);                           \
+    }                                                          \
+  while (0)
 
 /* Write the extra assembler code needed to declare an object properly.  */
 
-#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                      \
-  do {                                                                 \
-    fprintf (FILE, "%s", TYPE_ASM_OP);                                 \
-    assemble_name (FILE, NAME);                                                \
-    putc (',', FILE);                                                  \
-    fprintf (FILE, TYPE_OPERAND_FMT, "object");                                \
-    putc ('\n', FILE);                                                 \
-    size_directive_output = 0;                                         \
-    if (!flag_inhibit_size_directive && DECL_SIZE (DECL))              \
-      {                                                                        \
-        size_directive_output = 1;                                     \
-       fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-       assemble_name (FILE, NAME);                                     \
-       fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
-      }                                                                        \
-    ASM_OUTPUT_LABEL(FILE, NAME);                                      \
-  } while (0)
+#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)              \
+  do                                                           \
+    {                                                          \
+      HOST_WIDE_INT size;                                      \
+                                                               \
+      ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                \
+                                                               \
+      size_directive_output = 0;                               \
+      if (!flag_inhibit_size_directive                         \
+         && (DECL) && DECL_SIZE (DECL))                        \
+       {                                                       \
+         size_directive_output = 1;                            \
+         size = int_size_in_bytes (TREE_TYPE (DECL));          \
+         ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);         \
+       }                                                       \
+                                                               \
+      ASM_OUTPUT_LABEL (FILE, NAME);                           \
+    }                                                          \
+  while (0)
 
 /* Output the size directive for a decl in rest_of_decl_compilation
    in the case where we did not do so before the initializer.
@@ -190,18 +190,18 @@ Boston, MA 02111-1307, USA.  */
 #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)        \
 do {                                                                    \
      const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);            \
+     HOST_WIDE_INT size;                                               \
      if (!flag_inhibit_size_directive && DECL_SIZE (DECL)              \
          && ! AT_END && TOP_LEVEL                                       \
          && DECL_INITIAL (DECL) == error_mark_node                      \
          && !size_directive_output)                                     \
        {                                                                \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                             \
-        assemble_name (FILE, name);                                    \
-        fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL)));\
-       }                                                               \
+        size_directive_output = 1;                                     \
+        size = int_size_in_bytes (TREE_TYPE (DECL));                   \
+        ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);                  \
+       }                                                               \
    } while (0)
 
-
 /* This is how to declare the size of a function.  */
 
 #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL)                   \
@@ -213,13 +213,7 @@ do {                                                                    \
        labelno++;                                                      \
        ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);            \
        ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);               \
-       fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-       assemble_name (FILE, (FNAME));                                  \
-        fprintf (FILE, ",");                                           \
-       assemble_name (FILE, label);                                    \
-        fprintf (FILE, "-");                                           \
-       assemble_name (FILE, (FNAME));                                  \
-       putc ('\n', FILE);                                              \
+       ASM_OUTPUT_MEASURED_SIZE (FILE, (FNAME), label);                \
       }                                                                        \
   } while (0)
 
index 53b1a18..0373ff9 100644 (file)
@@ -139,13 +139,9 @@ do {                                                                       \
 #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)                    \
   do {                                                                 \
     if (TARGET_ELF) {                                                  \
-      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));                   \
-      ASM_OUTPUT_LABEL(FILE, NAME);                                    \
+      ASM_OUTPUT_LABEL (FILE, NAME);                                   \
     } else                                                             \
       SCO_DEFAULT_ASM_COFF(FILE, NAME);                                        \
 } while (0)
@@ -153,34 +149,28 @@ do {                                                                      \
 #undef ASM_DECLARE_FUNCTION_SIZE
 #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL)                   \
   do {                                                                 \
-    if (TARGET_ELF) { if (!flag_inhibit_size_directive)                        \
-      {                                                                        \
-       fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-       assemble_name (FILE, (FNAME));                                  \
-        fprintf (FILE, ",.-");                                         \
-       assemble_name (FILE, (FNAME));                                  \
-       putc ('\n', FILE);                                              \
-      }        }                                                               \
+    if (TARGET_ELF && !flag_inhibit_size_directive)                    \
+      ASM_OUTPUT_MEASURED_SIZE (FILE, (FNAME), ".");                   \
   } while (0)
 
 #undef ASM_DECLARE_OBJECT_NAME
 #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                      \
   do {                                                                 \
     if (TARGET_ELF) {                                                  \
-      fprintf (FILE, "%s", TYPE_ASM_OP);                               \
-      assemble_name (FILE, NAME);                                      \
-      putc (',', FILE);                                                        \
-      fprintf (FILE, TYPE_OPERAND_FMT, "object");                      \
-      putc ('\n', FILE);                                               \
+      HOST_WIDE_INT size;                                              \
+                                                                       \
+      ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                        \
+                                                                       \
       size_directive_output = 0;                                       \
-      if (!flag_inhibit_size_directive && DECL_SIZE (DECL))            \
-        {                                                              \
-       size_directive_output = 1;                                      \
-       fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-       assemble_name (FILE, NAME);                                     \
-       fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
-        }                                                              \
-      ASM_OUTPUT_LABEL(FILE, NAME);                                    \
+      if (!flag_inhibit_size_directive                                 \
+         && (DECL) && DECL_SIZE (DECL))                                \
+       {                                                               \
+         size_directive_output = 1;                                    \
+         size = int_size_in_bytes (TREE_TYPE (DECL));                  \
+         ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);                 \
+       }                                                               \
+                                                                       \
+      ASM_OUTPUT_LABEL (FILE, NAME);                                   \
     } else                                                             \
       SCO_DEFAULT_ASM_COFF(FILE, NAME);                                        \
   } while (0)
@@ -198,17 +188,17 @@ do {                                                                      \
 #undef ASM_FINISH_DECLARE_OBJECT
 #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)        \
 do {                                                                    \
-  if (TARGET_ELF) {                                                    \
+  if (TARGET_ELF) {                                                     \
      const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);            \
+     HOST_WIDE_INT size;                                                \
      if (!flag_inhibit_size_directive && DECL_SIZE (DECL)               \
          && ! AT_END && TOP_LEVEL                                       \
         && DECL_INITIAL (DECL) == error_mark_node                       \
         && !size_directive_output)                                      \
        {                                                                \
         size_directive_output = 1;                                      \
-        fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-        assemble_name (FILE, name);                                     \
-        fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
+        size = int_size_in_bytes (TREE_TYPE (DECL));                    \
+        ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);                   \
        }                                                                \
     }                                                                   \
 } while (0)
index bffe30b..4e3e81d 100644 (file)
@@ -4059,13 +4059,7 @@ ia64_asm_output_external (file, decl, name)
      restore it.  */
   save_referenced = TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl));
   if (TREE_CODE (decl) == FUNCTION_DECL)
-    {
-      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_GLOBALIZE_LABEL (file, name);
   TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) = save_referenced;
 }
index 8d21446..bf9a604 100644 (file)
@@ -2145,13 +2145,7 @@ do {                                             \
        labelno++;                                              \
        ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);    \
        ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);       \
-       fprintf ((FILE), "\t%s\t ", SIZE_ASM_OP);               \
-       assemble_name ((FILE), (FNAME));                        \
-        fprintf ((FILE), ",");                                 \
-       assemble_name ((FILE), label);                          \
-        fprintf ((FILE), "-");                                 \
-       assemble_name ((FILE), (FNAME));                        \
-       putc ('\n', (FILE));                                    \
+       ASM_OUTPUT_MEASURED_SIZE (FILE, (FNAME), label);        \
       }                                                                \
   } while (0)
 /* A C statement (sans semicolon) to output to the stdio stream
@@ -2163,8 +2157,6 @@ do {                                              \
    If this macro is not defined, then the function size is not
    defined.  */
 
-
-
 #define ESCAPES \
 "\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
 \0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
index 88154fc..fef3ebc 100644 (file)
@@ -146,9 +146,6 @@ do {                                                                \
 
 #define ASM_COMMENT_START "|"
 
-#undef TYPE_OPERAND_FMT
-#define TYPE_OPERAND_FMT      "@%s"
-
 /* Define how the m68k registers should be numbered for Dwarf output.
    The numbering provided here should be compatible with the native
    SVR4 SDB debugger in the m68k/SVR4 reference port, where d0-d7
index d2bb108..fbe7c42 100644 (file)
@@ -109,9 +109,6 @@ Boston, MA 02111-1307, USA.  */
 
 #define ASM_COMMENT_START "#"
 
-#undef TYPE_OPERAND_FMT
-#define TYPE_OPERAND_FMT      "@%s"
-
 /* Define how the m68k registers should be numbered for Dwarf output.
    The numbering provided here should be compatible with the native
    SVR4 SDB debugger in the m68k/SVR4 reference port, where d0-d7
index 3149278..4ee28e8 100644 (file)
@@ -1813,38 +1813,31 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
 #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)                    \
   do {                                                                 \
     if (DECLARE_ASM_NAME)                                              \
-      {                                                                        \
-       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_OUTPUT_LABEL(FILE, NAME);                                      \
   } while (0)
 
 /* Write the extra assembler code needed to declare an object properly.  */
 #undef ASM_DECLARE_OBJECT_NAME
-#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                          \
-  do {                                                                     \
-    if (DECLARE_ASM_NAME)                                                  \
-      {                                                                            \
-       fprintf (FILE, "%s", TYPE_ASM_OP);                                  \
-       assemble_name (FILE, NAME);                                         \
-       putc (',', FILE);                                                   \
-       fprintf (FILE, TYPE_OPERAND_FMT, "object");                         \
-       putc ('\n', FILE);                                                  \
-        size_directive_output = 0;                                         \
-       if (!flag_inhibit_size_directive && DECL_SIZE (DECL))               \
-         {                                                                 \
-            size_directive_output = 1;                                     \
-           fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-           assemble_name (FILE, NAME);                                     \
-           fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
-         }                                                                 \
-      }                                                                            \
-    ASM_OUTPUT_LABEL(FILE, NAME);                                          \
-  } while (0)
+#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                      \
+  do {                                                                 \
+    if (DECLARE_ASM_NAME)                                              \
+      {                                                                        \
+       HOST_WIDE_INT size;                                             \
+                                                                       \
+       ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");               \
+                                                                       \
+       size_directive_output = 0;                                      \
+       if (!flag_inhibit_size_directive                                \
+           && (DECL) && DECL_SIZE (DECL))                              \
+         {                                                             \
+           size_directive_output = 1;                                  \
+           size = int_size_in_bytes (TREE_TYPE (DECL));                \
+           ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);               \
+         }                                                             \
+      }                                                                        \
+    ASM_OUTPUT_LABEL(FILE, NAME);                                      \
+  } while (0);
 
 /* Output the size directive for a decl in rest_of_decl_compilation
    in the case where we did not do so before the initializer.
@@ -1856,6 +1849,7 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
 #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)        \
 do {                                                                    \
      const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);            \
+     HOST_WIDE_INT size;                                                \
      if (!flag_inhibit_size_directive && DECL_SIZE (DECL)               \
         && DECLARE_ASM_NAME                                             \
          && ! AT_END && TOP_LEVEL                                       \
@@ -1863,9 +1857,8 @@ do {                                                                       \
         && !size_directive_output)                                      \
        {                                                                \
         size_directive_output = 1;                                      \
-        fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-        assemble_name (FILE, name);                                     \
-        fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
+        size = int_size_in_bytes (TREE_TYPE (DECL));                    \
+        ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);                   \
        }                                                                \
    } while (0)
 
@@ -1882,11 +1875,7 @@ do {                                                                      \
            labelno++;                                                  \
            ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);        \
            ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);           \
-           fprintf (FILE, "%s", SIZE_ASM_OP);                          \
-           assemble_name (FILE, (FNAME));                              \
-           fprintf (FILE, ",%s-", &label[1]);                          \
-           assemble_name (FILE, (FNAME));                              \
-           putc ('\n', FILE);                                          \
+           ASM_OUTPUT_MEASURED_SIZE (FILE, (FNAME), label);            \
          }                                                             \
       }                                                                        \
   } while (0)
index ced4886..8d74803 100644 (file)
@@ -75,50 +75,42 @@ exports_section ()                                          \
    Some svr4 assemblers need to also have something extra said about the
    function's return value.  We allow for that here.  */
 #undef  ASM_DECLARE_FUNCTION_NAME
-#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)    \
-  do                                                   \
-    {                                                  \
-      if (mcore_dllexport_name_p (NAME))               \
-       {                                               \
-          MCORE_EXPORT_NAME (FILE, NAME);              \
-         function_section (DECL);                      \
-       }                                               \
-      fprintf (FILE, "%s", TYPE_ASM_OP);               \
-      assemble_name (FILE, NAME);                      \
-      putc (',', FILE);                                        \
-      fprintf (FILE, TYPE_OPERAND_FMT, "function");    \
-      putc ('\n', FILE);                               \
-      ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));   \
-      ASM_OUTPUT_LABEL (FILE, NAME);                   \
-    }                                                  \
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)            \
+  do                                                           \
+    {                                                          \
+      if (mcore_dllexport_name_p (NAME))                       \
+       {                                                       \
+          MCORE_EXPORT_NAME (FILE, NAME);                      \
+         function_section (DECL);                              \
+       }                                                       \
+      ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function");      \
+      ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));           \
+      ASM_OUTPUT_LABEL (FILE, NAME);                           \
+    }                                                          \
   while (0)
 
 /* Write the extra assembler code needed to declare an object properly.  */
 #undef  ASM_DECLARE_OBJECT_NAME
-#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                              \
-  do                                                                           \
-    {                                                                          \
-      if (mcore_dllexport_name_p (NAME))                                       \
-        {                                                                      \
-          enum in_section save_section = in_section;                           \
-         MCORE_EXPORT_NAME (FILE, NAME);                                       \
-          switch_to_section (save_section, (DECL));                            \
-        }                                                                      \
-      fprintf (FILE, "%s", TYPE_ASM_OP);                                       \
-      assemble_name (FILE, NAME);                                              \
-      putc (',', FILE);                                                                \
-      fprintf (FILE, TYPE_OPERAND_FMT, "object");                              \
-      putc ('\n', FILE);                                                       \
-      size_directive_output = 0;                                               \
-      if (!flag_inhibit_size_directive && DECL_SIZE (DECL))                    \
-        {                                                                      \
-          size_directive_output = 1;                                           \
-          fprintf (FILE, "%s", SIZE_ASM_OP);                                   \
-          assemble_name (FILE, NAME);                                          \
-          fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL)));      \
-        }                                                                      \
-      ASM_OUTPUT_LABEL(FILE, NAME);                                            \
-    }                                                                          \
+#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)              \
+  do                                                           \
+    {                                                          \
+      HOST_WIDE_INT size;                                      \
+      if (mcore_dllexport_name_p (NAME))                       \
+        {                                                      \
+          enum in_section save_section = in_section;           \
+         MCORE_EXPORT_NAME (FILE, NAME);                       \
+          switch_to_section (save_section, (DECL));            \
+        }                                                      \
+      ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                \
+      size_directive_output = 0;                               \
+      if (!flag_inhibit_size_directive && DECL_SIZE (DECL))    \
+        {                                                      \
+          size_directive_output = 1;                           \
+         size = int_size_in_bytes (TREE_TYPE (DECL));          \
+         ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);         \
+        }                                                      \
+      ASM_OUTPUT_LABEL(FILE, NAME);                            \
+    }                                                          \
   while (0)
  
 /* Output the size directive for a decl in rest_of_decl_compilation
@@ -131,14 +123,15 @@ exports_section ()                                                \
   do                                                                     \
     {                                                                    \
       const char * name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);           \
+      HOST_WIDE_INT size;                                               \
       if (!flag_inhibit_size_directive && DECL_SIZE (DECL)               \
           && ! AT_END && TOP_LEVEL                                       \
           && DECL_INITIAL (DECL) == error_mark_node                      \
           && !size_directive_output)                                     \
         {                                                                \
-          fprintf (FILE, "%s", SIZE_ASM_OP);                             \
-          assemble_name (FILE, name);                                    \
-          fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL)));\
+         size_directive_output = 1;                                     \
+         size = int_size_in_bytes (TREE_TYPE (DECL));                   \
+         ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);                  \
         }                                                                \
     }                                                                    \
   while (0)
index 8e22e0b..c759f97 100644 (file)
@@ -148,21 +148,14 @@ do {                                                                      \
 #undef ASM_DECLARE_OBJECT_NAME
 #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                      \
   do {                                                                 \
-    fprintf (FILE, "%s", TYPE_ASM_OP);                         \
-    assemble_name (FILE, NAME);                                                \
-    putc (',', FILE);                                                  \
-    fprintf (FILE, TYPE_OPERAND_FMT, "object");                                \
-    putc ('\n', FILE);                                                 \
+    HOST_WIDE_INT size;                                                        \
+    ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                  \
     size_directive_output = 0;                                         \
     if (!flag_inhibit_size_directive && DECL_SIZE (DECL))              \
       {                                                                        \
        size_directive_output = 1;                                      \
-       fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-       assemble_name (FILE, NAME);                                     \
-       fprintf (FILE, ",");                                            \
-       fprintf (FILE, HOST_WIDE_INT_PRINT_DEC,                         \
-         int_size_in_bytes (TREE_TYPE (DECL)));                        \
-       fprintf (FILE, "\n");                                           \
+       size = int_size_in_bytes (TREE_TYPE (DECL));                    \
+       ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);                   \
       }                                                                        \
     mips_declare_object (FILE, NAME, "", ":\n", 0);                    \
   } while (0)
@@ -177,18 +170,16 @@ do {                                                                      \
 #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)        \
 do {                                                                    \
      const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);            \
+     HOST_WIDE_INT size;                                                \
+                                                                        \
      if (!flag_inhibit_size_directive && DECL_SIZE (DECL)               \
          && ! AT_END && TOP_LEVEL                                       \
         && DECL_INITIAL (DECL) == error_mark_node                       \
         && !size_directive_output)                                      \
        {                                                                \
         size_directive_output = 1;                                      \
-        fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-        assemble_name (FILE, name);                                     \
-        fprintf (FILE, ",");                                            \
-        fprintf (FILE, HOST_WIDE_INT_PRINT_DEC,                         \
-                 int_size_in_bytes (TREE_TYPE (DECL)));                 \
-        fprintf (FILE, "\n");                                           \
+        size = int_size_in_bytes (TREE_TYPE (DECL));                    \
+        ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);                   \
        }                                                                \
    } while (0)
 
index 7aea668..ee226b9 100644 (file)
@@ -123,21 +123,14 @@ do {                                              \
 #undef ASM_DECLARE_OBJECT_NAME
 #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                      \
   do {                                                                 \
-    fprintf (FILE, "%s", TYPE_ASM_OP);                                 \
-    assemble_name (FILE, NAME);                                                \
-    putc (',', FILE);                                                  \
-    fprintf (FILE, TYPE_OPERAND_FMT, "object");                                \
-    putc ('\n', FILE);                                                 \
+    HOST_WIDE_INT size;                                                        \
+    ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                  \
     size_directive_output = 0;                                         \
     if (!flag_inhibit_size_directive && DECL_SIZE (DECL))              \
       {                                                                        \
        size_directive_output = 1;                                      \
-       fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-       assemble_name (FILE, NAME);                                     \
-       fprintf (FILE, ",");                                            \
-       fprintf (FILE, HOST_WIDE_INT_PRINT_DEC,                         \
-         int_size_in_bytes (TREE_TYPE (DECL)));                        \
-       fprintf (FILE, "\n");                                           \
+       size = int_size_in_bytes (TREE_TYPE (DECL));                    \
+       ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);                   \
       }                                                                        \
     mips_declare_object (FILE, NAME, "", ":\n", 0);                    \
   } while (0)
@@ -152,18 +145,15 @@ do {                                              \
 #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)        \
 do {                                                                    \
      const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);            \
+     HOST_WIDE_INT size;                                                \
      if (!flag_inhibit_size_directive && DECL_SIZE (DECL)               \
          && ! AT_END && TOP_LEVEL                                       \
         && DECL_INITIAL (DECL) == error_mark_node                       \
         && !size_directive_output)                                      \
        {                                                                \
         size_directive_output = 1;                                      \
-        fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-        assemble_name (FILE, name);                                     \
-        fprintf (FILE, ",");                                            \
-        fprintf (FILE, HOST_WIDE_INT_PRINT_DEC,                         \
-                 int_size_in_bytes (TREE_TYPE (DECL)));                 \
-        fprintf (FILE, "\n");                                           \
+        size = int_size_in_bytes (TREE_TYPE (DECL));                    \
+        ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);                   \
        }                                                                \
    } while (0)
 
index c802698..4dac304 100644 (file)
@@ -395,15 +395,13 @@ while (0)
 #define ASM_DECLARE_OBJECT_NAME(STREAM, NAME, DECL)                    \
 do                                                                     \
  {                                                                     \
+   HOST_WIDE_INT size;                                                 \
    size_directive_output = 0;                                          \
-   if (!flag_inhibit_size_directive && DECL_SIZE (DECL))       \
+   if (!flag_inhibit_size_directive && DECL_SIZE (DECL))               \
      {                                                                 \
        size_directive_output = 1;                                      \
-       fprintf (STREAM, "%s", SIZE_ASM_OP);                            \
-       assemble_name (STREAM, NAME);                                   \
-       fprintf (STREAM, ",");                                          \
-       fprintf (STREAM, HOST_WIDE_INT_PRINT_DEC, int_size_in_bytes (TREE_TYPE (DECL)));        \
-       fprintf (STREAM, "\n");                                         \
+       size = int_size_in_bytes (TREE_TYPE (DECL));                    \
+       ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, size);                 \
      }                                                                 \
    mips_declare_object (STREAM, NAME, "", ":\n", 0);                   \
  }                                                                     \
@@ -424,17 +422,15 @@ while (0)
 #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)        \
 do {                                                                    \
      const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);            \
+     HOST_WIDE_INT size;                                                \
      if (!flag_inhibit_size_directive && DECL_SIZE (DECL)               \
          && ! AT_END && TOP_LEVEL                                       \
         && DECL_INITIAL (DECL) == error_mark_node                       \
         && !size_directive_output)                                      \
        {                                                                \
         size_directive_output = 1;                                      \
-        fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-        assemble_name (FILE, name);                                     \
-        fprintf (FILE, ",");                                            \
-        fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, int_size_in_bytes (TREE_TYPE (DECL))); \
-        fprintf (FILE, "\n");                                           \
+        size = int_size_in_bytes (TREE_TYPE (DECL));                    \
+        ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);                   \
        }                                                                \
    } while (0)
 
index a1916fd..1e805b6 100644 (file)
@@ -67,25 +67,18 @@ do {                                                                \
 /* Write the extra assembler code needed to declare an object properly.  */
 
 #undef ASM_DECLARE_OBJECT_NAME
-#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)              \
-  do {                                                         \
-    fprintf (FILE, "%s", TYPE_ASM_OP);                         \
-    assemble_name (FILE, NAME);                                        \
-    putc (',', FILE);                                          \
-    fprintf (FILE, TYPE_OPERAND_FMT, "object");                        \
-    putc ('\n', FILE);                                         \
-    size_directive_output = 0;                                 \
-    if (!flag_inhibit_size_directive && DECL_SIZE (DECL))      \
-      {                                                                \
-       size_directive_output = 1;                              \
-       fprintf (FILE, "%s", SIZE_ASM_OP);                      \
-       assemble_name (FILE, NAME);                             \
-       fprintf (FILE, ",");                                    \
-       fprintf (FILE, HOST_WIDE_INT_PRINT_DEC,                 \
-                int_size_in_bytes (TREE_TYPE (DECL)));         \
-       fprintf (FILE, "\n");                                   \
-      }                                                                \
-    mips_declare_object (FILE, NAME, "", ":\n", 0);            \
+#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                      \
+  do {                                                                 \
+    HOST_WIDE_INT size;                                                        \
+    ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                  \
+    size_directive_output = 0;                                         \
+    if (!flag_inhibit_size_directive && DECL_SIZE (DECL))              \
+      {                                                                        \
+       size_directive_output = 1;                                      \
+       size = int_size_in_bytes (TREE_TYPE (DECL));                    \
+       ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);                   \
+      }                                                                        \
+    mips_declare_object (FILE, NAME, "", ":\n", 0);                    \
   } while (0)
 
 #define TARGET_ASM_UNIQUE_SECTION  mips_unique_section
@@ -229,11 +222,7 @@ void FN ()                                                 \
        assemble_name (STREAM, NAME);                                   \
        putc ('\n', STREAM);                                            \
       }                                                                        \
-    fprintf (STREAM, "\t%s\t ", TYPE_ASM_OP);                          \
-    assemble_name (STREAM, NAME);                                      \
-    putc (',', STREAM);                                                        \
-    fprintf (STREAM, TYPE_OPERAND_FMT, "function");                    \
-    putc ('\n', STREAM);                                               \
+    ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, NAME, "function");              \
     assemble_name (STREAM, NAME);                                      \
     fputs (":\n", STREAM);                                             \
   } while (0)
index 5d2386a..7111a70 100644 (file)
@@ -135,11 +135,7 @@ Boston, MA 02111-1307, USA.  */
 #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)                    \
   do                                                                   \
     {                                                                  \
-      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));                   \
       ASM_OUTPUT_LABEL(FILE, NAME);                                    \
     }                                                                  \
@@ -148,29 +144,26 @@ Boston, MA 02111-1307, USA.  */
 
 /* Write the extra assembler code needed to declare an object properly.  */
 
-#undef ASM_DECLARE_OBJECT_NAME
-#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                      \
-  do                                                                   \
-    {                                                                  \
-      fprintf (FILE, "%s", TYPE_ASM_OP);                               \
-      assemble_name (FILE, NAME);                                      \
-      putc (',', FILE);                                                        \
-      fprintf (FILE, TYPE_OPERAND_FMT, "object");                      \
-      putc ('\n', FILE);                                               \
-      size_directive_output = 0;                                       \
-      if (!flag_inhibit_size_directive && DECL_SIZE (DECL))            \
-       {                                                               \
-         size_directive_output = 1;                                    \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                            \
-         assemble_name (FILE, NAME);                                   \
-         fprintf (FILE, ",%d\n",                                       \
-                  int_size_in_bytes (TREE_TYPE (DECL)));               \
-       }                                                               \
-      ASM_OUTPUT_LABEL(FILE, NAME);                                    \
-    }                                                                  \
+#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)              \
+  do                                                           \
+    {                                                          \
+      HOST_WIDE_INT size;                                      \
+                                                               \
+      ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                \
+                                                               \
+      size_directive_output = 0;                               \
+      if (!flag_inhibit_size_directive                         \
+         && (DECL) && DECL_SIZE (DECL))                        \
+       {                                                       \
+         size_directive_output = 1;                            \
+         size = int_size_in_bytes (TREE_TYPE (DECL));          \
+         ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);         \
+       }                                                       \
+                                                               \
+      ASM_OUTPUT_LABEL (FILE, NAME);                           \
+    }                                                          \
   while (0)
 
-
 /* Output the size directive for a decl in rest_of_decl_compilation
    in the case where we did not do so before the initializer.
    Once we find the error_mark_node, we know that the value of
@@ -182,16 +175,15 @@ Boston, MA 02111-1307, USA.  */
   do                                                                   \
     {                                                                  \
       const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);          \
+      HOST_WIDE_INT size;                                              \
       if (!flag_inhibit_size_directive && DECL_SIZE (DECL)             \
          && ! AT_END && TOP_LEVEL                                      \
          && DECL_INITIAL (DECL) == error_mark_node                     \
          && !size_directive_output)                                    \
        {                                                               \
          size_directive_output = 1;                                    \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                            \
-         assemble_name (FILE, name);                                   \
-         fprintf (FILE, ",%d\n",                                       \
-                  int_size_in_bytes (TREE_TYPE (DECL)));               \
+         size = int_size_in_bytes (TREE_TYPE (DECL));                  \
+         ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);                 \
        }                                                               \
     }                                                                  \
   while (0)
@@ -210,13 +202,7 @@ Boston, MA 02111-1307, USA.  */
          labelno++;                                                    \
          ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);          \
          ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);             \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                            \
-         assemble_name (FILE, (FNAME));                                \
-         fprintf (FILE, ",");                                          \
-         assemble_name (FILE, label);                                  \
-         fprintf (FILE, "-");                                          \
-         assemble_name (FILE, (FNAME));                                \
-         putc ('\n', FILE);                                            \
+         ASM_OUTPUT_MEASURED_SIZE (FILE, FNAME, label);                \
        }                                                               \
     }                                                                  \
   while (0)
index 2c0738f..e9a4ea4 100644 (file)
@@ -203,11 +203,7 @@ Boston, MA 02111-1307, USA.  */
 #undef ASM_DECLARE_FUNCTION_NAME
 #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)                    \
   do {                                                                 \
-    fprintf (FILE, "%s", TYPE_ASM_OP);                                 \
-    assemble_name (FILE, NAME);                                                \
-    fputs (" , ", FILE);                                               \
-    fprintf (FILE, TYPE_OPERAND_FMT, "function");                      \
-    putc ('\n', FILE);                                                 \
+    ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function");                        \
     ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));                     \
     ASM_OUTPUT_LABEL(FILE, NAME);                                      \
   } while (0)
@@ -219,35 +215,26 @@ Boston, MA 02111-1307, USA.  */
 #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL)                   \
   do {                                                                 \
     if (!flag_inhibit_size_directive)                                  \
-      {                                                                        \
-       fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-       assemble_name (FILE, (FNAME));                                  \
-       fputs (" , . - ", FILE);                                        \
-       assemble_name (FILE, (FNAME));                                  \
-       putc ('\n', FILE);                                              \
-      }                                                                        \
+      ASM_OUTPUT_MEASURED_SIZE (FILE, FNAME, ".");                     \
   } while (0)
 #endif
 
 #ifndef OBSD_HAS_DECLARE_OBJECT
 /* Extra assembler code needed to declare an object properly.  */
 #undef ASM_DECLARE_OBJECT_NAME
-#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                      \
-  do {                                                                 \
-    fprintf (FILE, "%s", TYPE_ASM_OP);                                 \
-    assemble_name (FILE, NAME);                                                \
-    fputs (" , ", FILE);                                               \
-    fprintf (FILE, TYPE_OPERAND_FMT, "object");                                \
-    putc ('\n', FILE);                                                 \
-    size_directive_output = 0;                                         \
-    if (!flag_inhibit_size_directive && DECL_SIZE (DECL))              \
-      {                                                                        \
-       size_directive_output = 1;                                      \
-       fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-       assemble_name (FILE, NAME);                                     \
-       fprintf (FILE, " , %d\n", int_size_in_bytes (TREE_TYPE (DECL)));\
-      }                                                                        \
-    ASM_OUTPUT_LABEL (FILE, NAME);                                     \
+#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)              \
+  do {                                                         \
+      HOST_WIDE_INT size;                                      \
+      ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                \
+      size_directive_output = 0;                               \
+      if (!flag_inhibit_size_directive                         \
+         && (DECL) && DECL_SIZE (DECL))                        \
+       {                                                       \
+         size_directive_output = 1;                            \
+         size = int_size_in_bytes (TREE_TYPE (DECL));          \
+         ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);         \
+       }                                                       \
+      ASM_OUTPUT_LABEL (FILE, NAME);                           \
   } while (0)
 
 /* Output the size directive for a decl in rest_of_decl_compilation
@@ -259,15 +246,15 @@ Boston, MA 02111-1307, USA.  */
 #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)        \
 do {                                                                    \
      const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);            \
+     HOST_WIDE_INT size;                                                \
      if (!flag_inhibit_size_directive && DECL_SIZE (DECL)               \
          && ! AT_END && TOP_LEVEL                                       \
         && DECL_INITIAL (DECL) == error_mark_node                       \
         && !size_directive_output)                                      \
        {                                                                \
         size_directive_output = 1;                                      \
-        fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-        assemble_name (FILE, name);                                     \
-        fprintf (FILE, " , %d\n", int_size_in_bytes (TREE_TYPE (DECL)));\
+        size = int_size_in_bytes (TREE_TYPE (DECL));                    \
+        ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);                   \
        }                                                                \
    } while (0)
 #endif
index 96952d2..c4eae9b 100644 (file)
@@ -189,11 +189,7 @@ Boston, MA 02111-1307, USA.  */
 #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)            \
   do                                                           \
     {                                                          \
-      fprintf (FILE, "\t%s\t ", 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));           \
     }                                                          \
   while (0)
index 047ca6f..c82e185 100644 (file)
@@ -130,29 +130,12 @@ do {  \
 
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
 
-/* Define the strings used for the special svr4 .type and .size directives.
-   These strings generally do not vary from one system running svr4 to
-   another, but if a given system (e.g. m88k running svr) needs to use
-   different pseudo-op names for these, they may be overridden in the
-   file which includes this one.  */
-
-#define TYPE_ASM_OP    "\t.type\t"
-#define SIZE_ASM_OP    "\t.size\t"
-
 /* This is how we tell the assembler that a symbol is weak.  */
 
 #define ASM_WEAKEN_LABEL(FILE,NAME) \
   do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
        fputc ('\n', FILE); } while (0)
 
-/* The following macro defines the format used to output the second
-   operand of the .type assembler directive.  Different svr4 assemblers
-   expect various different forms for this operand.  The one given here
-   is just a default.  You may need to override it in your machine-
-   specific tm.h file (depending upon the particulars of your assembler).  */
-
-#define TYPE_OPERAND_FMT       "@%s"
-
 /* Write the extra assembler code needed to declare a function's result.
    Most svr4 assemblers don't require any special declaration of the
    result value, but there are exceptions.  */
index be0236a..5db8487 100644 (file)
@@ -610,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)                                                \
@@ -715,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                                                                 \
     {                                                                  \
index 611bebf..fec8275 100644 (file)
@@ -120,14 +120,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
                                                                \
          ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);  \
          ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);     \
-                                                               \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                    \
-         assemble_name (FILE, (FNAME));                        \
-         fprintf (FILE, ",");                                  \
-         assemble_name (FILE, label);                          \
-         fprintf (FILE, "-");                                  \
-         assemble_name (FILE, (FNAME));                        \
-         putc ('\n', FILE);                                    \
+         ASM_OUTPUT_MEASURED_SIZE (FILE, FNAME, label);        \
        }                                                       \
       XTENSA_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL);         \
     }                                                          \
index 56e2a5a..c15bfd9 100644 (file)
@@ -76,14 +76,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
                                                                \
          ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);  \
          ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);     \
-                                                               \
-         fprintf (FILE, "%s", SIZE_ASM_OP);                    \
-         assemble_name (FILE, (FNAME));                        \
-         fprintf (FILE, ",");                                  \
-         assemble_name (FILE, label);                          \
-         fprintf (FILE, "-");                                  \
-         assemble_name (FILE, (FNAME));                        \
-         putc ('\n', FILE);                                    \
+         ASM_OUTPUT_MEASURED_SIZE (FILE, FNAME, label);        \
        }                                                       \
       XTENSA_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL);         \
     }                                                          \
index 6d12e09..ef83bdd 100644 (file)
@@ -169,6 +169,53 @@ do { fputs (integer_asm_op (POINTER_SIZE / UNITS_PER_WORD, TRUE), FILE); \
 #endif
 #endif
 
+/* How to emit a .type directive.  */
+#ifndef ASM_OUTPUT_TYPE_DIRECTIVE
+#if defined TYPE_ASM_OP && defined TYPE_OPERAND_FMT
+#define ASM_OUTPUT_TYPE_DIRECTIVE(STREAM, NAME, TYPE)  \
+  do                                                   \
+    {                                                  \
+      fputs (TYPE_ASM_OP, STREAM);                     \
+      assemble_name (STREAM, NAME);                    \
+      fputs (", ", STREAM);                            \
+      fprintf (STREAM, TYPE_OPERAND_FMT, TYPE);                \
+      putc ('\n', STREAM);                             \
+    }                                                  \
+  while (0)
+#endif
+#endif
+
+/* How to emit a .size directive.  */
+#ifndef ASM_OUTPUT_SIZE_DIRECTIVE
+#ifdef SIZE_ASM_OP
+#define ASM_OUTPUT_SIZE_DIRECTIVE(STREAM, NAME, SIZE)  \
+  do                                                   \
+    {                                                  \
+      HOST_WIDE_INT size_ = (SIZE);                    \
+      fputs (SIZE_ASM_OP, STREAM);                     \
+      assemble_name (STREAM, NAME);                    \
+      fputs (", ", STREAM);                            \
+      fprintf (STREAM, HOST_WIDE_INT_PRINT_DEC, size_);        \
+      putc ('\n', STREAM);                             \
+    }                                                  \
+  while (0)
+
+#define ASM_OUTPUT_MEASURED_SIZE(STREAM, BEG, END)     \
+  do                                                   \
+    {                                                  \
+      fputs (SIZE_ASM_OP, STREAM);                     \
+      assemble_name (STREAM, BEG);                     \
+      fputs (", ", STREAM);                            \
+      assemble_name (STREAM, END);                     \
+      putc ('-', STREAM);                              \
+      assemble_name (STREAM, BEG);                     \
+      putc ('\n', STREAM);                             \
+    }                                                  \
+  while (0)
+
+#endif
+#endif
+
 /* This determines whether or not we support weak symbols.  */
 #ifndef SUPPORTS_WEAK
 #if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL)
index e1be17a..6e6c35e 100644 (file)
@@ -6399,6 +6399,70 @@ Use the expression @code{assemble_name (@var{stream}, @var{name})} to
 output the name itself; before and after that, output the additional
 assembler syntax for defining the name, and a newline.
 
+@findex SIZE_ASM_OP
+@item SIZE_ASM_OP
+A C string containing the appropriate assembler directive to specify the
+size of a symbol, without any arguments.  On systems that use ELF, the
+default (in @file{config/elfos.h}) is @samp{"\t.size\t"}; on other
+systems, the default is not to define this macro.
+
+Define this macro only if it is correct to use the default definitions
+of @code{ASM_OUTPUT_SIZE_DIRECTIVE} and @code{ASM_OUTPUT_MEASURED_SIZE}
+for your system.  If you need your own custom definitions of those
+macros, or if you do not need explicit symbol sizes at all, do not
+define this macro.
+
+@findex ASM_OUTPUT_SIZE_DIRECTIVE
+@item ASM_OUTPUT_SIZE_DIRECTIVE (@var{stream}, @var{name}, @var{size})
+A C statement (sans semicolon) to output to the stdio stream
+@var{stream} a directive telling the assembler that the size of the
+symbol @var{name} is @var{size}.  @var{size} is a @code{HOST_WIDE_INT}.
+If you define @code{SIZE_ASM_OP}, a default definition of this macro is
+provided.
+
+@findex ASM_OUTPUT_MEASURED_SIZE
+@item ASM_OUTPUT_MEASURED_SIZE (@var{stream}, @var{beg}, @var{end})
+A C statement (sans semicolon) to output to the stdio stream
+@var{stream} a directive telling the assembler to calculate the size of
+the symbol @var{beg} by subtracting its address from that of the symbol
+@var{end}.  If you define @code{SIZE_ASM_OP}, a default definition of
+this macro is provided.
+
+@findex TYPE_ASM_OP
+@item TYPE_ASM_OP
+A C string containing the appropriate assembler directive to specify the
+type of a symbol, without any arguments.  On systems that use ELF, the
+default (in @file{config/elfos.h}) is @samp{"\t.type\t"}; on other
+systems, the default is not to define this macro.
+
+Define this macro only if it is correct to use the default definition of
+@code{ASM_OUTPUT_TYPE_DIRECTIVE} for your system.  If you need your own
+custom definition of this macro, or if you do not need explicit symbol
+types at all, do not define this macro.
+
+@findex TYPE_OPERAND_FMT
+@item TYPE_OPERAND_FMT
+A C string which specifies (using @code{printf} syntax) the format of
+the second operand to @code{TYPE_ASM_OP}.  On systems that use ELF, the
+default (in @file{config/elfos.h}) is @samp{"@@%s"}; on other systems,
+the default is not to define this macro.
+
+Define this macro only if it is correct to use the default definition of
+@code{ASM_OUTPUT_TYPE_DIRECTIVE} for your system.  If you need your own
+custom definition of this macro, or if you do not need explicit symbol
+types at all, do not define this macro.
+
+@findex ASM_OUTPUT_TYPE_DIRECTIVE
+@item ASM_OUTPUT_TYPE_DIRECTIVE (@var{stream}, @var{type})
+A C statement (sans semicolon) to output to the stdio stream
+@var{stream} a directive telling the assembler that the type of the
+symbol @var{name} is @var{type}.  @var{type} is a C string; currently,
+that string is always either @samp{"function"} or @samp{"object"}, but
+you should not count on this.
+
+If you define @code{TYPE_ASM_OP} and @code{TYPE_OPERAND_FMT}, a default
+definition of this macro is provided.
+
 @findex ASM_DECLARE_FUNCTION_NAME
 @item ASM_DECLARE_FUNCTION_NAME (@var{stream}, @var{name}, @var{decl})
 A C statement (sans semicolon) to output to the stdio stream
@@ -6411,6 +6475,9 @@ outputting the label definition (perhaps using
 If this macro is not defined, then the function name is defined in the
 usual manner as a label (by means of @code{ASM_OUTPUT_LABEL}).
 
+You may wish to use @code{ASM_OUTPUT_TYPE_DIRECTIVE} in the definition
+of this macro.
+
 @findex ASM_DECLARE_FUNCTION_SIZE
 @item ASM_DECLARE_FUNCTION_SIZE (@var{stream}, @var{name}, @var{decl})
 A C statement (sans semicolon) to output to the stdio stream
@@ -6421,6 +6488,9 @@ representing the function.
 
 If this macro is not defined, then the function size is not defined.
 
+You may wish to use @code{ASM_OUTPUT_MEASURED_SIZE} in the definition
+of this macro.
+
 @findex ASM_DECLARE_OBJECT_NAME
 @item ASM_DECLARE_OBJECT_NAME (@var{stream}, @var{name}, @var{decl})
 A C statement (sans semicolon) to output to the stdio stream
@@ -6432,6 +6502,9 @@ label definition (perhaps using @code{ASM_OUTPUT_LABEL}).  The argument
 If this macro is not defined, then the variable name is defined in the
 usual manner as a label (by means of @code{ASM_OUTPUT_LABEL}).
 
+You may wish to use @code{ASM_OUTPUT_TYPE_DIRECTIVE} and/or
+@code{ASM_OUTPUT_SIZE_DIRECTIVE} in the definition of this macro.
+
 @findex ASM_DECLARE_REGISTER_GLOBAL
 @item ASM_DECLARE_REGISTER_GLOBAL (@var{stream}, @var{decl}, @var{regno}, @var{name})
 A C statement (sans semicolon) to output to the stdio stream
@@ -6452,6 +6525,9 @@ something about the size of the object.
 If you don't define this macro, that is equivalent to defining it to do
 nothing.
 
+You may wish to use @code{ASM_OUTPUT_SIZE_DIRECTIVE} and/or
+@code{ASM_OUTPUT_MEASURED_SIZE} in the definition of this macro.
+
 @findex ASM_GLOBALIZE_LABEL
 @item ASM_GLOBALIZE_LABEL (@var{stream}, @var{name})
 A C statement (sans semicolon) to output to the stdio stream