aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>1999-09-03 16:27:57 +0000
committerRichard Earnshaw <rearnsha@gcc.gnu.org>1999-09-03 16:27:57 +0000
commit2bfa88dc7944a6275dd2bd28b01a095311d6c2ff (patch)
treec5d5774096f7468fbe7925a24837bece5fe302d3
parent9c5b50b30ad2289a542816faf9de5fa2f9a6d79e (diff)
downloadgcc-2bfa88dc7944a6275dd2bd28b01a095311d6c2ff.zip
gcc-2bfa88dc7944a6275dd2bd28b01a095311d6c2ff.tar.gz
gcc-2bfa88dc7944a6275dd2bd28b01a095311d6c2ff.tar.bz2
arm.c (note_invalid_constants): No need to ignore ASMs, we can now rework these too.
* 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. From-SVN: r29084
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/arm/arm.c21
2 files changed, 20 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index edbc6d3..da0b204 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+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
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index c2d9768..69ec6fd 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -4236,10 +4236,6 @@ note_invalid_constants (insn, address)
/* 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);
@@ -4375,11 +4371,20 @@ arm_reorg (first)
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. */