This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] RS6000 : Fix insvsi_internal1



insvsi_internal1 pattern incorrectly calculates last operand. This is exposed by the test case attached.

       * config/rs6000/rs6000.md (insvsi_internal1): Fix operand[1].
       * g++.dg/opt/20050511-1.C: New test.

Bootstrapped and tested on powerpc-darwin.
OK?

Thanks,
-
Devang

*** rs6000.md   2005/05/06 16:56:06
--- rs6000.md   2005/05/11 00:06:10
***************
*** 2923,2929 ****
    int size = INTVAL (operands[1]) & 31;

    operands[4] = GEN_INT (shift - start - size);
!   operands[1] = GEN_INT (start + size - 1);
    return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
  }"
    [(set_attr "type" "insert_word")])
--- 2923,2929 ----
    int size = INTVAL (operands[1]) & 31;

    operands[4] = GEN_INT (shift - start - size);
!   operands[1] = GEN_INT (start + size - 1 - shift);
    return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
  }"
    [(set_attr "type" "insert_word")])


Attachment: R4110735.diff
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]