*** empty log message ***
authorRichard Stallman <rms@gnu.org>
Mon, 30 Mar 1992 03:49:49 +0000 (03:49 +0000)
committerRichard Stallman <rms@gnu.org>
Mon, 30 Mar 1992 03:49:49 +0000 (03:49 +0000)
From-SVN: r634

gcc/config/sparc/sparc.h
gcc/config/svr4.h

index 150d1bdf3052c6d5c94e4c05a1480fbb65e115df..9c635c6e4efbe03e2ddb6f3b8d75a1a3557e9d92 100644 (file)
@@ -438,7 +438,7 @@ enum reg_class { NO_REGS, GENERAL_REGS, FP_REGS, ALL_REGS, LIM_REG_CLASSES };
   40, 41, 42, 43, 44, 45, 46, 47,      \
   48, 49, 50, 51, 52, 53, 54, 55,      \
   56, 57, 58, 59, 60, 61, 62, 63,      \
-  1, 4, 5, 6, 7, 0, 14, 30};
+  1, 4, 5, 6, 7, 0, 14, 30}
 
 /* This is the order in which to allocate registers for
    leaf functions.  If all registers can fit in the "i" registers,
@@ -451,7 +451,7 @@ enum reg_class { NO_REGS, GENERAL_REGS, FP_REGS, ALL_REGS, LIM_REG_CLASSES };
   40, 41, 42, 43, 44, 45, 46, 47,      \
   48, 49, 50, 51, 52, 53, 54, 55,      \
   56, 57, 58, 59, 60, 61, 62, 63,      \
-  1, 4, 5, 6, 7, 0, 14, 30, 31};
+  1, 4, 5, 6, 7, 0, 14, 30, 31}
 
 #define ORDER_REGS_FOR_LOCAL_ALLOC order_regs_for_local_alloc ()
 
@@ -463,7 +463,7 @@ enum reg_class { NO_REGS, GENERAL_REGS, FP_REGS, ALL_REGS, LIM_REG_CLASSES };
   1, 1, 1, 1, 1, 1, 1, 1,      \
   1, 1, 1, 1, 1, 1, 1, 1,      \
   1, 1, 1, 1, 1, 1, 1, 1,      \
-  1, 1, 1, 1, 1, 1, 1, 1};
+  1, 1, 1, 1, 1, 1, 1, 1}
 
 extern char leaf_reg_remap[];
 #define LEAF_REG_REMAP(REGNO) (leaf_reg_remap[REGNO])
@@ -765,20 +765,23 @@ extern struct rtx_def *sparc_compare_op0, *sparc_compare_op1;
 
 extern struct rtx_def *gen_compare_reg ();
 \f
+/* Generate the special assembly code needed to tell the assembler whatever
+   it might need to know about the return value of a function.
+
+   For Sparc assemblers, we need to output a .proc pseudo-op which conveys
+   information to the assembler relating to peephole optimization (done in
+   the assembler).  */
+
+#define ASM_DECLARE_RESULT(FILE, RESULT) \
+  fprintf ((FILE), "\t.proc\t0%o\n", sparc_type_code (TREE_TYPE (RESULT)))
+
 /* Output the label for a function definition.  */
 
-#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
-{                                                      \
-  extern tree double_type_node, float_type_node;       \
-  if (TREE_TYPE (DECL) == float_type_node)             \
-    fprintf (FILE, "\t.proc 6\n");                     \
-  else if (TREE_TYPE (DECL) == double_type_node)       \
-    fprintf (FILE, "\t.proc 7\n");                     \
-  else if (TREE_TYPE (DECL) == void_type_node)         \
-    fprintf (FILE, "\t.proc 0\n");                     \
-  else fprintf (FILE, "\t.proc 1\n");                  \
-  ASM_OUTPUT_LABEL (FILE, NAME);                       \
-}
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)                    \
+do {                                                                   \
+  ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));                       \
+  ASM_OUTPUT_LABEL (FILE, NAME);                                       \
+} while (0)
 
 /* Two views of the size of the current frame.  */
 extern int actual_fsize;
@@ -1500,13 +1503,25 @@ extern struct rtx_def *legitimize_pic_address ();
 /* This is how to output an element of a case-vector that is absolute.  */
 
 #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)  \
-  fprintf (FILE, "\t.word L%d\n", VALUE)
+do {                                                                   \
+  char label[30];                                                      \
+  ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE);                     \
+  fprintf (FILE, "\t.word\t");                                         \
+  assemble_name (FILE, label);                                         \
+  fprintf (FILE, "\n");                                                        \
+} while (0)
 
 /* This is how to output an element of a case-vector that is relative.
    (SPARC uses such vectors only when generating PIC.)  */
 
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL)  \
-  fprintf (FILE, "\t.word L%d-1b\n", VALUE)
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL)                     \
+do {                                                                   \
+  char label[30];                                                      \
+  ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE);                     \
+  fprintf (FILE, "\t.word\t");                                         \
+  assemble_name (FILE, label);                                         \
+  fprintf (FILE, "-1b\n");                                             \
+} while (0)
 
 /* This is how to output an assembler line
    that says to advance the location counter
index e7e32d9ce0ae8d16a6e70ec999166d2b05773da8..2859ce4aec43ecc01ec793807cff240b4aac3a95 100644 (file)
@@ -281,20 +281,13 @@ do {                                                              \
 /* This is how to output an internal numbered label where
    PREFIX is the class of label and NUM is the number within the class.
 
-   If the NUM argument is negative, we don't use it when generating the
-   label.
-
    For most svr4 systems, the convention is that any symbol which begins
-   with a period is not put into the linker symbol table by the assembler.
-*/
+   with a period is not put into the linker symbol table by the assembler.  */
 
 #undef ASM_OUTPUT_INTERNAL_LABEL
 #define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM)                   \
 do {                                                                   \
-  if ((int) (NUM) >= 0)                                                        \ ???
-    fprintf (FILE, ".%s%d:\n", PREFIX, NUM);                           \
-  else                                                                 \
-    fprintf (FILE, ".%s:\n", PREFIX);                                  \
+  fprintf (FILE, ".%s%d:\n", PREFIX, NUM);                             \
 } while (0)
 
 /* This is how to store into the string LABEL
@@ -302,20 +295,13 @@ do {                                                                      \
    PREFIX is the class of label and NUM is the number within the class.
    This is suitable for output with `assemble_name'.
 
-   If the NUM argument is negative, we don't use it when generating the
-   label.
-
    For most svr4 systems, the convention is that any symbol which begins
-   with a period is not put into the linker symbol table by the assembler.
-*/
+   with a period is not put into the linker symbol table by the assembler.  */
 
 #undef ASM_GENERATE_INTERNAL_LABEL
 #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM)                        \
 do {                                                                   \
-  if ((int) (NUM) >= 0)                                                        \
-    sprintf (LABEL, "*.%s%d", PREFIX, NUM);                            \
-  else                                                                 \
-    sprintf (LABEL, "*.%s", PREFIX);                                   \
+  sprintf (LABEL, "*.%s%d", PREFIX, NUM);                              \
 } while (0)
 
 /* The standard SVR4 assembler seems to require that certain builtin
@@ -345,13 +331,15 @@ do {                                                                      \
    the linker seems to want the alignment of data objects
    to depend on their types.  We do exactly that here.  */
 
-#define BSS_ASM_OP     ".bss"
+#define LOCAL_ASM_OP   ".local"
 
 #undef ASM_OUTPUT_ALIGNED_LOCAL
 #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN)              \
 do {                                                                   \
-  fprintf ((FILE), "\t%s\t%s,%u,%u\n",                                 \
-          BSS_ASM_OP, (NAME), (SIZE), (ALIGN) / BITS_PER_UNIT);        \
+  fprintf ((FILE), "\t%s\t", LOCAL_ASM_OP);                            \
+  assemble_name ((FILE), (NAME));                                      \
+  fprintf ((FILE), "\n");                                              \
+  ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN);                 \
 } while (0)
 
 /* This is the pseudo-op used to generate a 32-bit word of data with a