mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-11 01:30:55 +08:00
re PR target/45094 ([arm] wrong instructions for dword move in some cases)
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. From-SVN: r163338
This commit is contained in:
parent
38e3c1e18e
commit
8019fcfb55
@ -1,3 +1,9 @@
|
||||
2010-08-18 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
PR target/45094
|
||||
* config/arm/arm.c (output_move_double): Fix typo generating
|
||||
instructions ('ldr'->'str').
|
||||
|
||||
2010-08-18 Maxim Kuvyrkov <maxim@codesourcery.com>
|
||||
|
||||
PR rtl-optimization/42575
|
||||
|
@ -12944,13 +12944,13 @@ output_move_double (rtx *operands)
|
||||
{
|
||||
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 ("str%?\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)
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-08-18 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
PR target/45094
|
||||
* gcc.target/arm/pr45094.c: New test.
|
||||
|
||||
2010-08-18 Maxim Kuvyrkov <maxim@codesourcery.com>
|
||||
|
||||
* gcc.target/arm/mla-1.c: Use thumb-friendly architecture.
|
||||
|
27
gcc/testsuite/gcc.target/arm/pr45094.c
Normal file
27
gcc/testsuite/gcc.target/arm/pr45094.c
Normal file
@ -0,0 +1,27 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-require-effective-target arm_neon_hw } */
|
||||
/* { dg-options "-O2 -mcpu=cortex-a8" } */
|
||||
/* { dg-add-options arm_neon } */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
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);
|
||||
|
||||
if (!buffer[0])
|
||||
abort();
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user