1 /* Contributed by Jack Lloyd <lloyd@randombit.net> */
4 /* { dg-options "-O2 -ftree-vectorize" } */
5 /* { dg-options "-O2 -ftree-vectorize -march=nocona" { target { i?86-*-* x86_64-*-* } } } */
7 typedef unsigned long long word
;
9 const unsigned int MP_WORD_BITS
= 64;
10 const word MP_WORD_MASK
= ~((word
)0);
11 const word MP_WORD_TOP_BIT
= (word
)1 << (8*sizeof(word
) - 1);
13 extern void abort (void);
15 word
do_div(word n1
, word n0
, word d
)
17 word high
= n1
% d
, quotient
= 0;
20 for(j
= 0; j
!= MP_WORD_BITS
; ++j
)
22 word high_top_bit
= (high
& MP_WORD_TOP_BIT
);
25 high
|= (n0
>> (MP_WORD_BITS
-1-j
)) & 1;
28 if(high_top_bit
|| high
>= d
)
42 result
= do_div(0x0000000000200000ll
,
44 0x86E53497CE000000ll
);
47 if (result
!= 0x3CBA83)