int max,min,ret=1;
int max,min; #if 0 int ret=1; #endif
int BN_usub(r, a, b)BIGNUM *r;BIGNUM *a;BIGNUM *b;	{	int max,min,ret=1;	register BN_ULONG t1,t2,*ap,*bp,*rp;	int i,carry;#if defined(IRIX_CC_BUG) && !defined(LINT)	int dummy;#endif	bn_check_top(a);	bn_check_top(b);	if (a->top < b->top) /* hmm... should not be happening */		{		BNerr(BN_F_BN_USUB,BN_R_ARG2_LT_ARG3);		return(0);		}	max=a->top;	min=b->top;	if (bn_wexpand(r,max) == NULL) return(0);	ap=a->d;	bp=b->d;	rp=r->d;#if 1	carry=0;	for (i=0; i<min; i++)		{		t1= *(ap++);		t2= *(bp++);		if (carry)			{			carry=(t1 <= t2);			t1=(t1-t2-1)&BN_MASK2;			}		else			{			carry=(t1 < t2);			t1=(t1-t2)&BN_MASK2;			}#if defined(IRIX_CC_BUG) && !defined(LINT)		dummy=t1;#endif		*(rp++)=t1&BN_MASK2;		}#else	carry=bn_sub_words(rp,ap,bp,min);	ap+=min;	bp+=min;	rp+=min;	i=min;#endif	if (carry) /* subtracted */		{		while (i < max)			{			i++;			t1= *(ap++);			t2=(t1-1)&BN_MASK2;			*(rp++)=t2;			if (t1 > t2) break;			}		}#if 0	memcpy(rp,ap,sizeof(*rp)*(max-i));#else	if (rp != ap)		{		for (;;)			{			if (i++ >= max) break;			rp[0]=ap[0];			if (i++ >= max) break;			rp[1]=ap[1];			if (i++ >= max) break;			rp[2]=ap[2];			if (i++ >= max) break;			rp[3]=ap[3];			rp+=4;			ap+=4;			}		}#endif	r->top=max;	bn_fix_top(r);	return(1);	}