+Fri Sep 3 17:24:31 1999 Richard Earnshaw <rearnsha@arm.com>
+
+ * arm.c (note_invalid_constants): No need to ignore ASMs, we can
+ now rework these too.
+ (arm_reorg): If an insn can't reach the end of the current pool,
+ ensure that we emit that pool before the insn.
+
Fri Sep 3 09:14:32 1999 Marc Espie <espie@tetto.liafa.jussieu.fr>
* tlink.c (scan_linker_output): Skip the initial underscore in
/* Extract the operands of the insn */
extract_insn(insn);
- /* If this is an asm, we can't do anything about it (or can we?) */
- if (INSN_CODE (insn) < 0)
- return;
-
/* Find the alternative selected */
if (! constrain_operands (1))
fatal_insn_not_found (insn);
barrier = last_barrier->insn;
ftmp = last_barrier;
}
+ /* ftmp is last fix that we can fit into this pool and we
+ failed to find a barrier that we could use. Insert a new
+ barrier in the code and arrange to jump around it. */
else
- /* ftmp is last fix that we can fit into this pool and we
- failed to find a barrier that we could use. Insert a new
- barrier in the code and arrange to jump around it. */
- barrier = find_barrier (ftmp->insn, max_range - ftmp->address);
+ {
+ /* Check that there isn't another fix that is in range that
+ we couldn't fit into this pool because the pool was
+ already too large: we need to put the pool before such an
+ instruction. */
+ if (ftmp->next && ftmp->next->address < max_range)
+ max_range = ftmp->address;
+
+ barrier = find_barrier (ftmp->insn, max_range - ftmp->address);
+ }
/* Scan over the fixes we have identified for this pool, fixing them
up and adding the constants to the pool itself. */