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

📄 camm_util.h

📁 基于Blas CLapck的.用过的人知道是干啥的
💻 H
字号:
#ifndef CAMM_UTIL_H#define CAMM_UTIL_H    /*+ To stop multiple inclusions. +*/typedef struct {  float r,i;} Complex;typedef struct {  double r,i;} Dcomplex;#undef str#define str(a_) xstr(a_)#undef xstr#define xstr(a_) #a_#undef val#define val(a_) xval(a_)#undef xval#define xval(a_) a_#ifndef Mjoin#define Mjoin(a,b) mjoin(a,b)#ifdef mjoin   #undef mjoin#endif#define mjoin(a,b) a ## b#endif#undef VOLATILE#define VOLATILE __volatile__#undef ASM#define ASM __asm__ VOLATILE#ifdef BETA0#undef BL#define BL b0#endif#ifdef BETA1#undef BL#define BL b1#endif#ifdef BETAX#undef BL#define BL bX#endif#ifdef BETAXI0#undef BL#define BL bXi0#endif#ifdef NO_TRANSPOSE#ifdef GER#ifdef Conj_#undef FEXT#define FEXT Gc#else#undef FEXT#define FEXT Gu#endif#else#ifdef Conj_#undef FEXT#define FEXT Nc#else#undef FEXT#define FEXT N#endif#endif#else#ifdef Conj_#undef FEXT#define FEXT C#else#undef FEXT#define FEXT T#endif#endif#undef BLC#define BLC Mjoin(FEXT,BL)#ifdef __GNUC__#undef NO_INLINE#define NO_INLINE  double sq(double x) {return x*x;}#else#undef NO_INLINE#define NO_INLINE#endif#undef lab#define lab(a_)     "\n" str(MY_FUNCTION)  "_" str(N) "_" str(a_) ":\n\t"#undef jmp#define jmp(a_)     "jmp " str(MY_FUNCTION) "_" str(N) "_" str(a_) "\n\t"#undef je#define je(a_)      "je " str(MY_FUNCTION) "_" str(N) "_" str(a_) "\n\t"#undef jge#define jge(a_)     "jge " str(MY_FUNCTION) "_" str(N) "_" str(a_) "\n\t"#undef jle#define jle(a_)     "jle " str(MY_FUNCTION) "_" str(N) "_" str(a_) "\n\t"#undef jl#define jl(a_)      "jl " str(MY_FUNCTION) "_" str(N) "_" str(a_) "\n\t"#undef jne#define jne(a_)     "jne " str(MY_FUNCTION) "_" str(N) "_" str(a_) "\n\t"#undef align#define align       ".align 16\n\t"#undef test#define test(a_,b_) "testl $" str(a_) ",%%e" str(b_) "\n\t"#undef and#define and(a_,b_)  "andl $" str(a_) ",%%e" str(b_) "\n\t"#undef sub#define sub(a_,b_)  "subl $" str(a_) ",%%e" str(b_) "\n\t"#undef SS#define SS(a_,b_)   a_ + b_#undef MM#define MM(a_,b_)   a_ * b_#undef E4#define E4(a_)      (( a_ >> 2 ) << 2 )#undef TYPE#undef SCALAR#undef PREC#undef CSHUF#undef LSHUF#undef HSHUF#undef ISHUF#undef RSHUF#undef SINGLE#undef REAL#undef DIV#ifdef SCPLX#define TYPE Complex#define SCALAR Complex *#define PREC c#define CSHUF 177#define LSHUF 160#define HSHUF 245#define ISHUF 13*17#define RSHUF 8*17#define SINGLE#define DIV 2/* #ifdef Conj_ *//*   static const TYPE signd[2]={{-1.0,1.0},{-1.0,1.0}}; *//* #else */  static const TYPE signd[2]={{1.0,-1.0},{1.0,-1.0}};/* #endif */#endif#ifdef SREAL#define TYPE float#define SCALAR float#define PREC s#define SINGLE#define REAL#define DIV 1#endif#ifdef DREAL#define TYPE double#define SCALAR double#define PREC d#define REAL#define DIV 2#endif#ifdef DCPLX#define TYPE Dcomplex#define SCALAR Dcomplex *#define PREC z#define CSHUF 1#define LSHUF 0#define HSHUF 3#define ISHUF 3#define RSHUF 0#define DIV 4/* #ifdef Conj_ *//*   static const TYPE signd[1]={{-1.0,1.0}}; *//* #else */  static const TYPE signd[1]={{1.0,-1.0}};/* #endif */#endif#undef M11#define M11 0#undef M12#define M12 1#undef M13#define M13 2#undef M14#define M14 3#undef M15#define M15 4#undef M16#define M16 5#undef M17#define M17 6#undef M18#define M18 7#undef M23#define M23 1#undef M24#define M24 2#undef M25#define M25 3#undef M26#define M26 4#undef M27#define M27 5#undef M28#define M28 6#undef M33#define M33 0#undef M34#define M34 1#undef M35#define M35 2#undef M36#define M36 3#undef M37#define M37 4#undef M38#define M38 5#undef P10#define P10 1#undef P11#define P11 2#undef P12#define P12 3#undef P13#define P13 4#undef P14#define P14 5#undef P15#define P15 6#undef P16#define P16 7#undef XM#define XM(a_,b_)     M ## b_ ## a_#undef M#define M(a_,b_)      XM(a_,b_)#undef XP#define XP(a_,b_)     P ## b_ ## a_#undef P#define P(a_,b_)      XP(a_,b_)#undef mex#define mex(a_)       str(%%e ## a_)#undef msx#define msx(a_)       "%%st(" str(a_) ")"#undef cmp#define cmp(a_,b_)    "cmp " mex(a_) "," mex(b_) "\n\t"#undef icmpr#define icmpr(a_,b_)    "cmp " mex(a_) ",(" mex(b_) ")\n\t"#undef f#define f(a_,b_,c_)   "prefetch" str(a_) " " str(b_) "(%%e" #c_ ")\n\t"#undef pfx#define pfx(a_,b_,c_,d_,e_)   "prefetch" str(a_) " " str(b_) "(%%e" #c_ ",%%e" #d_ "," str(e_) ")\n\t"#undef a#define a(a_,b_)      "addl $" str(a_) "," mex(b_) "\n\t"#undef m#define m(a_,b_)      "imul $" str(a_) "," mex(b_) "\n\t"#undef pop#define pop(a_)       "popl %%e" str(a_) "\n\t"#undef push#define push(a_)      "pushl %%e" str(a_) "\n\t"#undef d#define d(a_,b_)      "idiv $" str(a_) "," mex(b_) "\n\t"#undef shl#define shl(a_,b_)    "shl $" str(a_) "," mex(b_) "\n\t"#undef shr#define shr(a_,b_)    "shr $" str(a_) "," mex(b_) "\n\t"#undef mm#define mm(a_,b_)     "mov $" str(a_) "," mex(b_) "\n\t"#undef ra#define ra(a_,b_)     "addl %%e" str(a_) "," mex(b_) "\n\t"#undef rs#define rs(a_,b_)     "subl %%e" str(a_) "," mex(b_) "\n\t"#undef fl#define fl(a_,b_)     "fldl " str(a_) "(" mex(b_) ")\n\t"#undef fp#define fp(a_,b_)     "fstpl " str(a_) "(" mex(b_) ")\n\t"#undef fd#define fd(a_)        "fld " msx(a_) "\n\t"#undef fap#define fap(a_,b_)    "faddp " msx(a_) "," msx(b_) "\n\t"/* #define fsp(a_)       fx(a_) "fsubp %%st," msx(a_) "\n\t" */#undef fsp#define fsp(a_)       "fsubrp %%st," msx(a_) "\n\t"#undef fmp#define fmp(a_,b_)    "fmulp " msx(a_) "," msx(b_) "\n\t"#undef fa#define fa(a_,b_)     "fadd " msx(a_) "," msx(b_) "\n\t"#undef fm#define fm(a_,b_)     "fmul " msx(a_) "," msx(b_) "\n\t"#undef faa#define faa(a_,b_)    "faddl " str(a_) "(" mex(b_) ")\n\t"#undef fma#define fma(a_,b_)    "fmull " str(a_) "(" mex(b_) ")\n\t"#undef fz#define fz            "fldz\n\t"#undef fx#define fx(a_)        "fxch " msx(a_) "\n\t"#undef fx1#define fx1           "fxch\n\t"#undef fc#define fc(a_)        "fstp " msx(a_) "\n\t"#ifndef ATHLON#if defined(DREAL) || defined(DCPLX)#undef SSESUF#define SSESUF "d "#undef RS4#define RS4 16#undef RS#define RS 4#else#undef SSESUF#define SSESUF "s "#undef RS4#define RS4 16#undef RS#define RS  4#endif#undef mxx#define mxx(a_)        str(%%xmm ## a_)#undef prp#define prp(a_,b_)     "rcpp" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef prps#define prps(a_,b_)    "rcps" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef pann#define pann(a_,b_)    "andnp" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef psqs#define psqs(a_,b_)    "sqrts" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef por#define por(a_,b_)     "orp"   SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef pan#define pan(a_,b_)     "andp" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef pcm#define pcm(a_,b_,c_)  "cmpp" SSESUF " $" str(a_) "," mxx(b_) "," mxx(c_) "\n\t"#undef pcms#define pcms(a_,b_,c_) "cmps" SSESUF " $" str(a_) "," mxx(b_) "," mxx(c_) "\n\t"#undef pax#define pax(a_,b_)     "maxp" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef paxs#define paxs(a_,b_)    "maxs" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef pd#define pd(a_,b_)      "divp" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef pdsr#define pdsr(a_,b_)    "divs" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef pxx#define pxx(a_,b_)     "xorp" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef px#define px(a_)         "xorp" SSESUF mxx(a_) "," mxx(a_) "\n\t"#undef pm#define pm(a_,b_)      "mulp" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef pa#define pa(a_,b_)      "addp" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef pmm#define pmm(a_,b_,c_)  "mulp" SSESUF str(a_) "(" mex(b_) ")," mxx(c_) "\n\t"#undef pam#define pam(a_,b_,c_)  "addp" SSESUF str(a_) "(" mex(b_) ")," mxx(c_) "\n\t"#undef pl#define pl(a_,b_,c_)   "movup" SSESUF str(a_) "(" mex(b_) ")," mxx(c_) "\n\t"#undef pla#define pla(a_,b_,c_)  "movap" SSESUF str(a_) "(" mex(b_) ")," mxx(c_) "\n\t"#undef pu#define pu(a_,b_,c_)   "movup" SSESUF mxx(a_) "," str(b_) "(" mex(c_) ")\n\t"#undef punt#define punt(a_,b_,c_) "movntp" SSESUF mxx(a_) "," str(b_) "(" mex(c_) ")\n\t"#undef pua#define pua(a_,b_,c_)  "movap" SSESUF mxx(a_) "," str(b_) "(" mex(c_) ")\n\t"#undef pud#define pud(a_,b_,c_)  "movlp" SSESUF mxx(a_) "," str(b_) "(" mex(c_) ")\n\t"#undef pudr#define pudr(a_,b_)    "movlp" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef pc#define pc(a_,b_)      "movap" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef ps#define ps(a_,b_,c_)   "shufp" SSESUF " $" str(a_) "," mxx(b_) "," mxx(c_) "\n\t"#undef phl#define phl(a_,b_)     "movhlp" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef pus#define pus(a_,b_,c_)  "movs" SSESUF mxx(a_) "," str(b_) "(" mex(c_) ")\n\t"#undef pls#define pls(a_,b_,c_)  "movs" SSESUF str(a_) "(" mex(b_) ")," mxx(c_) "\n\t"#undef pld#define pld(a_,b_,c_)  "movlp" SSESUF str(a_) "(" mex(b_) ")," mxx(c_) "\n\t"#undef plh#define plh(a_,b_)     "movlhp" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef pas#define pas(a_,b_,c_)  "adds" SSESUF str(a_) "(" mex(b_) ")," mxx(c_) "\n\t"#undef pms#define pms(a_,b_,c_)  "muls" SSESUF str(a_) "(" mex(b_) ")," mxx(c_) "\n\t"#undef pcs#define pcs(a_,b_)     "movs" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef pasr#define pasr(a_,b_)    "adds" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef pmsr#define pmsr(a_,b_)    "muls" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef pul#define pul(a_,b_)     "unpcklp" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef puh#define puh(a_,b_)     "unpckhp" SSESUF mxx(a_) "," mxx(b_) "\n\t"#undef plsx#define plsx(a_,b_,c_,d_,e_) \                       "movs" SSESUF str(a_) "(" mex(b_) "," mex(c_) "," #d_ ")," mxx(e_) "\n\t"#undef plx#define plx(a_,b_,c_,d_,e_) \                       "movup" SSESUF str(a_) "(" mex(b_) "," mex(c_) "," #d_ ")," mxx(e_) "\n\t"#undef plax#define plax(a_,b_,c_,d_,e_) \                       "movap" SSESUF str(a_) "(" mex(b_) "," mex(c_) "," #d_ ")," mxx(e_) "\n\t"#undef pasx#define pasx(a_,b_,c_,d_,e_) \                       "adds" SSESUF str(a_) "(" mex(b_) "," mex(c_) "," #d_ ")," mxx(e_) "\n\t"#undef pusx#define pusx(a_,b_,c_,d_,e_) \                       "movs" SSESUF mxx(a_) "," str(b_) "(" mex(c_) "," mex(d_) "," #e_ ")\n\t"#undef pux#define pux(a_,b_,c_,d_,e_) \                       "movup" SSESUF mxx(a_) "," str(b_) "(" mex(c_) "," mex(d_) "," #e_ ")\n\t"#undef puax#define puax(a_,b_,c_,d_,e_) \                       "movap" SSESUF mxx(a_) "," str(b_) "(" mex(c_) "," mex(d_) "," #e_ ")\n\t"#undef pudx#define pudx(a_,b_,c_,d_,e_) \                       "movlp" SSESUF mxx(a_) "," str(b_) "(" mex(c_) "," mex(d_) "," #e_ ")\n\t"#undef pldx#define pldx(a_,b_,c_,d_,e_) \                       "movlp" SSESUF str(a_) "(" mex(b_) "," mex(c_) "," #d_ ")," mxx(e_) "\n\t"#else#undef RS4#define RS4 8#undef RS#define RS  2#undef mxx#define mxx(a_)       str(%%mm ## a_)#undef pul#define pul(a_,b_)    "punpckldq " mxx(a_) "," mxx(b_) "\n\t"#undef puh#define puh(a_,b_)    "punpckhdq " mxx(a_) "," mxx(b_) "\n\t"#undef px#define px(a_)        "pxor " mxx(a_) "," mxx(a_) "\n\t"#undef pm#define pm(a_,b_)     "pfmul " mxx(a_) "," mxx(b_) "\n\t"#undef pa#define pa(a_,b_)     "pfadd " mxx(a_) "," mxx(b_) "\n\t"#undef pac#define pac(a_,b_)    "pfacc " mxx(a_) "," mxx(b_) "\n\t"#undef pmm#define pmm(a_,b_,c_) "pfmul " str(a_) "(" mex(b_) ")," mxx(c_) "\n\t"#undef pam#define pam(a_,b_,c_) "pfadd " str(a_) "(" mex(b_) ")," mxx(c_) "\n\t"#undef pl#define pl(a_,b_,c_)  "movq " str(a_) "(" mex(b_) ")," mxx(c_) "\n\t"#undef pla#define pla(a_,b_,c_) "movq " str(a_) "(" mex(b_) ")," mxx(c_) "\n\t"#undef pu#define pu(a_,b_,c_)  "movq " mxx(a_) "," str(b_) "(" mex(c_) ")\n\t"#undef pc#define pc(a_,b_)     "movq " mxx(a_) "," mxx(b_) "\n\t"#undef ps#define ps(a_,b_,c_)  "pswapd " mxx(b_) "," mxx(c_) "\n\t"#undef phl#define phl(a_,b_)    "punpckhdq " mxx(a_) "," mxx(b_) "\n\t"#undef plh#define plh(a_,b_)    "punpckldq " mxx(a_) "," mxx(b_) "\n\t"#undef pus#define pus(a_,b_,c_) "movd " mxx(a_) "," str(b_) "(" mex(c_) ")\n\t"#undef pls#define pls(a_,b_,c_) "movd " str(a_) "(" mex(b_) ")," mxx(c_) "\n\t"#undef plsx#define plsx(a_,b_,c_,d_,e_) \                      "movd " str(a_) "(" mex(b_) "," mex(c_) "," #d_ ")," mxx(e_) "\n\t"#undef plx#define plx(a_,b_,c_,d_,e_)  \                      "movq " str(a_) "(" mex(b_) "," mex(c_) "," #d_ ")," mxx(e_) "\n\t"#undef pasx#define pasx(a_,b_,c_,d_,e_) \                      "addss " str(a_) "(" mex(b_) "," mex(c_) "," #d_ ")," mxx(e_) "\n\t"#undef pusx#define pusx(a_,b_,c_,d_,e_) \                      "movd " mxx(a_) "," str(b_) "(" mex(c_) "," mex(d_) "," #e_ ")\n\t"#undef pux#define pux(a_,b_,c_,d_,e_)  \                      "movq " mxx(a_) "," str(b_) "(" mex(c_) "," mex(d_) "," #e_ ")\n\t"#endif#endif /* CAMM_UTIL_H */

⌨️ 快捷键说明

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