1343171Sdim/* Make sure that the S/390 specific shift_count_operand 2343171Sdim predicate work properly. */ 3353358Sdim 4353358Sdim/* { dg-do compile { target s390*-*-* } } */ 5353358Sdim/* { dg-options "-O3" } */ 6343171Sdim 7343171Sdimunsigned long long 8343171Sdimf (unsigned long long a, unsigned long b) 9343171Sdim{ 10343171Sdim asm ("" : : : 11343171Sdim#ifdef __s390x__ 12343171Sdim "r13", "r14", 13343171Sdim#endif 14343171Sdim "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", 15343171Sdim "r8", "r9", "r10", "r11", "r12"); 16343171Sdim 17343171Sdim return a << ((b + 3) & 63); 18343171Sdim} 19343171Sdim 20360784Sdimunsigned long long 21343171Sdimg (unsigned long long a, char **b , int c, int d, int e, int f) 22343171Sdim{ 23343171Sdim char buffer [4096]; 24343171Sdim 25343171Sdim *b = &buffer[0]; 26343171Sdim 27343171Sdim return a << ((unsigned long)&f & 63); 28343171Sdim} 29343171Sdim 30343171Sdimunsigned long long 31343171Sdimh (unsigned long long a, int b, int c, int d, int e, int f) 32343171Sdim{ 33343171Sdim return a << (((unsigned long)&f + 3)); 34343171Sdim} 35360784Sdim