diff options
author | Paul Brook <paul@codesourcery.com> | 2006-03-15 20:22:56 +0000 |
---|---|---|
committer | Paul Brook <pbrook@gcc.gnu.org> | 2006-03-15 20:22:56 +0000 |
commit | 34a9f549fd2e5f15666cb384a507ef7b2d39e1f3 (patch) | |
tree | 1ece02a766956940ff9772bf8826385794be242b /gcc | |
parent | a9e317ed30b00805e7c60e1607e88347d1d76175 (diff) | |
download | gcc-34a9f549fd2e5f15666cb384a507ef7b2d39e1f3.tar.gz |
arm.c (minipool_pad): New.
2006-03-15 Paul Brook <paul@codesourcery.com>
* config/arm/arm.c (minipool_pad): New.
(add_minipool_forward_ref): Unclude pool alignment padding in address
calculation.
(push_minipool_fix): Set minipool_pad.
(minipool_pad): Ditto.
From-SVN: r112099
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 13 |
2 files changed, 15 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2a05ddb43f1..e0ffaa36d81 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2006-03-15 Paul Brook <paul@codesourcery.com> + + * config/arm/arm.c (minipool_pad): New. + (add_minipool_forward_ref): Unclude pool alignment padding in address + calculation. + (push_minipool_fix): Set minipool_pad. + (minipool_pad): Ditto. + 2006-03-15 Jan-Benedict Glaw <jbglaw@lug-owl.de> * config/vax/vax.c (split_quadword_operands): Use MEM_P() diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 4e9ae1b6e3f..2e5c9c43bb8 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -7308,6 +7308,7 @@ struct minipool_fixup static Mnode * minipool_vector_head; static Mnode * minipool_vector_tail; static rtx minipool_vector_label; +static int minipool_pad; /* The linked list of all minipool fixes required for this function. */ Mfix * minipool_fix_head; @@ -7419,7 +7420,7 @@ add_minipool_forward_ref (Mfix *fix) /* If set, max_mp is the first pool_entry that has a lower constraint than the one we are trying to add. */ Mnode * max_mp = NULL; - HOST_WIDE_INT max_address = fix->address + fix->forwards; + HOST_WIDE_INT max_address = fix->address + fix->forwards - minipool_pad; Mnode * mp; /* If this fix's address is greater than the address of the first @@ -7997,12 +7998,11 @@ push_minipool_fix (rtx insn, HOST_WIDE_INT address, rtx *loc, to generate duff assembly code. */ gcc_assert (fix->forwards || fix->backwards); - /* With AAPCS/iWMMXt enabled, the pool is aligned to an 8-byte boundary. - So there might be an empty word before the start of the pool. - Hence we reduce the forward range by 4 to allow for this - possibility. */ + /* If an entry requires 8-byte alignment then assume all constant pools + require 4 bytes of padding. Trying to do this later on a per-pool + basis is awkward becuse existing pool entries have to be modified. */ if (ARM_DOUBLEWORD_ALIGN && fix->fix_size == 8) - fix->forwards -= 4; + minipool_pad = 4; if (dump_file) { @@ -8179,6 +8179,7 @@ arm_reorg (void) scan it properly. */ insn = get_insns (); gcc_assert (GET_CODE (insn) == NOTE); + minipool_pad = 0; /* Scan all the insns and record the operands that will need fixing. */ for (insn = next_nonnote_insn (insn); insn; insn = next_nonnote_insn (insn)) |