aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2007-02-12 18:41:08 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2007-02-12 18:41:08 +0000
commitd8d25baea642cfd4e4bcb4d4b9e3f2b12921ffac (patch)
tree9fa9fd8c2414671a6b29237668191229d2e2966a /gcc
parentc662432e8cb909295011dc548cb238dd1586f702 (diff)
downloadgcc-d8d25baea642cfd4e4bcb4d4b9e3f2b12921ffac.zip
gcc-d8d25baea642cfd4e4bcb4d4b9e3f2b12921ffac.tar.gz
gcc-d8d25baea642cfd4e4bcb4d4b9e3f2b12921ffac.tar.bz2
i386.md (*bswapdi2_rex): Renamed from bswapdi2.
* 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.md21
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/i386/builtin-bswap-3.c9
4 files changed, 38 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bda22d0..486cd93 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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=.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 19cd091..04d0136 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -14973,7 +14973,7 @@
[(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))]
@@ -14982,6 +14982,25 @@
[(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" "")
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 822bcff..2edb100 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..eaea537
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/builtin-bswap-3.c
@@ -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);
+}
+