diff options
author | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-07-06 18:40:17 +0000 |
---|---|---|
committer | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-07-06 18:40:17 +0000 |
commit | 17d9b0c371c482b48e92d6556c5f4b2096a4c6e7 (patch) | |
tree | 0ff4b9170093f108e4988c09e21e8b9ff5dd462a /gcc/config/pdp11 | |
parent | 8faa719fbc0bd299bfbc7005ddef0e3a734f49f0 (diff) | |
download | gcc-17d9b0c371c482b48e92d6556c5f4b2096a4c6e7.tar.gz |
* Makefile.in (final.o): Depend on target.h.
* final.c: Include target.h.
(default_function_pro_epilogue): New.
(final_start_function): Use target structure for function prologues.
(final_end_function): Use target structure for function epilogues.
* fold-const.c (real_hex_to_f): Constify s and p.
* output.h (default_function_pro_epilogue): New.
* real.h (real_hex_to_f): Update prototype.
* target-def.h (TARGET_ASM_FUNCTION_PROLOGUE,
TARGET_ASM_FUNCTION_EPILOGUE, TARGET_ASM_OUT): New.
(TARGET_INITIALIZER): Update.
* target.h (gcc_target): Add struct asm_out.
* doc/tm.texi: Update.
config:
Update each arch to use TARGET_ASM_FUNCTION_PROLOGUE and
TARGET_ASM_FUNCTION_EPILOGUE. Move macro code to functions
in cpu/cpu.c, or rename old functions consistently. Take
a HOST_WIDE INT not an int as the SIZE parameter. Remove now
redundant macros and prototypes. Make new functions static.
* 1750a/1750a.c: Similarly.
* 1750a/1750a.h: Similarly.
* a29k/a29k-protos.h: Similarly.
* a29k/a29k.c: Similarly.
* a29k/a29k.h: Similarly.
* arc/arc-protos.h: Similarly.
* arc/arc.c: Similarly.
* arc/arc.h: Similarly.
* arm/arm-protos.h: Similarly.
* arm/arm.c: Similarly.
* arm/arm.h: Similarly.
* avr/avr-protos.h: Similarly.
* avr/avr.c: Similarly.
* avr/avr.h: Similarly.
* clipper/clipper-protos.h: Similarly.
* clipper/clipper.c: Similarly.
* clipper/clipper.h: Similarly.
* convex/convex.c: Similarly.
* convex/convex.h: Similarly.
* d30v/d30v-protos.h: Similarly.
* d30v/d30v.c: Similarly.
* d30v/d30v.h: Similarly.
* d30v/d30v.md: Similarly.
* dsp16xx/dsp16xx-protos.h: Similarly.
* dsp16xx/dsp16xx.c: Similarly.
* dsp16xx/dsp16xx.h: Similarly.
* elxsi/elxsi.c: Similarly.
* elxsi/elxsi.h: Similarly.
* fr30/fr30.c: Similarly.
* fr30/fr30.md: Similarly.
* h8300/h8300-protos.h: Similarly.
* h8300/h8300.c: Similarly.
* h8300/h8300.h: Similarly.
* i370/i370-protos.h: Similarly.
* i370/i370.c: Similarly.
* i370/i370.h: Similarly.
* i386/i386.c: Similarly.
* i386/osf1elf.h: Similarly.
* i386/osfrose.h: Similarly.
* i860/i860-protos.h: Similarly.
* i860/i860.c: Similarly.
* i860/i860.h: Similarly.
* i960/i960-protos.h: Similarly.
* i960/i960.c: Similarly.
* i960/i960.h: Similarly.
* ia64/ia64-protos.h: Similarly.
* ia64/ia64.c: Similarly.
* ia64/ia64.h: Similarly.
* m32r/m32r-protos.h: Similarly.
* m32r/m32r.c: Similarly.
* m32r/m32r.h: Similarly.
* m68hc11/m68hc11-protos.h: Similarly.
* m68hc11/m68hc11.c: Similarly.
* m68hc11/m68hc11.h: Similarly.
* m68k/crds.h: Similarly.
* m68k/dpx2.h: Similarly.
* m68k/m68k-protos.h: Similarly.
* m68k/m68k.c: Similarly.
* m68k/m68k.h: Similarly.
* m68k/news.h: Similarly.
* m88k/m88k-protos.h: Similarly.
* m88k/m88k.c: Similarly.
* m88k/m88k.h: Similarly.
* mips/mips-protos.h: Similarly.
* mips/mips.c: Similarly.
* mips/mips.h: Similarly.
* ns32k/merlin.h: Similarly.
* ns32k/ns32k.c: Similarly.
* ns32k/ns32k.h: Similarly.
* ns32k/tek6000.h: Similarly.
* pa/pa-protos.h: Similarly.
* pa/pa.c: Similarly.
* pa/pa.h: Similarly.
* pdp11/2bsd.h: Similarly.
* pdp11/pdp11-protos.h: Similarly.
* pdp11/pdp11.c: Similarly.
* pdp11/pdp11.h: Similarly.
* romp/romp-protos.h: Similarly.
* romp/romp.c: Similarly.
* romp/romp.h: Similarly.
* rs6000/rs6000-protos.h: Similarly.
* rs6000/rs6000.c: Similarly.
* rs6000/rs6000.h: Similarly.
* rs6000/sysv4.h: Similarly.
* sh/sh-protos.h: Similarly.
* sh/sh.c: Similarly.
* sh/sh.h: Similarly.
* sparc/sparc-protos.h: Similarly.
* sparc/sparc.c: Similarly.
* sparc/sparc.h: Similarly.
* vax/vax.c: Similarly.
* vax/vax.h: Similarly.
* vax/vms.h: Similarly.
* we32k/we32k.c: Similarly.
* we32k/we32k.h: Similarly.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@43817 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/pdp11')
-rw-r--r-- | gcc/config/pdp11/2bsd.h | 26 | ||||
-rw-r--r-- | gcc/config/pdp11/pdp11-protos.h | 2 | ||||
-rw-r--r-- | gcc/config/pdp11/pdp11.c | 70 | ||||
-rw-r--r-- | gcc/config/pdp11/pdp11.h | 13 |
4 files changed, 57 insertions, 54 deletions
diff --git a/gcc/config/pdp11/2bsd.h b/gcc/config/pdp11/2bsd.h index 117992a82f2..1994d803a5b 100644 --- a/gcc/config/pdp11/2bsd.h +++ b/gcc/config/pdp11/2bsd.h @@ -19,18 +19,7 @@ along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* This macro generates the assembly code for function entry. */ -#undef FUNCTION_PROLOGUE -#define FUNCTION_PROLOGUE(FILE, SIZE) \ -do { \ -fprintf(FILE, "\tjsr r5, csv\n"); \ -if ((SIZE) != 0) \ - { \ - fprintf(FILE, "\t/*abuse empty parameter slot for locals!*/\n"); \ - if ((SIZE) > 2) \ - fprintf(FILE, "\tsub $%d, sp\n", (SIZE)-2); \ - }; \ -} while (0) +#define TWO_BSD /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function, the stack pointer does not matter. The value is tested only in @@ -40,19 +29,6 @@ if ((SIZE) != 0) \ #undef EXIT_IGNORE_STACK #define EXIT_IGNORE_STACK 1 -/* This macro generates the assembly code for function exit, - on machines that need it. If FUNCTION_EPILOGUE is not defined - then individual return instructions are generated for each - return statement. Args are same as for FUNCTION_PROLOGUE. -*/ - -#undef FUNCTION_EPILOGUE -#define FUNCTION_EPILOGUE(FILE, SIZE) \ -do { \ -fprintf(FILE, "\t/* SP ignored by cret? */\n"); \ -fprintf(FILE, "\tjmp cret\n"); \ -} while (0) - #undef INITIAL_FRAME_POINTER_OFFSET #define INITIAL_FRAME_POINTER_OFFSET(DEPTH_VAR) \ { \ diff --git a/gcc/config/pdp11/pdp11-protos.h b/gcc/config/pdp11/pdp11-protos.h index ddac12d478d..e2031c3ab81 100644 --- a/gcc/config/pdp11/pdp11-protos.h +++ b/gcc/config/pdp11/pdp11-protos.h @@ -40,6 +40,4 @@ extern int comparison_operator_index PARAMS ((rtx)); #endif /* RTX_CODE */ extern void output_ascii PARAMS ((FILE *, const char *, int)); -extern void output_function_epilogue PARAMS ((FILE *, int)); -extern void output_function_prologue PARAMS ((FILE *, int)); extern const char *output_jump PARAMS ((const char *, const char *, int)); diff --git a/gcc/config/pdp11/pdp11.c b/gcc/config/pdp11/pdp11.c index a06f17faf43..2fdf0b05796 100644 --- a/gcc/config/pdp11/pdp11.c +++ b/gcc/config/pdp11/pdp11.c @@ -52,8 +52,14 @@ int current_first_parm_offset; static rtx find_addr_reg PARAMS ((rtx)); static const char *singlemove_string PARAMS ((rtx *)); +static void pdp11_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); +static void pdp11_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); /* Initialize the GCC target structure. */ +#undef TARGET_ASM_FUNCTION_PROLOGUE +#define TARGET_ASM_FUNCTION_PROLOGUE pdp11_output_function_prologue +#undef TARGET_ASM_FUNCTION_EPILOGUE +#define TARGET_ASM_FUNCTION_EPILOGUE pdp11_output_function_epilogue struct gcc_target target = TARGET_INITIALIZER; @@ -102,23 +108,43 @@ expand_shift_operand (op, mode) knowing which registers should not be saved even if used. */ -void -output_function_prologue(stream, size) - FILE *stream; - int size; +#ifdef TWO_BSD + +static void +pdp11_output_function_prologue (stream, size) + FILE *stream; + HOST_WIDE_INT size; { - int fsize = ((size) + 1) & ~1; - int regno; + fprintf (stream, "\tjsr r5, csv\n"); + if (size) + { + fprintf (stream, "\t/*abuse empty parameter slot for locals!*/\n"); + if (size > 2) + fprintf(stream, "\tsub $%d, sp\n", size - 2); + } +} + +#else /* !TWO_BSD */ + +static void +pdp11_output_function_prologue (stream, size) + FILE *stream; + HOST_WIDE_INT size; +{ + HOST_WIDE_INT fsize = ((size) + 1) & ~1; + int regno; int via_ac = -1; - - fprintf (stream, "\n\t; /* function prologue %s*/\n", current_function_name); + + fprintf (stream, + "\n\t; /* function prologue %s*/\n", current_function_name); /* if we are outputting code for main, the switch FPU to right mode if TARGET_FPU */ if (MAIN_NAME_P (DECL_NAME (current_function_decl)) && TARGET_FPU) { - fprintf(stream, "\t;/* switch cpu to double float, single integer */\n"); + fprintf(stream, + "\t;/* switch cpu to double float, single integer */\n"); fprintf(stream, "\tsetd\n"); fprintf(stream, "\tseti\n\n"); } @@ -176,6 +202,8 @@ output_function_prologue(stream, size) fprintf (stream, "\t;/* end of prologue */\n\n"); } +#endif /* !TWO_BSD */ + /* The function epilogue should not depend on the current stack pointer! It should use the frame pointer only. This is mandatory because @@ -195,13 +223,25 @@ output_function_prologue(stream, size) maybe as option if you want to generate code for kernel mode? */ +#ifdef TWO_BSD + +static void +pdp11_output_function_epilogue (stream, size) + FILE *stream; + HOST_WIDE_INT size ATTRIBUTE_UNUSED; +{ + fprintf (stream, "\t/* SP ignored by cret? */\n"); + fprintf (stream, "\tjmp cret\n"); +} -void -output_function_epilogue(stream, size) - FILE *stream; - int size; +#else /* !TWO_BSD */ + +static void +pdp11_output_function_epilogue (stream, size) + FILE *stream; + HOST_WIDE_INT size; { - int fsize = ((size) + 1) & ~1; + HOST_WIDE_INT fsize = ((size) + 1) & ~1; int i, j, k; int via_ac; @@ -299,6 +339,8 @@ output_function_epilogue(stream, size) fprintf (stream, "\trts pc\n"); fprintf (stream, "\t;/* end of epilogue*/\n\n\n"); } + +#endif /* !TWO_BSD */ /* Return the best assembler insn template for moving operands[1] into operands[0] as a fullword. */ diff --git a/gcc/config/pdp11/pdp11.h b/gcc/config/pdp11/pdp11.h index 58ce77ff6b3..f931b45da49 100644 --- a/gcc/config/pdp11/pdp11.h +++ b/gcc/config/pdp11/pdp11.h @@ -649,10 +649,6 @@ maybe ac0 ? - as option someday! */ #define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) 0 -/* This macro generates the assembly code for function entry. */ -#define FUNCTION_PROLOGUE(FILE, SIZE) \ - output_function_prologue(FILE, SIZE); - /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ @@ -668,15 +664,6 @@ extern int may_call_alloca; #define EXIT_IGNORE_STACK 1 -/* This macro generates the assembly code for function exit, - on machines that need it. If FUNCTION_EPILOGUE is not defined - then individual return instructions are generated for each - return statement. Args are same as for FUNCTION_PROLOGUE. -*/ - -#define FUNCTION_EPILOGUE(FILE, SIZE) \ - output_function_epilogue(FILE, SIZE); - #define INITIAL_FRAME_POINTER_OFFSET(DEPTH_VAR) \ { \ int offset, regno; \ |