/****************************************************************************** * * * 64x64 MULTIPLY (UNSIGNED) * * 03/23/12 (dkc) * * * ******************************************************************************/ void bignewp(unsigned int a0, unsigned int a1, unsigned int b0, unsigned int b1, unsigned int *product) { unsigned long long ac,bc,ad,bd,mid34,upper,lower; bd=(unsigned long long)a1*(unsigned long long)b1; ad=(unsigned long long)a0*(unsigned long long)b1; bc=(unsigned long long)b0*(unsigned long long)a1; ac=(unsigned long long)a0*(unsigned long long)b0; mid34=(bd>>32)+(bc&0xffffffff)+(ad&0xffffffff); upper=ac+(bc>>32)+(ad>>32)+(mid34>>32); lower=(mid34<<32)|(bd&0xffffffff); *product=(unsigned int)(upper>>32); *(product+1)=(unsigned int)(upper&0xffffffff); *(product+2)=(unsigned int)(lower>>32); *(product+3)=(unsigned int)(lower&0xffffffff); return; }