blob: 29a619b280eebcf4e4634c083209037fae6a1386 [file] [log] [blame]
/* { dg-do run { target int128 } } */
/* { dg-additional-options "-fgcse-after-reload" } */
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
typedef unsigned long long u64;
int a, b, c;
__int128 e;
int
d (u16 g)
{
u64 f = __builtin_bswap64 (c);
f = g == a;
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
__builtin_memmove (&f, &e, 1);
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
__builtin_memmove ((char *) &f + sizeof (f) - 1,
(char *) &e + sizeof (e) - 1, 1);
#elif __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__
__builtin_memmove ((char *) &f + sizeof (f) - 2,
(char *) &e + sizeof (e) - 2, 1);
#else
#error "endian unknown?"
#endif
e >>= b;
return a + f;
}
int
main (void)
{
__int128 x = d (0);
if (x != 0)
__builtin_abort ();
return 0;
}