1 /* { dg-do compile } */ 2 /* { dg-options -O0 } */ 3 4 typedef int SItype __attribute__ ((mode (SI))); 5 typedef int DItype __attribute__ ((mode (DI))); 6 typedef unsigned int USItype __attribute__ ((mode (SI))); 7 struct DIstruct {SItype low, high;}; 8 typedef union 9 { 10 struct DIstruct s; 11 DItype ll; 12 } DIunion; 13 DItype __muldi3(DItype u,DItype v)14__muldi3 (DItype u, DItype v) 15 { 16 DIunion w; 17 DIunion uu, vv; 18 uu.ll = u, 19 vv.ll = v; 20 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; }) ; 21 w.s.high += ((USItype) uu.s.low * (USItype) vv.s.high 22 + (USItype) uu.s.high * (USItype) vv.s.low); 23 return w.ll; 24 } 25