summaryrefslogtreecommitdiff
path: root/gcc/config/pdp11
diff options
context:
space:
mode:
authorneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>2001-07-06 18:40:17 +0000
committerneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>2001-07-06 18:40:17 +0000
commit17d9b0c371c482b48e92d6556c5f4b2096a4c6e7 (patch)
tree0ff4b9170093f108e4988c09e21e8b9ff5dd462a /gcc/config/pdp11
parent8faa719fbc0bd299bfbc7005ddef0e3a734f49f0 (diff)
downloadgcc-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.h26
-rw-r--r--gcc/config/pdp11/pdp11-protos.h2
-rw-r--r--gcc/config/pdp11/pdp11.c70
-rw-r--r--gcc/config/pdp11/pdp11.h13
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; \