Patchwork [ARM] Properly count number of instructions emitted.

login
register
mail settings
Submitter zhroma@ispras.ru
Date Feb. 10, 2012, 11:39 a.m.
Message ID <CAJnFk2fsSP-Uax+=NmVS9i3jNC8oScQ3GXrHkdFou+TJoEjNkQ@mail.gmail.com>
Download mbox | patch
Permalink /patch/140573/
State New
Headers show

Comments

zhroma@ispras.ru - Feb. 10, 2012, 11:39 a.m.
This weak I investigated GCC trunk fails to compile test 186.crafty
from SPECINT2000
on ARM. File validate.c compilation leads to this:
/tmp/ccXFsLlG.s: Assembler messages:
/tmp/ccXFsLlG.s:3411: Error: bad immediate value for offset (4112)
/tmp/ccXFsLlG.s:7069: Error: bad immediate value for offset (4096)

I find a patch, which causes the problem.
http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01249.html
Ramana, you forgot to set count = 2 in one case.

This patch fixes the problem successfully.

Cross-compiler regtest showed no new failures. All SPECINT2000 tests
work correctly.

Ok for trunk?

2012-02-10  Roman Zhuykov  <zhroma@ispras.ru>

        * config/arm/arm.c (output_move_double): In one case properly
        count number of instructions that will be emitted.
---
 gcc/config/arm/arm.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
Richard Earnshaw - Feb. 10, 2012, 11:50 a.m.
On 10/02/12 11:39, Roman Zhuykov wrote:
> This weak I investigated GCC trunk fails to compile test 186.crafty
> from SPECINT2000
> on ARM. File validate.c compilation leads to this:
> /tmp/ccXFsLlG.s: Assembler messages:
> /tmp/ccXFsLlG.s:3411: Error: bad immediate value for offset (4112)
> /tmp/ccXFsLlG.s:7069: Error: bad immediate value for offset (4096)
> 
> I find a patch, which causes the problem.
> http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01249.html
> Ramana, you forgot to set count = 2 in one case.
> 
> This patch fixes the problem successfully.
> 
> Cross-compiler regtest showed no new failures. All SPECINT2000 tests
> work correctly.
> 
> Ok for trunk?
> 
> 2012-02-10  Roman Zhuykov  <zhroma@ispras.ru>
> 
>         * config/arm/arm.c (output_move_double): In one case properly
>         count number of instructions that will be emitted.

OK.

R.

Patch

diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index e2ab102..7f0dc6b 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -14205,6 +14205,9 @@  output_move_double (rtx *operands, bool emit,
int *count)
                    output_asm_insn ("sub%?\t%0, %1, %2", otherops);
                }

+             if (count)
+               *count = 2;
+
              if (TARGET_LDRD)
                return "ldr%(d%)\t%0, [%1]";