dc4918499f
From-SVN: r135074
46 lines
878 B
C
46 lines
878 B
C
/* { 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;
|
|
}
|