+++ /dev/null
-/* { dg-do compile { target i?86-*-* } } */
-/* { dg-options -O0 } */
-
-typedef int SItype __attribute__ ((mode (SI)));
-typedef int DItype __attribute__ ((mode (DI)));
-typedef unsigned int USItype __attribute__ ((mode (SI)));
- struct DIstruct {SItype low, high;};
-typedef union
-{
- struct DIstruct s;
- DItype ll;
-} DIunion;
-DItype
-__muldi3 (DItype u, DItype v)
-{
- DIunion w;
- DIunion uu, vv;
- uu.ll = u,
- vv.ll = v;
- w.ll = ({DIunion __w; __asm__ ("mull %3" : "=a" ((USItype) ( __w.s.low )), "=d" ((USItype) ( __w.s.high )) : "%0" ((USItype) ( uu.s.low )), "rm" ((USItype) ( vv.s.low ))) ; __w.ll; }) ;
- w.s.high += ((USItype) uu.s.low * (USItype) vv.s.high
- + (USItype) uu.s.high * (USItype) vv.s.low);
- return w.ll;
-}