typedef unsigned long USItype; #define udiv_qrnnd(__q, __r, __n1, __n0, __d) \ __asm__ ("mov %2,%%y;nop;nop;nop;udiv %3,%4,%0;umul %0,%4,%1;sub %3,%1,%1"\ : "=&r" ((USItype) (__q)), \ "=&r" ((USItype) (__r)) \ : "r" ((USItype) (__n1)), \ "r" ((USItype) (__n0)), \ "r" ((USItype) (__d))) #include int main(void) { unsigned long q,r,n1,n0,d; n1=17293963032249958407llu>>32; n0=17293963032249958407llu&0xffffffffl; d=268189695lu; printf("bit 53+ : %lx\n",n1&0xfff00000l); udiv_qrnnd(q,r,n1,n0,d); printf("q,r = %lu,%lu ( r