/***** Autogenerated from runmath.in; changes will be overwritten *****/ #line 1 "./runtimebase.in" /***** * runtimebase.in * Andy Hammerlindl 2009/07/28 * * Common declarations needed for all code-generating .in files. * *****/ #line 1 "./runmath.in" /***** * runmath.in * * Runtime functions for math operations. * *****/ #line 23 "./runtimebase.in" #include "stack.h" #include "types.h" #include "builtin.h" #include "entry.h" #include "errormsg.h" #include "array.h" #include "triple.h" #include "callable.h" #include "opsymbols.h" using vm::stack; using vm::error; using vm::array; using vm::read; using vm::callable; using types::formal; using types::function; using camp::triple; #define PRIMITIVE(name,Name,asyName) using types::prim##Name; #include #undef PRIMITIVE void unused(void *); namespace run { typedef double real; array *copyArray(array *a); array *copyArray2(array *a); array *copyArray3(array *a); double *copyTripleArray2Components(array *a, size_t &N, GCPlacement placement=NoGC); triple *copyTripleArray2C(array *a, size_t &N, GCPlacement placement=NoGC); } function *realRealFunction(); #define CURRENTPEN processData().currentpen #line 12 "runmath.in" #include #include #include #include #include #include "mathop.h" #include "path.h" using namespace camp; typedef array realarray; typedef array pairarray; using types::realArray; using types::pairArray; using run::integeroverflow; using vm::vmFrame; const char *invalidargument="invalid argument"; extern uint32_t CLZ(uint32_t a); inline unsigned intbits() { static unsigned count=0; if(count > 0) return count; while((1ULL << count) < Int_MAX) ++count; ++count; return count; } static const unsigned char BitReverseTable8[256]= { #define R2(n) n, n+2*64, n+1*64, n+3*64 #define R4(n) R2(n),R2(n+2*16),R2(n+1*16),R2(n+3*16) #define R6(n) R4(n),R4(n+2*4 ),R4(n+1*4 ),R4(n+3*4 ) R6(0),R6(2),R6(1),R6(3) }; #undef R2 #undef R4 #undef R6 unsigned long long bitreverse8(unsigned long long a) { return (unsigned long long) BitReverseTable8[a]; } unsigned long long bitreverse16(unsigned long long a) { return ((unsigned long long) BitReverseTable8[a & 0xff] << 8) | ((unsigned long long) BitReverseTable8[(a >> 8)]); } unsigned long long bitreverse24(unsigned long long a) { return ((unsigned long long) BitReverseTable8[a & 0xff] << 16) | ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 8) | ((unsigned long long) BitReverseTable8[(a >> 16)]); } unsigned long long bitreverse32(unsigned long long a) { return ((unsigned long long) BitReverseTable8[a & 0xff] << 24) | ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 16) | ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 8) | ((unsigned long long) BitReverseTable8[(a >> 24)]); } unsigned long long bitreverse40(unsigned long long a) { return ((unsigned long long) BitReverseTable8[a & 0xff] << 32) | ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 24) | ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 16) | ((unsigned long long) BitReverseTable8[(a >> 24) & 0xff] << 8) | ((unsigned long long) BitReverseTable8[(a >> 32)]); } unsigned long long bitreverse48(unsigned long long a) { return ((unsigned long long) BitReverseTable8[a & 0xff] << 40) | ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 32) | ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 24) | ((unsigned long long) BitReverseTable8[(a >> 24) & 0xff] << 16) | ((unsigned long long) BitReverseTable8[(a >> 32) & 0xff] << 8) | ((unsigned long long) BitReverseTable8[(a >> 40)]); } unsigned long long bitreverse56(unsigned long long a) { return ((unsigned long long) BitReverseTable8[a & 0xff] << 48) | ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 40) | ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 32) | ((unsigned long long) BitReverseTable8[(a >> 24) & 0xff] << 24) | ((unsigned long long) BitReverseTable8[(a >> 32) & 0xff] << 16) | ((unsigned long long) BitReverseTable8[(a >> 40) & 0xff] << 8) | ((unsigned long long) BitReverseTable8[(a >> 48)]); } unsigned long long bitreverse64(unsigned long long a) { return ((unsigned long long) BitReverseTable8[a & 0xff] << 56) | ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 48) | ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 40) | ((unsigned long long) BitReverseTable8[(a >> 24) & 0xff] << 32) | ((unsigned long long) BitReverseTable8[(a >> 32) & 0xff] << 24) | ((unsigned long long) BitReverseTable8[(a >> 40) & 0xff] << 16) | ((unsigned long long) BitReverseTable8[(a >> 48) & 0xff] << 8) | ((unsigned long long) BitReverseTable8[(a >> 56)]); } #ifndef HAVE_POPCOUNT // https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel #define T unsignedInt Int popcount(T a) { a=a-((a >> 1) & (T)~(T)0/3); a=(a & (T)~(T)0/15*3)+((a >> 2) & (T)~(T)0/15*3); a=(a+(a >> 4)) & (T)~(T)0/255*15; return (T)(a*((T)~(T)0/255)) >> (sizeof(T)-1)*CHAR_BIT; } #undef T #endif // Return the factorial of a non-negative integer using a lookup table. Int factorial(Int n) { static Int *table; static Int size=0; if(size == 0) { Int f=1; size=2; while(f <= Int_MAX/size) f *= (size++); table=new Int[size]; table[0]=f=1; for(Int i=1; i < size; ++i) { f *= i; table[i]=f; } } if(n >= size) integeroverflow(0); return table[n]; } static inline Int Round(double x) { return Int(x+((x >= 0) ? 0.5 : -0.5)); } inline Int sgn(double x) { return (x > 0.0 ? 1 : (x < 0.0 ? -1 : 0)); } namespace { Int makeRandomSeed() { std::random_device rd; std::uniform_int_distribution dist; return dist(rd); } std::mt19937_64 randEngine(makeRandomSeed()); } // Autogenerated routines: #ifndef NOSYM #include "runmath.symbols.h" #endif namespace run { #line 190 "./runmath.in" // real ^(real x, Int y); void gen_runmath0(stack *Stack) { Int y=vm::pop(Stack); real x=vm::pop(Stack); #line 191 "./runmath.in" {Stack->push(pow(x,y)); return;} } #line 195 "./runmath.in" // pair ^(pair z, Int y); void gen_runmath1(stack *Stack) { Int y=vm::pop(Stack); pair z=vm::pop(Stack); #line 196 "./runmath.in" {Stack->push(pow(z,y)); return;} } #line 200 "./runmath.in" // Int quotient(Int x, Int y); void gen_runmath2(stack *Stack) { Int y=vm::pop(Stack); Int x=vm::pop(Stack); #line 201 "./runmath.in" {Stack->push(quotient()(x,y)); return;} } #line 205 "./runmath.in" // Int abs(Int x); void gen_runmath3(stack *Stack) { Int x=vm::pop(Stack); #line 206 "./runmath.in" {Stack->push(Abs(x)); return;} } #line 210 "./runmath.in" // Int sgn(real x); void gen_runmath4(stack *Stack) { real x=vm::pop(Stack); #line 211 "./runmath.in" {Stack->push(sgn(x)); return;} } #line 215 "./runmath.in" // Int rand(Int a=0, Int b=Int_MAX); void gen_runmath5(stack *Stack) { Int b=vm::pop(Stack,Int_MAX); Int a=vm::pop(Stack,0); #line 216 "./runmath.in" std::uniform_int_distribution dist((unsigned long long) a, (unsigned long long) b); {Stack->push(dist(randEngine)); return;} } #line 221 "./runmath.in" // void srand(Int seed); void gen_runmath6(stack *Stack) { Int seed=vm::pop(Stack); #line 222 "./runmath.in" if(seed < 0) seed=makeRandomSeed(); randEngine=std::mt19937_64(seed); } // a random number uniformly distributed in the interval [0,1) #line 229 "./runmath.in" // real unitrand(); void gen_runmath7(stack *Stack) { #line 230 "./runmath.in" std::uniform_real_distribution dist(0.0, 1.0); {Stack->push(dist(randEngine)); return;} } #line 235 "./runmath.in" // Int ceil(real x); void gen_runmath8(stack *Stack) { real x=vm::pop(Stack); #line 236 "./runmath.in" {Stack->push(Intcast(ceil(x))); return;} } #line 240 "./runmath.in" // Int floor(real x); void gen_runmath9(stack *Stack) { real x=vm::pop(Stack); #line 241 "./runmath.in" {Stack->push(Intcast(floor(x))); return;} } #line 245 "./runmath.in" // Int round(real x); void gen_runmath10(stack *Stack) { real x=vm::pop(Stack); #line 246 "./runmath.in" if(validInt(x)) {Stack->push(Round(x)); return;} integeroverflow(0); } #line 251 "./runmath.in" // Int Ceil(real x); void gen_runmath11(stack *Stack) { real x=vm::pop(Stack); #line 252 "./runmath.in" {Stack->push(Ceil(x)); return;} } #line 256 "./runmath.in" // Int Floor(real x); void gen_runmath12(stack *Stack) { real x=vm::pop(Stack); #line 257 "./runmath.in" {Stack->push(Floor(x)); return;} } #line 261 "./runmath.in" // Int Round(real x); void gen_runmath13(stack *Stack) { real x=vm::pop(Stack); #line 262 "./runmath.in" {Stack->push(Round(Intcap(x))); return;} } #line 266 "./runmath.in" // real fmod(real x, real y); void gen_runmath14(stack *Stack) { real y=vm::pop(Stack); real x=vm::pop(Stack); #line 267 "./runmath.in" if (y == 0.0) dividebyzero(); {Stack->push(fmod(x,y)); return;} } #line 272 "./runmath.in" // real atan2(real y, real x); void gen_runmath15(stack *Stack) { real x=vm::pop(Stack); real y=vm::pop(Stack); #line 273 "./runmath.in" {Stack->push(atan2(y,x)); return;} } #line 277 "./runmath.in" // real hypot(real x, real y); void gen_runmath16(stack *Stack) { real y=vm::pop(Stack); real x=vm::pop(Stack); #line 278 "./runmath.in" {Stack->push(hypot(x,y)); return;} } #line 282 "./runmath.in" // real remainder(real x, real y); void gen_runmath17(stack *Stack) { real y=vm::pop(Stack); real x=vm::pop(Stack); #line 283 "./runmath.in" {Stack->push(remainder(x,y)); return;} } #line 287 "./runmath.in" // real Jn(Int n, real x); void gen_runmath18(stack *Stack) { real x=vm::pop(Stack); Int n=vm::pop(Stack); #line 288 "./runmath.in" {Stack->push(jn(n,x)); return;} } #line 292 "./runmath.in" // real Yn(Int n, real x); void gen_runmath19(stack *Stack) { real x=vm::pop(Stack); Int n=vm::pop(Stack); #line 293 "./runmath.in" {Stack->push(yn(n,x)); return;} } #line 297 "./runmath.in" // real erf(real x); void gen_runmath20(stack *Stack) { real x=vm::pop(Stack); #line 298 "./runmath.in" {Stack->push(erf(x)); return;} } #line 302 "./runmath.in" // real erfc(real x); void gen_runmath21(stack *Stack) { real x=vm::pop(Stack); #line 303 "./runmath.in" {Stack->push(erfc(x)); return;} } #line 307 "./runmath.in" // Int factorial(Int n); void gen_runmath22(stack *Stack) { Int n=vm::pop(Stack); #line 308 "./runmath.in" if(n < 0) error(invalidargument); {Stack->push(factorial(n)); return;} } #line 312 "./runmath.in" // Int choose(Int n, Int k); void gen_runmath23(stack *Stack) { Int k=vm::pop(Stack); Int n=vm::pop(Stack); #line 313 "./runmath.in" if(n < 0 || k < 0 || k > n) error(invalidargument); Int f=1; Int r=n-k; for(Int i=n; i > r; --i) { if(f > Int_MAX/i) integeroverflow(0); f=(f*i)/(n-i+1); } {Stack->push(f); return;} } #line 323 "./runmath.in" // real gamma(real x); void gen_runmath24(stack *Stack) { real x=vm::pop(Stack); #line 324 "./runmath.in" {Stack->push(std::tgamma(x)); return;} } #line 328 "./runmath.in" // realarray* quadraticroots(real a, real b, real c); void gen_runmath25(stack *Stack) { real c=vm::pop(Stack); real b=vm::pop(Stack); real a=vm::pop(Stack); #line 329 "./runmath.in" quadraticroots q(a,b,c); array *roots=new array(q.roots); if(q.roots >= 1) (*roots)[0]=q.t1; if(q.roots == 2) (*roots)[1]=q.t2; {Stack->push(roots); return;} } #line 337 "./runmath.in" // pairarray* quadraticroots(explicit pair a, explicit pair b, explicit pair c); void gen_runmath26(stack *Stack) { pair c=vm::pop(Stack); pair b=vm::pop(Stack); pair a=vm::pop(Stack); #line 338 "./runmath.in" Quadraticroots q(a,b,c); array *roots=new array(q.roots); if(q.roots >= 1) (*roots)[0]=q.z1; if(q.roots == 2) (*roots)[1]=q.z2; {Stack->push(roots); return;} } #line 346 "./runmath.in" // realarray* cubicroots(real a, real b, real c, real d); void gen_runmath27(stack *Stack) { real d=vm::pop(Stack); real c=vm::pop(Stack); real b=vm::pop(Stack); real a=vm::pop(Stack); #line 347 "./runmath.in" cubicroots q(a,b,c,d); array *roots=new array(q.roots); if(q.roots >= 1) (*roots)[0]=q.t1; if(q.roots >= 2) (*roots)[1]=q.t2; if(q.roots == 3) (*roots)[2]=q.t3; {Stack->push(roots); return;} } // Logical operations #line 358 "./runmath.in" // bool !(bool b); void gen_runmath28(stack *Stack) { bool b=vm::pop(Stack); #line 359 "./runmath.in" {Stack->push(!b); return;} } #line 364 "./runmath.in" void boolMemEq(stack *Stack) { vmFrame * b=vm::pop(Stack); vmFrame * a=vm::pop(Stack); #line 365 "./runmath.in" {Stack->push(a == b); return;} } #line 369 "./runmath.in" void boolMemNeq(stack *Stack) { vmFrame * b=vm::pop(Stack); vmFrame * a=vm::pop(Stack); #line 370 "./runmath.in" {Stack->push(a != b); return;} } #line 374 "./runmath.in" void boolFuncEq(stack *Stack) { callable * b=vm::pop(Stack); callable * a=vm::pop(Stack); #line 375 "./runmath.in" {Stack->push(a->compare(b)); return;} } #line 379 "./runmath.in" void boolFuncNeq(stack *Stack) { callable * b=vm::pop(Stack); callable * a=vm::pop(Stack); #line 380 "./runmath.in" {Stack->push(!(a->compare(b))); return;} } // Bit operations #line 386 "./runmath.in" // Int AND(Int a, Int b); void gen_runmath33(stack *Stack) { Int b=vm::pop(Stack); Int a=vm::pop(Stack); #line 387 "./runmath.in" {Stack->push(a & b); return;} } #line 392 "./runmath.in" // Int OR(Int a, Int b); void gen_runmath34(stack *Stack) { Int b=vm::pop(Stack); Int a=vm::pop(Stack); #line 393 "./runmath.in" {Stack->push(a | b); return;} } #line 397 "./runmath.in" // Int XOR(Int a, Int b); void gen_runmath35(stack *Stack) { Int b=vm::pop(Stack); Int a=vm::pop(Stack); #line 398 "./runmath.in" {Stack->push(a ^ b); return;} } #line 402 "./runmath.in" // Int NOT(Int a); void gen_runmath36(stack *Stack) { Int a=vm::pop(Stack); #line 403 "./runmath.in" {Stack->push(~a); return;} } #line 407 "./runmath.in" // Int CLZ(Int a); void gen_runmath37(stack *Stack) { Int a=vm::pop(Stack); #line 408 "./runmath.in" if((unsigned long long) a > 0xFFFFFFFF) {Stack->push(CLZ((uint32_t) ((unsigned long long) a >> 32))); return;} else { int bits=intbits(); if(a != 0) {Stack->push(bits-32+CLZ((uint32_t) a)); return;} {Stack->push(bits); return;} } } #line 418 "./runmath.in" // Int popcount(Int a); void gen_runmath38(stack *Stack) { Int a=vm::pop(Stack); #line 419 "./runmath.in" {Stack->push(popcount(a)); return;} } #line 423 "./runmath.in" // Int CTZ(Int a); void gen_runmath39(stack *Stack) { Int a=vm::pop(Stack); #line 424 "./runmath.in" {Stack->push(popcount((a&-a)-1)); return;} } // bitreverse a within a word of length bits. #line 429 "./runmath.in" // Int bitreverse(Int a, Int bits); void gen_runmath40(stack *Stack) { Int bits=vm::pop(Stack); Int a=vm::pop(Stack); #line 430 "./runmath.in" typedef unsigned long long Bitreverse(unsigned long long a); static Bitreverse *B[]={bitreverse8,bitreverse16,bitreverse24,bitreverse32, bitreverse40,bitreverse48,bitreverse56,bitreverse64}; int maxbits=intbits()-1; // Drop sign bit #if Int_MAX2 >= 0x7fffffffffffffffLL --maxbits; // Drop extra bit for reserved values #endif if(bits <= 0 || bits > maxbits || a < 0 || (unsigned long long) a >= (1ULL << bits)) {Stack->push(-1); return;} unsigned int bytes=(bits+7)/8; {Stack->push(B[bytes-1]((unsigned long long) a) >> (8*bytes-bits)); return;} } } // namespace run namespace trans { void gen_runmath_venv(venv &ve) { #line 190 "./runmath.in" addFunc(ve, run::gen_runmath0, primReal(), SYM_CARET, formal(primReal(), SYM(x), false, false), formal(primInt(), SYM(y), false, false)); #line 195 "./runmath.in" addFunc(ve, run::gen_runmath1, primPair(), SYM_CARET, formal(primPair(), SYM(z), false, false), formal(primInt(), SYM(y), false, false)); #line 200 "./runmath.in" addFunc(ve, run::gen_runmath2, primInt(), SYM(quotient), formal(primInt(), SYM(x), false, false), formal(primInt(), SYM(y), false, false)); #line 205 "./runmath.in" addFunc(ve, run::gen_runmath3, primInt(), SYM(abs), formal(primInt(), SYM(x), false, false)); #line 210 "./runmath.in" addFunc(ve, run::gen_runmath4, primInt(), SYM(sgn), formal(primReal(), SYM(x), false, false)); #line 215 "./runmath.in" addFunc(ve, run::gen_runmath5, primInt(), SYM(rand), formal(primInt(), SYM(a), true, false), formal(primInt(), SYM(b), true, false)); #line 221 "./runmath.in" addFunc(ve, run::gen_runmath6, primVoid(), SYM(srand), formal(primInt(), SYM(seed), false, false)); #line 228 "./runmath.in" addFunc(ve, run::gen_runmath7, primReal(), SYM(unitrand)); #line 235 "./runmath.in" addFunc(ve, run::gen_runmath8, primInt(), SYM(ceil), formal(primReal(), SYM(x), false, false)); #line 240 "./runmath.in" addFunc(ve, run::gen_runmath9, primInt(), SYM(floor), formal(primReal(), SYM(x), false, false)); #line 245 "./runmath.in" addFunc(ve, run::gen_runmath10, primInt(), SYM(round), formal(primReal(), SYM(x), false, false)); #line 251 "./runmath.in" addFunc(ve, run::gen_runmath11, primInt(), SYM(Ceil), formal(primReal(), SYM(x), false, false)); #line 256 "./runmath.in" addFunc(ve, run::gen_runmath12, primInt(), SYM(Floor), formal(primReal(), SYM(x), false, false)); #line 261 "./runmath.in" addFunc(ve, run::gen_runmath13, primInt(), SYM(Round), formal(primReal(), SYM(x), false, false)); #line 266 "./runmath.in" addFunc(ve, run::gen_runmath14, primReal(), SYM(fmod), formal(primReal(), SYM(x), false, false), formal(primReal(), SYM(y), false, false)); #line 272 "./runmath.in" addFunc(ve, run::gen_runmath15, primReal(), SYM(atan2), formal(primReal(), SYM(y), false, false), formal(primReal(), SYM(x), false, false)); #line 277 "./runmath.in" addFunc(ve, run::gen_runmath16, primReal(), SYM(hypot), formal(primReal(), SYM(x), false, false), formal(primReal(), SYM(y), false, false)); #line 282 "./runmath.in" addFunc(ve, run::gen_runmath17, primReal(), SYM(remainder), formal(primReal(), SYM(x), false, false), formal(primReal(), SYM(y), false, false)); #line 287 "./runmath.in" addFunc(ve, run::gen_runmath18, primReal(), SYM(Jn), formal(primInt(), SYM(n), false, false), formal(primReal(), SYM(x), false, false)); #line 292 "./runmath.in" addFunc(ve, run::gen_runmath19, primReal(), SYM(Yn), formal(primInt(), SYM(n), false, false), formal(primReal(), SYM(x), false, false)); #line 297 "./runmath.in" addFunc(ve, run::gen_runmath20, primReal(), SYM(erf), formal(primReal(), SYM(x), false, false)); #line 302 "./runmath.in" addFunc(ve, run::gen_runmath21, primReal(), SYM(erfc), formal(primReal(), SYM(x), false, false)); #line 307 "./runmath.in" addFunc(ve, run::gen_runmath22, primInt(), SYM(factorial), formal(primInt(), SYM(n), false, false)); #line 312 "./runmath.in" addFunc(ve, run::gen_runmath23, primInt(), SYM(choose), formal(primInt(), SYM(n), false, false), formal(primInt(), SYM(k), false, false)); #line 323 "./runmath.in" addFunc(ve, run::gen_runmath24, primReal(), SYM(gamma), formal(primReal(), SYM(x), false, false)); #line 328 "./runmath.in" addFunc(ve, run::gen_runmath25, realArray(), SYM(quadraticroots), formal(primReal(), SYM(a), false, false), formal(primReal(), SYM(b), false, false), formal(primReal(), SYM(c), false, false)); #line 337 "./runmath.in" addFunc(ve, run::gen_runmath26, pairArray(), SYM(quadraticroots), formal(primPair(), SYM(a), false, true), formal(primPair(), SYM(b), false, true), formal(primPair(), SYM(c), false, true)); #line 346 "./runmath.in" addFunc(ve, run::gen_runmath27, realArray(), SYM(cubicroots), formal(primReal(), SYM(a), false, false), formal(primReal(), SYM(b), false, false), formal(primReal(), SYM(c), false, false), formal(primReal(), SYM(d), false, false)); #line 356 "./runmath.in" addFunc(ve, run::gen_runmath28, primBoolean(), SYM_LOGNOT, formal(primBoolean(), SYM(b), false, false)); #line 364 "./runmath.in" REGISTER_BLTIN(run::boolMemEq,"boolMemEq"); #line 369 "./runmath.in" REGISTER_BLTIN(run::boolMemNeq,"boolMemNeq"); #line 374 "./runmath.in" REGISTER_BLTIN(run::boolFuncEq,"boolFuncEq"); #line 379 "./runmath.in" REGISTER_BLTIN(run::boolFuncNeq,"boolFuncNeq"); #line 384 "./runmath.in" addFunc(ve, run::gen_runmath33, primInt(), SYM(AND), formal(primInt(), SYM(a), false, false), formal(primInt(), SYM(b), false, false)); #line 392 "./runmath.in" addFunc(ve, run::gen_runmath34, primInt(), SYM(OR), formal(primInt(), SYM(a), false, false), formal(primInt(), SYM(b), false, false)); #line 397 "./runmath.in" addFunc(ve, run::gen_runmath35, primInt(), SYM(XOR), formal(primInt(), SYM(a), false, false), formal(primInt(), SYM(b), false, false)); #line 402 "./runmath.in" addFunc(ve, run::gen_runmath36, primInt(), SYM(NOT), formal(primInt(), SYM(a), false, false)); #line 407 "./runmath.in" addFunc(ve, run::gen_runmath37, primInt(), SYM(CLZ), formal(primInt(), SYM(a), false, false)); #line 418 "./runmath.in" addFunc(ve, run::gen_runmath38, primInt(), SYM(popcount), formal(primInt(), SYM(a), false, false)); #line 423 "./runmath.in" addFunc(ve, run::gen_runmath39, primInt(), SYM(CTZ), formal(primInt(), SYM(a), false, false)); #line 428 "./runmath.in" addFunc(ve, run::gen_runmath40, primInt(), SYM(bitreverse), formal(primInt(), SYM(a), false, false), formal(primInt(), SYM(bits), false, false)); } } // namespace trans