diff options
author | Richard Stallman <rms@gnu.org> | 1992-03-30 03:49:49 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-03-30 03:49:49 +0000 |
commit | 4b69d2a3aeaf2766156fba35589a804ffb9d30e0 (patch) | |
tree | 4129b6f17f80a10eb6f97d9c283172fcb132b3ab | |
parent | 2525c7828207fff10eb6d9427d9e83077ca3d9b6 (diff) | |
download | gcc-4b69d2a3aeaf2766156fba35589a804ffb9d30e0.zip gcc-4b69d2a3aeaf2766156fba35589a804ffb9d30e0.tar.gz gcc-4b69d2a3aeaf2766156fba35589a804ffb9d30e0.tar.bz2 |
*** empty log message ***
From-SVN: r634
-rw-r--r-- | gcc/config/sparc/sparc.h | 51 | ||||
-rw-r--r-- | gcc/config/svr4.h | 30 |
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 |