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

📄 longlong.h

📁 ndis在linux下的无线网卡驱动源码
💻 H
📖 第 1 页 / 共 4 页
字号:
  } while (0)#define count_leading_zeros(count, x) \  __asm__ ("{cntlz|cntlzw} %0,%1" : "=r" (count) : "r" (x))#define COUNT_LEADING_ZEROS_0 32#if defined (_ARCH_PPC) || defined (__powerpc__) || defined (__POWERPC__) \  || defined (__ppc__) || defined (PPC) || defined (__vxworks__)#define umul_ppmm(ph, pl, m0, m1) \  do {									\    USItype __m0 = (m0), __m1 = (m1);					\    __asm__ ("mulhwu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1));	\    (pl) = __m0 * __m1;							\  } while (0)#define UMUL_TIME 15#define smul_ppmm(ph, pl, m0, m1) \  do {									\    SItype __m0 = (m0), __m1 = (m1);					\    __asm__ ("mulhw %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1));	\    (pl) = __m0 * __m1;							\  } while (0)#define SMUL_TIME 14#define UDIV_TIME 120#elif defined (_ARCH_PWR)#define UMUL_TIME 8#define smul_ppmm(xh, xl, m0, m1) \  __asm__ ("mul %0,%2,%3" : "=r" (xh), "=q" (xl) : "r" (m0), "r" (m1))#define SMUL_TIME 4#define sdiv_qrnnd(q, r, nh, nl, d) \  __asm__ ("div %0,%2,%4" : "=r" (q), "=q" (r) : "r" (nh), "1" (nl), "r" (d))#define UDIV_TIME 100#endif#endif /* 32-bit POWER architecture variants.  *//* We should test _IBMR2 here when we add assembly support for the system   vendor compilers.  */#if (defined (_ARCH_PPC64) || defined (__powerpc64__)) && W_TYPE_SIZE == 64#define add_ssaaaa(sh, sl, ah, al, bh, bl) \  do {									\    if (__builtin_constant_p (bh) && (bh) == 0)				\      __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2"		\	     : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\    else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0)		\      __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2"		\	     : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\    else								\      __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3"		\	     : "=r" (sh), "=&r" (sl)					\	     : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl));		\  } while (0)#define sub_ddmmss(sh, sl, ah, al, bh, bl) \  do {									\    if (__builtin_constant_p (ah) && (ah) == 0)				\      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2"	\	       : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\    else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0)		\      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2"	\	       : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\    else if (__builtin_constant_p (bh) && (bh) == 0)			\      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2"		\	       : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\    else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0)		\      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2"		\	       : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\    else								\      __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2"	\	       : "=r" (sh), "=&r" (sl)					\	       : "r" (ah), "r" (bh), "rI" (al), "r" (bl));		\  } while (0)#define count_leading_zeros(count, x) \  __asm__ ("cntlzd %0,%1" : "=r" (count) : "r" (x))#define COUNT_LEADING_ZEROS_0 64#define umul_ppmm(ph, pl, m0, m1) \  do {									\    UDItype __m0 = (m0), __m1 = (m1);					\    __asm__ ("mulhdu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1));	\    (pl) = __m0 * __m1;							\  } while (0)#define UMUL_TIME 15#define smul_ppmm(ph, pl, m0, m1) \  do {									\    DItype __m0 = (m0), __m1 = (m1);					\    __asm__ ("mulhd %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1));	\    (pl) = __m0 * __m1;							\  } while (0)#define SMUL_TIME 14  /* ??? */#define UDIV_TIME 120 /* ??? */#endif /* 64-bit PowerPC.  */#if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32#define add_ssaaaa(sh, sl, ah, al, bh, bl) \  __asm__ ("a %1,%5\n\tae %0,%3"					\	   : "=r" ((USItype) (sh)),					\	     "=&r" ((USItype) (sl))					\	   : "%0" ((USItype) (ah)),					\	     "r" ((USItype) (bh)),					\	     "%1" ((USItype) (al)),					\	     "r" ((USItype) (bl)))#define sub_ddmmss(sh, sl, ah, al, bh, bl) \  __asm__ ("s %1,%5\n\tse %0,%3"					\	   : "=r" ((USItype) (sh)),					\	     "=&r" ((USItype) (sl))					\	   : "0" ((USItype) (ah)),					\	     "r" ((USItype) (bh)),					\	     "1" ((USItype) (al)),					\	     "r" ((USItype) (bl)))#define umul_ppmm(ph, pl, m0, m1) \  do {									\    USItype __m0 = (m0), __m1 = (m1);					\    __asm__ (								\       "s	r2,r2\n"						\"	mts	r10,%2\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	m	r2,%3\n"						\"	cas	%0,r2,r0\n"						\"	mfs	r10,%1"							\	     : "=r" ((USItype) (ph)),					\	       "=r" ((USItype) (pl))					\	     : "%r" (__m0),						\		"r" (__m1)						\	     : "r2");							\    (ph) += ((((SItype) __m0 >> 31) & __m1)				\	     + (((SItype) __m1 >> 31) & __m0));				\  } while (0)#define UMUL_TIME 20#define UDIV_TIME 200#define count_leading_zeros(count, x) \  do {									\    if ((x) >= 0x10000)							\      __asm__ ("clz	%0,%1"						\	       : "=r" ((USItype) (count))				\	       : "r" ((USItype) (x) >> 16));				\    else								\      {									\	__asm__ ("clz	%0,%1"						\		 : "=r" ((USItype) (count))				\		 : "r" ((USItype) (x)));					\	(count) += 16;							\      }									\  } while (0)#endif#if defined (__sh2__) && W_TYPE_SIZE == 32#define umul_ppmm(w1, w0, u, v) \  __asm__ (								\       "dmulu.l	%2,%3\n\tsts	macl,%1\n\tsts	mach,%0"		\	   : "=r" ((USItype)(w1)),					\	     "=r" ((USItype)(w0))					\	   : "r" ((USItype)(u)),					\	     "r" ((USItype)(v))						\	   : "macl", "mach")#define UMUL_TIME 5#endif#if defined (__SH5__) && __SHMEDIA__ && W_TYPE_SIZE == 32#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v)#define count_leading_zeros(count, x) \  do									\    {									\      UDItype x_ = (USItype)(x);					\      SItype c_;							\									\      __asm__ ("nsb %1, %0" : "=r" (c_) : "r" (x_));			\      (count) = c_ - 31;						\    }									\  while (0)#define COUNT_LEADING_ZEROS_0 32#endif#if defined (__sparc__) && !defined (__arch64__) && !defined (__sparcv9) \    && W_TYPE_SIZE == 32#define add_ssaaaa(sh, sl, ah, al, bh, bl) \  __asm__ ("addcc %r4,%5,%1\n\taddx %r2,%3,%0"				\	   : "=r" ((USItype) (sh)),					\	     "=&r" ((USItype) (sl))					\	   : "%rJ" ((USItype) (ah)),					\	     "rI" ((USItype) (bh)),					\	     "%rJ" ((USItype) (al)),					\	     "rI" ((USItype) (bl))					\	   __CLOBBER_CC)#define sub_ddmmss(sh, sl, ah, al, bh, bl) \  __asm__ ("subcc %r4,%5,%1\n\tsubx %r2,%3,%0"				\	   : "=r" ((USItype) (sh)),					\	     "=&r" ((USItype) (sl))					\	   : "rJ" ((USItype) (ah)),					\	     "rI" ((USItype) (bh)),					\	     "rJ" ((USItype) (al)),					\	     "rI" ((USItype) (bl))					\	   __CLOBBER_CC)#if defined (__sparc_v8__)#define umul_ppmm(w1, w0, u, v) \  __asm__ ("umul %2,%3,%1;rd %%y,%0"					\	   : "=r" ((USItype) (w1)),					\	     "=r" ((USItype) (w0))					\	   : "r" ((USItype) (u)),					\	     "r" ((USItype) (v)))#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \  __asm__ ("mov %2,%%y;nop;nop;nop;udiv %3,%4,%0;umul %0,%4,%1;sub %3,%1,%1"\	   : "=&r" ((USItype) (__q)),					\	     "=&r" ((USItype) (__r))					\	   : "r" ((USItype) (__n1)),					\	     "r" ((USItype) (__n0)),					\	     "r" ((USItype) (__d)))#else#if defined (__sparclite__)/* This has hardware multiply but not divide.  It also has two additional   instructions scan (ffs from high bit) and divscc.  */#define umul_ppmm(w1, w0, u, v) \  __asm__ ("umul %2,%3,%1;rd %%y,%0"					\	   : "=r" ((USItype) (w1)),					\	     "=r" ((USItype) (w0))					\	   : "r" ((USItype) (u)),					\	     "r" ((USItype) (v)))#define udiv_qrnnd(q, r, n1, n0, d) \  __asm__ ("! Inlined udiv_qrnnd\n"					\"	wr	%%g0,%2,%%y	! Not a delayed write for sparclite\n"	\"	tst	%%g0\n"							\"	divscc	%3,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%%g1\n"						\"	divscc	%%g1,%4,%0\n"						\"	rd	%%y,%1\n"						\"	bl,a 1f\n"							\"	add	%1,%4,%1\n"						\"1:	! End of inline udiv_qrnnd"					\	   : "=r" ((USItype) (q)),					\	     "=r" ((USItype) (r))					\	   : "r" ((USItype) (n1)),					\	     "r" ((USItype) (n0)),					\	     "rI" ((USItype) (d))					\	   : "g1" __AND_CLOBBER_CC)#define UDIV_TIME 37#define count_leading_zeros(count, x) \  do {                                                                  \  __asm__ ("scan %1,1,%0"                                               \           : "=r" ((USItype) (count))                                   \           : "r" ((USItype) (x)));					\  } while (0)/* Early sparclites return 63 for an argument of 0, but they warn that future   implementations might change this.  Therefore, leave COUNT_LEADING_ZEROS_0   undefined.  */#else/* SPARC without integer multiplication and divide instructions.   (i.e. at least Sun4/20,40,60,65,75,110,260,280,330,360,380,470,490) */#define umul_ppmm(w1, w0, u, v) \  __asm__ ("! Inlined umul_ppmm\n"					\"	wr	%%g0,%2,%%y	! SPARC has 0-3 delay insn after a wr\n"\"	sra	%3,31,%%o5	! Don't move this insn\n"		\"	and	%2,%%o5,%%o5	! Don't move this insn\n"		\"	andcc	%%g0,0,%%g1	! Don't move this insn\n"		\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,%3,%%g1\n"						\"	mulscc	%%g1,0,%%g1\n"						\"	add	%%g1,%%o5,%0\n"						\"	rd	%%y,%1"							\	   : "=r" ((USItype) (w1)),					\	     "=r" ((USItype) (w0))					\	   : "%rI" ((USItype) (u)),					\	     "r" ((USItype) (v))						\	   : "g1", "o5" __AND_CLOBBER_CC)#define UMUL_TIME 39		/* 39 instructions *//* It's quite necessary to add this much assembler for the sparc.   The default udiv_qrnnd (in C) is more than 10 times slower!  */#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \

⌨️ 快捷键说明

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