diff options
author | Roger Sayle <roger@eyesopen.com> | 2007-02-12 18:41:08 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2007-02-12 18:41:08 +0000 |
commit | d8d25baea642cfd4e4bcb4d4b9e3f2b12921ffac (patch) | |
tree | 9fa9fd8c2414671a6b29237668191229d2e2966a /gcc | |
parent | c662432e8cb909295011dc548cb238dd1586f702 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 21 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/builtin-bswap-3.c | 9 |
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); +} + |