From patchwork Sun Aug 1 08:36:15 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [ARM] Fix PR45094 Date: Sat, 31 Jul 2010 22:36:15 -0000 From: Yao Qi X-Patchwork-Id: 60443 Message-Id: <20100801083614.GA2569@qiyaows> To: gcc-patches@gcc.gnu.org This patch fixes generated wrong instructions reported in PR45094, which is caused by typo. Tested on arm-unknown-linux-gnueabi, fixes the new test. OK for mainline? ChangeLog: gcc/ PR target/45094 * config/arm/arm.c (output_move_double): Fix typo generating instructions ('ldr'->'str'). gcc/testsuite/ PR target/45094 * gcc.target/arm/pr45094.c: New test. gcc/ PR target/45094 * config/arm/arm.c (output_move_double): Fix typo generating instructions ('ldr'->'str'). gcc/testsuite/ PR target/45094 * gcc.target/arm/pr45094.c: New test. Index: config/arm/arm.c =================================================================== --- config/arm/arm.c (revision 162792) +++ config/arm/arm.c (working copy) @@ -12570,13 +12570,13 @@ { if (GET_CODE (XEXP (operands[0], 0)) == PRE_MODIFY) { - output_asm_insn ("ldr%?\t%0, [%1, %2]!", otherops); - output_asm_insn ("ldr%?\t%H0, [%1, #4]", otherops); + output_asm_insn ("str%?\t%0, [%1, %2]!", otherops); + output_asm_insn ("strr%?\t%H0, [%1, #4]", otherops); } else { - output_asm_insn ("ldr%?\t%H0, [%1, #4]", otherops); - output_asm_insn ("ldr%?\t%0, [%1], %2", otherops); + output_asm_insn ("str%?\t%H0, [%1, #4]", otherops); + output_asm_insn ("str%?\t%0, [%1], %2", otherops); } } else if (GET_CODE (XEXP (operands[0], 0)) == PRE_MODIFY) Index: testsuite/gcc.target/arm/pr45094.c =================================================================== --- testsuite/gcc.target/arm/pr45094.c (revision 0) +++ testsuite/gcc.target/arm/pr45094.c (revision 0) @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp" } */ + +long long buffer[32]; + +void __attribute__((noinline)) f(long long *p, int n) +{ + while (--n >= 0) { + *p = 1; + p += 32; + } +} + +int main(void) +{ + f(buffer, 1); + return !buffer[0]; +} + +/* { dg-final { scan-assembler "str" } } */