| /* Check that the rotcr instruction is generated. */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2" } */ |
| /* { dg-final { scan-assembler-times "rotcr" 25 } } */ |
| /* { dg-final { scan-assembler-times "sett" 1 } } */ |
| /* { dg-final { scan-assembler-times "shll\t" 1 } } */ |
| /* { dg-final { scan-assembler-not "and\t#1" } } */ |
| /* { dg-final { scan-assembler-not "cmp/pl" } } */ |
| |
| typedef char bool; |
| |
| long long |
| test_00 (long long a) |
| { |
| return a >> 1; |
| } |
| |
| unsigned int |
| test_01 (unsigned int a, int b, int c) |
| { |
| bool r = b == c; |
| return ((a >> 1) | (r << 31)); |
| } |
| |
| unsigned int |
| test_02 (unsigned int a, int b, int c) |
| { |
| bool r = b == c; |
| return ((a >> 2) | (r << 31)); |
| } |
| |
| unsigned int |
| test_03 (unsigned int a, int b, int c) |
| { |
| bool r = b == c; |
| return ((a >> 3) | (r << 31)); |
| } |
| |
| unsigned int |
| test_04 (unsigned int a, int b, int c) |
| { |
| bool r = b == c; |
| return ((a >> 4) | (r << 31)); |
| } |
| |
| unsigned int |
| test_05 (unsigned int a, int b, int c) |
| { |
| bool r = b == c; |
| return ((a >> 5) | (r << 31)); |
| } |
| |
| unsigned int |
| test_06 (unsigned int a, int b, int c) |
| { |
| bool r = b == c; |
| return ((a >> 6) | (r << 31)); |
| } |
| |
| unsigned int |
| test_07 (unsigned int a, int b, int c) |
| { |
| bool r = b == c; |
| return ((a >> 7) | (r << 31)); |
| } |
| |
| unsigned int |
| test_08 (unsigned int a, int b, int c) |
| { |
| bool r = b == c; |
| return ((a >> 8) | (r << 31)); |
| } |
| |
| unsigned int |
| test_09 (unsigned int a, int b, int c) |
| { |
| bool r = b == c; |
| return ((a >> 31) | (r << 31)); |
| } |
| |
| int |
| test_10 (int a, int b) |
| { |
| bool r = a == b; |
| return r << 31; |
| } |
| |
| unsigned int |
| test_11 (unsigned int a, int b) |
| { |
| /* 1x shlr, 1x rotcr */ |
| return (a >> 1) | (b << 31); |
| } |
| |
| unsigned int |
| test_12 (unsigned int a, int b) |
| { |
| return (a >> 2) | (b << 31); |
| } |
| |
| unsigned int |
| test_13 (unsigned int a, int b) |
| { |
| return (a >> 3) | (b << 31); |
| } |
| |
| unsigned int |
| test_14 (unsigned int a, int b) |
| { |
| /* 1x shll, 1x rotcr */ |
| bool r = b < 0; |
| return ((a >> 1) | (r << 31)); |
| } |
| |
| unsigned int |
| test_15 (unsigned int a, int b, int c) |
| { |
| bool r = b != c; |
| return ((a >> 1) | (r << 31)); |
| } |
| |
| unsigned int |
| test_16 (unsigned int a, int b, int c) |
| { |
| bool r = b != c; |
| return ((a >> 2) | (r << 31)); |
| } |
| |
| unsigned int |
| test_17 (unsigned int a, int b, int c) |
| { |
| bool r = b != c; |
| return ((a >> 3) | (r << 31)); |
| } |
| |
| unsigned int |
| test_18 (unsigned int a, int b, int c) |
| { |
| bool r = b != c; |
| return ((a >> 4) | (r << 31)); |
| } |
| |
| unsigned int |
| test_19 (unsigned int a, int b, int c) |
| { |
| bool r = b != c; |
| return ((a >> 5) | (r << 31)); |
| } |
| |
| unsigned int |
| test_20 (unsigned int a, int b, int c) |
| { |
| bool r = b != c; |
| return ((a >> 6) | (r << 31)); |
| } |
| |
| unsigned int |
| test_21 (unsigned int a, int b, int c) |
| { |
| bool r = b != c; |
| return ((a >> 7) | (r << 31)); |
| } |
| |
| unsigned int |
| test_22 (unsigned int a, int b, int c) |
| { |
| bool r = b != c; |
| return ((a >> 8) | (r << 31)); |
| } |
| |
| unsigned int |
| test_23 (unsigned int a, int b, int c) |
| { |
| bool r = b != c; |
| return ((a >> 31) | (r << 31)); |
| } |
| |
| unsigned int |
| test_24 (unsigned int a) |
| { |
| return (a >> 1) | (1 << 31); |
| } |