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