diff options
Diffstat (limited to 'gcc/testsuite/gcc.target/i386/pr42589.c')
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr42589.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/i386/pr42589.c b/gcc/testsuite/gcc.target/i386/pr42589.c new file mode 100644 index 000000000..1366ef5b3 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr42589.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target ilp32 } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=i486" } } */ +/* { dg-options "-O2 -march=i486" } */ + +void +foo (unsigned long long *p) +{ + unsigned long long tmp; + tmp = *p; + tmp = (tmp >> 32) | (tmp << 32); + tmp = (((tmp & 0xff00ff00ff00ff00ULL) >> 8) + | ((tmp & 71777214294589695ULL) << 8)); + *p = (((tmp & 0xffff0000ffff0000ULL) >> 16) + | ((tmp & 281470681808895ULL) << 16)); +} + +/* { dg-final { scan-assembler-times "bswap" 2 } } */ |