| /* Make sure that the S/390 specific shift_count_operand |
| predicate work properly. */ |
| |
| /* { dg-do compile } */ |
| /* { dg-options "-O3" } */ |
| |
| unsigned long long |
| f (unsigned long long a, unsigned long b) |
| { |
| asm ("" : : : |
| #ifdef __s390x__ |
| "r13", "r14", |
| #endif |
| "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", |
| "r8", "r9", "r10", "r11", "r12"); |
| |
| return a << ((b + 3) & 63); |
| } |
| |
| unsigned long long |
| g (unsigned long long a, char **b , int c, int d, int e, int f) |
| { |
| char buffer [4096]; |
| |
| *b = &buffer[0]; |
| |
| return a << ((unsigned long)&f & 63); |
| } |
| |
| unsigned long long |
| h (unsigned long long a, int b, int c, int d, int e, int f) |
| { |
| return a << (((unsigned long)&f + 3)); |
| } |