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