| /* PR target/100056 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2" } */ |
| /* { dg-final { scan-assembler-not {\t[us]bfiz\tw[0-9]+, w[0-9]+, 11} { xfail *-*-* } } } */ |
| /* { dg-final { scan-assembler-times {\t[us]bfiz\tw[0-9]+, w[0-9]+, 11} 2 } } */ |
| /* { dg-final { scan-assembler-times {\tadd\tw[0-9]+, w[0-9]+, w[0-9]+, uxtb\n} 2 } } */ |
| |
| int |
| or_shift_u8 (unsigned char i) |
| { |
| return i | (i << 11); |
| } |
| |
| int |
| or_shift_u3a (unsigned i) |
| { |
| i &= 7; |
| return i | (i << 11); |
| } |
| |
| int |
| or_shift_u3b (unsigned i) |
| { |
| i = (i << 29) >> 29; |
| return i | (i << 11); |
| } |
| |
| int |
| or_shift_s16 (signed short i) |
| { |
| return i | (i << 11); |
| } |
| |
| int |
| or_shift_s8 (signed char i) |
| { |
| return i | (i << 11); |
| } |
| |
| int |
| or_shift_s13 (int i) |
| { |
| i = (i << 19) >> 19; |
| return i | (i << 11); |
| } |
| |
| int |
| or_shift_s3 (int i) |
| { |
| i = (i << 29) >> 29; |
| return i | (i << 11); |
| } |
| |
| int |
| or_shift_u8_asm (unsigned char x) |
| { |
| unsigned char i = x; |
| asm volatile ("" : "+r" (i)); |
| return i | (i << 11); |
| } |