aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-03-30 03:49:49 +0000
committerRichard Stallman <rms@gnu.org>1992-03-30 03:49:49 +0000
commit4b69d2a3aeaf2766156fba35589a804ffb9d30e0 (patch)
tree4129b6f17f80a10eb6f97d9c283172fcb132b3ab
parent2525c7828207fff10eb6d9427d9e83077ca3d9b6 (diff)
downloadgcc-4b69d2a3aeaf2766156fba35589a804ffb9d30e0.zip
gcc-4b69d2a3aeaf2766156fba35589a804ffb9d30e0.tar.gz
gcc-4b69d2a3aeaf2766156fba35589a804ffb9d30e0.tar.bz2
*** empty log message ***
From-SVN: r634
-rw-r--r--gcc/config/sparc/sparc.h51
-rw-r--r--gcc/config/svr4.h30
2 files changed, 42 insertions, 39 deletions
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index 150d1bd..9c635c6 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -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 ();
+/* 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
diff --git a/gcc/config/svr4.h b/gcc/config/svr4.h
index e7e32d9..2859ce4 100644
--- a/gcc/config/svr4.h
+++ b/gcc/config/svr4.h
@@ -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