]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
i386.md (*bswapdi2_rex): Renamed from bswapdi2.
authorRoger Sayle <roger@eyesopen.com>
Mon, 12 Feb 2007 18:41:08 +0000 (18:41 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Mon, 12 Feb 2007 18:41:08 +0000 (18:41 +0000)
* config/i386/i386.md (*bswapdi2_rex): Renamed from bswapdi2.
(bswapdi2): New define_expand to implement 32-bit implementation.

* gcc.target/i386/builtin-bswap-3.c: New test case.

From-SVN: r121851

gcc/ChangeLog
gcc/config/i386/i386.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/builtin-bswap-3.c [new file with mode: 0644]

index bda22d0f736449914db4bea4ecb9ab977218f7e2..486cd9358f8a828da4330b6c89637b29dde9624f 100644 (file)
@@ -1,3 +1,8 @@
+2007-02-12  Roger Sayle  <roger@eyesopen.com>
+
+       * config/i386/i386.md (*bswapdi2_rex): Renamed from bswapdi2.
+       (bswapdi2): New define_expand to implement 32-bit implementation.
+
 2007-02-12  Nick Clifton  <nickc@redhat.com>
 
        * doc/invoke.texi (Overall Options): Document --help=.
index 19cd0913ffc4f4f51f0e2f20742c0cb0aa5b271e..04d013666ff102375d19c532de7f640ad0248fd7 100644 (file)
   [(set_attr "prefix_0f" "1")
    (set_attr "length" "2")])
 
-(define_insn "bswapdi2"
+(define_insn "*bswapdi2_rex"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (bswap:DI (match_operand:DI 1 "register_operand" "0")))
    (clobber (reg:CC FLAGS_REG))]
   [(set_attr "prefix_0f" "1")
    (set_attr "length" "3")])
 
+(define_expand "bswapdi2"
+  [(parallel [(set (match_operand:DI 0 "register_operand" "")
+                  (bswap:DI (match_operand:DI 1 "register_operand" "")))
+             (clobber (reg:CC FLAGS_REG))])]
+  "TARGET_BSWAP"
+  {
+    if (!TARGET_64BIT)
+      {
+       rtx tmp1, tmp2;
+       tmp1 = gen_reg_rtx (SImode);
+       tmp2 = gen_reg_rtx (SImode);
+       emit_insn (gen_bswapsi2 (tmp1, gen_lowpart (SImode, operands[1])));
+       emit_insn (gen_bswapsi2 (tmp2, gen_highpart (SImode, operands[1])));
+       emit_move_insn (gen_lowpart (SImode, operands[0]), tmp2);
+       emit_move_insn (gen_highpart (SImode, operands[0]), tmp1);
+       DONE;
+      }
+  })
+
 (define_expand "clzdi2"
   [(parallel
      [(set (match_operand:DI 0 "register_operand" "")
index 822bcff203bd214fdd6ddb7bb70196178c188c25..2edb100babf471c84f6d80cc36a5a6fb6f3bac4a 100644 (file)
@@ -1,3 +1,7 @@
+2007-02-12  Roger Sayle  <roger@eyesopen.com>
+
+       * gcc.target/i386/builtin-bswap-3.c: New test case.
+
 2007-02-12  Dorit Nuzman  <dorit@il.ibm.com>
 
        PR tree-optimization/29145
diff --git a/gcc/testsuite/gcc.target/i386/builtin-bswap-3.c b/gcc/testsuite/gcc.target/i386/builtin-bswap-3.c
new file mode 100644 (file)
index 0000000..eaea537
--- /dev/null
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=nocona" } */
+/* { dg-final { scan-assembler-not "bswapdi2" } } */
+
+long long foo (long long x)
+{
+  return __builtin_bswap64 (x);
+}
+