blob: 673d0a146f13b40a4d14db0584a1b361a337c9d5 [file] [log] [blame]
/* Check that the bswap32 pattern is generated as swap.b and swap.w
instructions. */
/* { dg-do compile } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler-times "swap.w" 7 } } */
/* { dg-final { scan-assembler-times "swap.b" 16 } } */
/* { dg-final { scan-assembler-times "extu.w" 2 } } */
/* { dg-final { scan-assembler-times "mov" 1 } } */
/* { dg-final { scan-assembler-not "{shll8|shlr8|shld|shad}" } } */
int
test_func_00 (int a)
{
/* 1x swap.w
2x swap.b */
return __builtin_bswap32 (a);
}
unsigned int
test_func_01 (unsigned int a)
{
/* 1x swap.w
2x swap.b */
return __builtin_bswap32 (a);
}
int
test_func_02 (int a)
{
/* 1x swap.w
2x swap.b */
return (((a >> 0) & 0xFF) << 24)
| (((a >> 8) & 0xFF) << 16)
| (((a >> 16) & 0xFF) << 8)
| (((a >> 24) & 0xFF) << 0);
}
unsigned int
test_func_03 (unsigned int a)
{
/* 1x swap.w
2x swap.b */
return (((a >> 0) & 0xFF) << 24)
| (((a >> 8) & 0xFF) << 16)
| (((a >> 16) & 0xFF) << 8)
| (((a >> 24) & 0xFF) << 0);
}
int
test_func_04 (int a)
{
/* 1x swap.b
1x extu.w */
return __builtin_bswap32 (a) >> 16;
}
unsigned short
test_func_05 (unsigned short a)
{
/* 1x swap.b
1x extu.w */
return __builtin_bswap32 (a) >> 16;
}
long long
test_func_06 (long long a)
{
/* 2x swap.w
4x swap.b */
return __builtin_bswap64 (a);
}
long long
test_func_07 (long long a)
{
/* 1x swap.w
2x swap.b
1x mov #0,Rn */
return __builtin_bswap64 (a) >> 32;
}