aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>2003-02-01 04:26:29 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2003-02-01 04:26:29 +0000
commit17e6098e90af55cf52a4001ccfabe4d357901d0d (patch)
tree2aac4c5f8cf5b473db84f8012c0ae91e0eaafb64 /gcc
parentccbaec264d2e76bad78518ec8cf473e3fb8e2049 (diff)
downloadgcc-17e6098e90af55cf52a4001ccfabe4d357901d0d.zip
gcc-17e6098e90af55cf52a4001ccfabe4d357901d0d.tar.gz
gcc-17e6098e90af55cf52a4001ccfabe4d357901d0d.tar.bz2
pa.c (pa_output_function_prologue, [...]): Move updating of total_code_bytes from prologue to epilogue.
* pa.c (pa_output_function_prologue, pa_output_function_epilogue): Move updating of total_code_bytes from prologue to epilogue. From-SVN: r62233
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/pa/pa.c50
2 files changed, 34 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bd9a73d..fa5db28 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2003-01-31 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * pa.c (pa_output_function_prologue, pa_output_function_epilogue): Move
+ updating of total_code_bytes from prologue to epilogue.
+
2003-01-31 Ulrich Weigand <uweigand@de.ibm.com>
* reload.c (find_reloads): Do not use the mode specified in the insn
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index 21afcbb..aeccafb 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -3306,26 +3306,6 @@ pa_output_function_prologue (file, size)
fputs ("\n\t.ENTRY\n", file);
- /* If we're using GAS and SOM, and not using the portable runtime model,
- or function sections, then we don't need to accumulate the total number
- of code bytes. */
- if ((TARGET_GAS && TARGET_SOM && ! TARGET_PORTABLE_RUNTIME)
- || flag_function_sections)
- total_code_bytes = 0;
- else if (INSN_ADDRESSES_SET_P ())
- {
- unsigned long old_total = total_code_bytes;
-
- total_code_bytes += INSN_ADDRESSES (INSN_UID (get_last_nonnote_insn ()));
- total_code_bytes += FUNCTION_BOUNDARY / BITS_PER_UNIT;
-
- /* Be prepared to handle overflows. */
- if (old_total > total_code_bytes)
- total_code_bytes = -1;
- }
- else
- total_code_bytes = -1;
-
remove_useless_addtr_insns (get_insns (), 0);
}
@@ -3647,6 +3627,7 @@ pa_output_function_epilogue (file, size)
FILE *file;
HOST_WIDE_INT size ATTRIBUTE_UNUSED;
{
+ int last_address = 0;
rtx insn = get_last_insn ();
/* hppa_expand_epilogue does the dirty work now. We just need
@@ -3669,9 +3650,36 @@ pa_output_function_epilogue (file, size)
/* If insn is a CALL_INSN, then it must be a call to a volatile
function (otherwise there would be epilogue insns). */
if (insn && GET_CODE (insn) == CALL_INSN)
- fputs ("\tnop\n", file);
+ {
+ fputs ("\tnop\n", file);
+ last_address += 4;
+ }
fputs ("\t.EXIT\n\t.PROCEND\n", file);
+
+ /* Finally, update the total number of code bytes output so far. */
+ if ((TARGET_PORTABLE_RUNTIME || !TARGET_GAS || !TARGET_SOM)
+ && !flag_function_sections)
+ {
+ if (INSN_ADDRESSES_SET_P ())
+ {
+ unsigned long old_total = total_code_bytes;
+
+ insn = get_last_nonnote_insn ();
+ last_address += INSN_ADDRESSES (INSN_UID (insn));
+ if (INSN_P (insn))
+ last_address += insn_default_length (insn);
+
+ total_code_bytes += last_address;
+ total_code_bytes += FUNCTION_BOUNDARY / BITS_PER_UNIT;
+
+ /* Be prepared to handle overflows. */
+ if (old_total > total_code_bytes)
+ total_code_bytes = -1;
+ }
+ else
+ total_code_bytes = -1;
+ }
}
void