blob: 4112c958cc380e12a1fdd25b01be5b0154cee7c8 [file] [log] [blame]
/* { dg-do run } */
/* { dg-options "-std=c99" } */
#include <stdlib.h>
typedef int TItype __attribute__ ((mode (TI)));
typedef int DItype __attribute__ ((mode (DI)));
typedef unsigned int UDItype __attribute__ ((mode (DI)));
struct DIstruct {DItype high, low;};
typedef union
{
struct DIstruct s;
TItype t;
} TIunion;
static
void sub_ddmmss (UDItype *sh, UDItype *sl, UDItype ah, UDItype al, UDItype bh, UDItype bl)
{
UDItype x;
x = al - bl;
*sh = ah - bh - (x > al);
*sl = x;
}
int main(void)
{
TIunion aa, bb, cc;
TItype m = 0x1111111111111110ULL;
TItype n = 0x1111111111111111ULL;
TItype d;
aa.s.high = m;
aa.s.low = m;
bb.s.high = n;
bb.s.low = n;
sub_ddmmss (&cc.s.high, &cc.s.low, aa.s.high, aa.s.low, bb.s.high, bb.s.low);
d = aa.t - bb.t;
if (d != cc.t)
abort();
cc.t = aa.t -d;
if (cc.t != bb.t)
abort();
return 0;
}