diff options
author | Richard Earnshaw <rearnsha@arm.com> | 1999-09-03 16:27:57 +0000 |
---|---|---|
committer | Richard Earnshaw <rearnsha@gcc.gnu.org> | 1999-09-03 16:27:57 +0000 |
commit | 2bfa88dc7944a6275dd2bd28b01a095311d6c2ff (patch) | |
tree | c5d5774096f7468fbe7925a24837bece5fe302d3 /gcc | |
parent | 9c5b50b30ad2289a542816faf9de5fa2f9a6d79e (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 21 |
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. */ |