| Submitter | Yao Qi |
|---|---|
| Date | Aug. 1, 2010, 8:36 a.m. |
| Message ID | <20100801083614.GA2569@qiyaows> |
| Download | mbox | patch |
| Permalink | /patch/60443/ |
| State | New |
| Headers | show |
Comments
In message <20100801083614.GA2569@qiyaows>
Yao Qi <yao@codesourcery.com> wrote:
> This patch fixes generated wrong instructions reported in PR45094,
> which is caused by typo.
>
> Tested on arm-unknown-linux-gnueabi, fixes the 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);
^^^
Typo (one 'r') ?
> }
> 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)
John.
Patch
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" } } */
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.