⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bn_lcl.h

📁 mediastreamer2是开源的网络传输媒体流的库
💻 H
📖 第 1 页 / 共 2 页
字号:
	     : "r"(a), "r"(b));		\	ret;			})#  endif	/* compiler */# elif defined(_ARCH_PPC) && defined(__64BIT__) && defined(SIXTY_FOUR_BIT_LONG)#  if defined(__GNUC__)#   define BN_UMULT_HIGH(a,b)	({	\	register BN_ULONG ret;		\	asm ("mulhdu	%0,%1,%2"	\	     : "=r"(ret)		\	     : "r"(a), "r"(b));		\	ret;			})#  endif	/* compiler */# elif defined(__x86_64) && defined(SIXTY_FOUR_BIT_LONG)#  if defined(__GNUC__)#   define BN_UMULT_HIGH(a,b)	({	\	register BN_ULONG ret,discard;	\	asm ("mulq	%3"		\	     : "=a"(discard),"=d"(ret)	\	     : "a"(a), "g"(b)		\	     : "cc");			\	ret;			})#   define BN_UMULT_LOHI(low,high,a,b)	\	asm ("mulq	%3"		\		: "=a"(low),"=d"(high)	\		: "a"(a),"g"(b)		\		: "cc");#  endif# elif (defined(_M_AMD64) || defined(_M_X64)) && defined(SIXTY_FOUR_BIT)#  if defined(_MSC_VER) && _MSC_VER>=1400    unsigned __int64 __umulh	(unsigned __int64 a,unsigned __int64 b);    unsigned __int64 _umul128	(unsigned __int64 a,unsigned __int64 b,				 unsigned __int64 *h);#   pragma intrinsic(__umulh,_umul128)#   define BN_UMULT_HIGH(a,b)		__umulh((a),(b))#   define BN_UMULT_LOHI(low,high,a,b)	((low)=_umul128((a),(b),&(high)))#  endif# endif		/* cpu */#endif		/* OPENSSL_NO_ASM *//************************************************************* * Using the long long type */#define Lw(t)    (((BN_ULONG)(t))&BN_MASK2)#define Hw(t)    (((BN_ULONG)((t)>>BN_BITS2))&BN_MASK2)#ifdef BN_DEBUG_RAND#define bn_clear_top2max(a) \	{ \	int      ind = (a)->dmax - (a)->top; \	BN_ULONG *ftl = &(a)->d[(a)->top-1]; \	for (; ind != 0; ind--) \		*(++ftl) = 0x0; \	}#else#define bn_clear_top2max(a)#endif#ifdef BN_LLONG#define mul_add(r,a,w,c) { \	BN_ULLONG t; \	t=(BN_ULLONG)w * (a) + (r) + (c); \	(r)= Lw(t); \	(c)= Hw(t); \	}#define mul(r,a,w,c) { \	BN_ULLONG t; \	t=(BN_ULLONG)w * (a) + (c); \	(r)= Lw(t); \	(c)= Hw(t); \	}#define sqr(r0,r1,a) { \	BN_ULLONG t; \	t=(BN_ULLONG)(a)*(a); \	(r0)=Lw(t); \	(r1)=Hw(t); \	}#elif defined(BN_UMULT_LOHI)#define mul_add(r,a,w,c) {		\	BN_ULONG high,low,ret,tmp=(a);	\	ret =  (r);			\	BN_UMULT_LOHI(low,high,w,tmp);	\	ret += (c);			\	(c) =  (ret<(c))?1:0;		\	(c) += high;			\	ret += low;			\	(c) += (ret<low)?1:0;		\	(r) =  ret;			\	}#define mul(r,a,w,c)	{		\	BN_ULONG high,low,ret,ta=(a);	\	BN_UMULT_LOHI(low,high,w,ta);	\	ret =  low + (c);		\	(c) =  high;			\	(c) += (ret<low)?1:0;		\	(r) =  ret;			\	}#define sqr(r0,r1,a)	{		\	BN_ULONG tmp=(a);		\	BN_UMULT_LOHI(r0,r1,tmp,tmp);	\	}#elif defined(BN_UMULT_HIGH)#define mul_add(r,a,w,c) {		\	BN_ULONG high,low,ret,tmp=(a);	\	ret =  (r);			\	high=  BN_UMULT_HIGH(w,tmp);	\	ret += (c);			\	low =  (w) * tmp;		\	(c) =  (ret<(c))?1:0;		\	(c) += high;			\	ret += low;			\	(c) += (ret<low)?1:0;		\	(r) =  ret;			\	}#define mul(r,a,w,c)	{		\	BN_ULONG high,low,ret,ta=(a);	\	low =  (w) * ta;		\	high=  BN_UMULT_HIGH(w,ta);	\	ret =  low + (c);		\	(c) =  high;			\	(c) += (ret<low)?1:0;		\	(r) =  ret;			\	}#define sqr(r0,r1,a)	{		\	BN_ULONG tmp=(a);		\	(r0) = tmp * tmp;		\	(r1) = BN_UMULT_HIGH(tmp,tmp);	\	}#else/************************************************************* * No long long type */#define LBITS(a)	((a)&BN_MASK2l)#define HBITS(a)	(((a)>>BN_BITS4)&BN_MASK2l)#define	L2HBITS(a)	(((a)<<BN_BITS4)&BN_MASK2)#define LLBITS(a)	((a)&BN_MASKl)#define LHBITS(a)	(((a)>>BN_BITS2)&BN_MASKl)#define	LL2HBITS(a)	((BN_ULLONG)((a)&BN_MASKl)<<BN_BITS2)#define mul64(l,h,bl,bh) \	{ \	BN_ULONG m,m1,lt,ht; \ \	lt=l; \	ht=h; \	m =(bh)*(lt); \	lt=(bl)*(lt); \	m1=(bl)*(ht); \	ht =(bh)*(ht); \	m=(m+m1)&BN_MASK2; if (m < m1) ht+=L2HBITS((BN_ULONG)1); \	ht+=HBITS(m); \	m1=L2HBITS(m); \	lt=(lt+m1)&BN_MASK2; if (lt < m1) ht++; \	(l)=lt; \	(h)=ht; \	}#define sqr64(lo,ho,in) \	{ \	BN_ULONG l,h,m; \ \	h=(in); \	l=LBITS(h); \	h=HBITS(h); \	m =(l)*(h); \	l*=l; \	h*=h; \	h+=(m&BN_MASK2h1)>>(BN_BITS4-1); \	m =(m&BN_MASK2l)<<(BN_BITS4+1); \	l=(l+m)&BN_MASK2; if (l < m) h++; \	(lo)=l; \	(ho)=h; \	}#define mul_add(r,a,bl,bh,c) { \	BN_ULONG l,h; \ \	h= (a); \	l=LBITS(h); \	h=HBITS(h); \	mul64(l,h,(bl),(bh)); \ \	/* non-multiply part */ \	l=(l+(c))&BN_MASK2; if (l < (c)) h++; \	(c)=(r); \	l=(l+(c))&BN_MASK2; if (l < (c)) h++; \	(c)=h&BN_MASK2; \	(r)=l; \	}#define mul(r,a,bl,bh,c) { \	BN_ULONG l,h; \ \	h= (a); \	l=LBITS(h); \	h=HBITS(h); \	mul64(l,h,(bl),(bh)); \ \	/* non-multiply part */ \	l+=(c); if ((l&BN_MASK2) < (c)) h++; \	(c)=h&BN_MASK2; \	(r)=l&BN_MASK2; \	}#endif /* !BN_LLONG */void bn_mul_normal(BN_ULONG *r,BN_ULONG *a,int na,BN_ULONG *b,int nb);void bn_mul_comba8(BN_ULONG *r,BN_ULONG *a,BN_ULONG *b);void bn_mul_comba4(BN_ULONG *r,BN_ULONG *a,BN_ULONG *b);void bn_sqr_normal(BN_ULONG *r, const BN_ULONG *a, int n, BN_ULONG *tmp);void bn_sqr_comba8(BN_ULONG *r,const BN_ULONG *a);void bn_sqr_comba4(BN_ULONG *r,const BN_ULONG *a);int bn_cmp_words(const BN_ULONG *a,const BN_ULONG *b,int n);int bn_cmp_part_words(const BN_ULONG *a, const BN_ULONG *b,	int cl, int dl);void bn_mul_recursive(BN_ULONG *r,BN_ULONG *a,BN_ULONG *b,int n2,	int dna,int dnb,BN_ULONG *t);void bn_mul_part_recursive(BN_ULONG *r,BN_ULONG *a,BN_ULONG *b,	int n,int tna,int tnb,BN_ULONG *t);void bn_sqr_recursive(BN_ULONG *r,const BN_ULONG *a, int n2, BN_ULONG *t);void bn_mul_low_normal(BN_ULONG *r,BN_ULONG *a,BN_ULONG *b, int n);void bn_mul_low_recursive(BN_ULONG *r,BN_ULONG *a,BN_ULONG *b,int n2,	BN_ULONG *t);void bn_mul_high(BN_ULONG *r,BN_ULONG *a,BN_ULONG *b,BN_ULONG *l,int n2,	BN_ULONG *t);BN_ULONG bn_add_part_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b,	int cl, int dl);BN_ULONG bn_sub_part_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b,	int cl, int dl);#ifdef  __cplusplus}#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -