/******************************************************************************
* *
* 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;
}