diff options
author | Richard Henderson <rth@redhat.com> | 2005-06-08 12:23:07 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2005-06-08 12:23:07 -0700 |
commit | 2b4f149bc963d27f18019552bf7ce0adce1366ab (patch) | |
tree | b176ccf80d5227f85de3efbbad732274e5b8ccd1 | |
parent | fdeeef7f2aed05eb2757871391693f555d866533 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/ia64/ia64-protos.h | 1 | ||||
-rw-r--r-- | gcc/config/ia64/ia64.c | 27 | ||||
-rw-r--r-- | gcc/config/ia64/ia64.h | 20 |
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. */ |