Commit a0798779 by J"orn Rennecke Committed by Joern Rennecke

Fix some problems that resulted in assmebler messages 'Error: pcrel too far'

Fix some problems that resulted in assmebler messages 'Error: pcrel too far'
	* sh.c (find_barrier): Fix bug in ADDR_DIFF_VEC handling.
	(split_branches): Call init_insn_lengths.

From-SVN: r19339
parent ced8dd8c
Mon Apr 20 18:19:40 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
* sh.c (find_barrier): Fix bug in ADDR_DIFF_VEC handling.
(split_branches): Call init_insn_lengths.
Mon Apr 20 07:37:49 1998 Michael Meissner <meissner@cygnus.com> Mon Apr 20 07:37:49 1998 Michael Meissner <meissner@cygnus.com>
* i386.c: Include expr.h to get the change_address prototype * i386.c: Include expr.h to get the change_address prototype
......
...@@ -1983,17 +1983,24 @@ find_barrier (num_mova, mova, from) ...@@ -1983,17 +1983,24 @@ find_barrier (num_mova, mova, from)
{ {
if (num_mova) if (num_mova)
num_mova--; num_mova--;
if (found_barrier == good_barrier) if (barrier_align (next_real_insn (from)) == CACHE_LOG)
{ {
/* We have just passed the barrier in front front of the /* We have just passed the barrier in front front of the
ADDR_DIFF_VEC. Since the ADDR_DIFF_VEC is accessed ADDR_DIFF_VEC, which is stored in found_barrier. Since
as data, just like our pool constants, this is a good the ADDR_DIFF_VEC is accessed as data, just like our pool
opportunity to accommodate what we have gathered so far. constants, this is a good opportunity to accommodate what
we have gathered so far.
If we waited any longer, we could end up at a barrier in If we waited any longer, we could end up at a barrier in
front of code, which gives worse cache usage for separated front of code, which gives worse cache usage for separated
instruction / data caches. */ instruction / data caches. */
good_barrier = found_barrier;
break; break;
} }
else
{
rtx body = PATTERN (from);
inc = XVECLEN (body, 1) * GET_MODE_SIZE (GET_MODE (body));
}
} }
if (found_si) if (found_si)
...@@ -3196,6 +3203,10 @@ split_branches (first) ...@@ -3196,6 +3203,10 @@ split_branches (first)
delete_insn (far_branch_list->far_label); delete_insn (far_branch_list->far_label);
far_branch_list = far_branch_list->prev; far_branch_list = far_branch_list->prev;
} }
/* Instruction length information is no longer valid due to the new
instructions that have been generated. */
init_insn_lengths ();
} }
/* Dump out instruction addresses, which is useful for debugging the /* Dump out instruction addresses, which is useful for debugging the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment