1+ enum fn {
2+ #ifdef BLAS
3+ nrm2 , asum , imax ,
4+ #endif
5+ };
16void reg (int64_t id , int64_t name , int32_t arity ){
27 int64_t l = ti (14 ,(uint32_t )l2 (id , Ku (name )));
38 SetI32 ((int32_t )l - 12 ,arity );
49 dx (Asn (sc (Ku (name )),l ));
510}
611void libs (void ){ //encode strings with: https://play.golang.org/p/4ethx6OEVCR
712#ifdef BLAS
8- reg (0 , 846033518ull ,1 ); //nrm2
9- reg (1 ,1836413793ull ,1 ); //asum
10- reg (2 ,2019650921ull ,1 ); //imax
13+ reg (nrm2 , 846033518ull ,1 ); //id k-name arity (name is same as id-enum)
14+ reg (asum ,1836413793ull ,1 );
15+ reg (imax ,2019650921ull ,1 );
1116#endif
12- //reg(1,...);
13- //reg(2,...);
1417}
18+
1519int64_t fzvec (int64_t x ){
1620 int32_t xt = tp (x );
1721 if (xt < 16 ){x = Enl (x );xt = tp (x );}
@@ -29,18 +33,18 @@ int cblas_izamax(int,double*,int);
2933
3034#define fp (x ) ((double*)(M_+(int32_t)x))
3135
32- int64_t cnative (int64_t x , int64_t y ){
36+ int64_t cnative (int64_t x , int64_t y ){ //function-id, list of args(length arity)
3337 int32_t xt ,xn ,i ;
3438 double r ;
3539 switch (x ){ //switch registered function id
3640#ifdef BLAS
37- case 0 :x = fzvec (Fst (y ));xn = nn (x );if (xt == Zt )xn *=2 ;
41+ case nrm2 :x = fzvec (Fst (y ));xn = nn (x );if (xt == Zt )xn *=2 ;
3842 r = cblas_dnrm2 (xn ,fp (x ),1 );
3943 dx (x );return Kf (r );
40- case 1 :x = fzvec (Fst (y ));xn = nn (x );if (xt == Zt )xn *=2 ;
44+ case asum :x = fzvec (Fst (y ));xn = nn (x );if (xt == Zt )xn *=2 ;
4145 r = cblas_dasum (xn ,fp (x ),1 );
4246 dx (x );return Kf (r );
43- case 2 :x = fzvec (Fst (y ));xn = nn (x );
47+ case imax :x = fzvec (Fst (y ));xn = nn (x );
4448 i = tp (x )== Ft ?cblas_idamax (xn ,fp (x ),1 ):cblas_izamax (xn ,fp (x ),1 );
4549 dx (x );return Ki (i );
4650#endif
0 commit comments