aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2005-06-08 12:23:07 -0700
committerRichard Henderson <rth@gcc.gnu.org>2005-06-08 12:23:07 -0700
commit2b4f149bc963d27f18019552bf7ce0adce1366ab (patch)
treeb176ccf80d5227f85de3efbbad732274e5b8ccd1
parentfdeeef7f2aed05eb2757871391693f555d866533 (diff)
downloadgcc-2b4f149bc963d27f18019552bf7ce0adce1366ab.zip
gcc-2b4f149bc963d27f18019552bf7ce0adce1366ab.tar.gz
gcc-2b4f149bc963d27f18019552bf7ce0adce1366ab.tar.bz2
ia64.h (FUNCTION_PROFILER): Move implementation ...
* config/ia64/ia64.h (FUNCTION_PROFILER): Move implementation ... * config/ia64/ia64.c (ia64_output_function_profiler): ... here; add unwind markup. * config/ia64/ia64-protos.h (ia64_output_function_profiler): Declare. From-SVN: r100774
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/ia64/ia64-protos.h1
-rw-r--r--gcc/config/ia64/ia64.c27
-rw-r--r--gcc/config/ia64/ia64.h20
4 files changed, 37 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9ad8e44..2d5c57c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2005-06-08 Richard Henderson <rth@redhat.com>
+
+ * config/ia64/ia64.h (FUNCTION_PROFILER): Move implementation ...
+ * config/ia64/ia64.c (ia64_output_function_profiler): ... here; add
+ unwind markup.
+ * config/ia64/ia64-protos.h (ia64_output_function_profiler): Declare.
+
2005-06-08 Joseph S. Myers <joseph@codesourcery.com>
* config/sol2-c.c (cmn_err_char_table): Allow width for %b
diff --git a/gcc/config/ia64/ia64-protos.h b/gcc/config/ia64/ia64-protos.h
index 31b854c..7b097bf 100644
--- a/gcc/config/ia64/ia64-protos.h
+++ b/gcc/config/ia64/ia64-protos.h
@@ -113,3 +113,4 @@ extern enum direction ia64_hpux_function_arg_padding (enum machine_mode, tree);
#endif /* ARGS_SIZE_RTX */
extern void ia64_hpux_handle_builtin_pragma (struct cpp_reader *);
+extern void ia64_output_function_profiler (FILE *, int);
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index d175a84..5297f5e 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -8551,4 +8551,31 @@ ia64_vector_mode_supported_p (enum machine_mode mode)
}
}
+void
+ia64_output_function_profiler (FILE *file, int labelno)
+{
+ char buf[20];
+ ASM_GENERATE_INTERNAL_LABEL (buf, "LP", labelno);
+
+ if (TARGET_GNU_AS)
+ fputs ("\t.prologue 4, r40\n", file);
+ else
+ fputs ("\t.prologue\n\t.save ar.pfs, r40\n", file);
+ fputs ("\talloc out0 = ar.pfs, 8, 0, 4, 0\n", file);
+ fputs ("\t.save rp, r42\n", file);
+ fputs ("\tmov out2 = b0\n\t;;\n", file);
+ fputs ("\t.body\n", file);
+ if (TARGET_AUTO_PIC)
+ fputs ("\tmovl out3 = @gprel(", file);
+ else
+ fputs ("\taddl out3 = @ltoff(", file);
+ assemble_name (file, buf);
+ if (TARGET_AUTO_PIC)
+ fputs (")\n", file);
+ else
+ fputs ("), r1\n", file);
+ fputs ("\tmov out1 = r1\n", file);
+ fputs ("\tbr.call.sptk.many b0 = _mcount\n\t;;\n", file);
+}
+
#include "gt-ia64.h"
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h
index 3bef0d3..b9b431a8 100644
--- a/gcc/config/ia64/ia64.h
+++ b/gcc/config/ia64/ia64.h
@@ -1265,24 +1265,8 @@ do { \
call the profiling subroutine `mcount'. */
#undef FUNCTION_PROFILER
-#define FUNCTION_PROFILER(FILE, LABELNO) \
-do { \
- char buf[20]; \
- ASM_GENERATE_INTERNAL_LABEL (buf, "LP", LABELNO); \
- fputs ("\talloc out0 = ar.pfs, 8, 0, 4, 0\n", FILE); \
- if (TARGET_AUTO_PIC) \
- fputs ("\tmovl out3 = @gprel(", FILE); \
- else \
- fputs ("\taddl out3 = @ltoff(", FILE); \
- assemble_name (FILE, buf); \
- if (TARGET_AUTO_PIC) \
- fputs (");;\n", FILE); \
- else \
- fputs ("), r1;;\n", FILE); \
- fputs ("\tmov out1 = r1\n", FILE); \
- fputs ("\tmov out2 = b0\n", FILE); \
- fputs ("\tbr.call.sptk.many b0 = _mcount;;\n", FILE); \
-} while (0)
+#define FUNCTION_PROFILER(FILE, LABELNO) \
+ ia64_output_function_profiler(FILE, LABELNO)
/* Trampolines for Nested Functions. */