Max 5 API Reference
00001 /* 00002 Copyright 2001 - Cycling '74 00003 Joshua Kit Clayton jkc@cycling74.com 00004 */ 00005 00006 #include "jit.common.h" 00007 #include "jit.op.h" 00008 #include "ext_obex.h" 00009 #include "jit.altivec.h" 00010 00011 /* remove the windows macro _hypot -[dg] */ 00012 #ifdef WIN_VERSION 00013 #ifdef hypot 00014 #undef hypot 00015 #endif 00016 #endif 00017 00018 typedef struct _jit_op 00019 { 00020 t_object ob; 00021 long opsymcount; 00022 t_symbol *opsym[JIT_MATRIX_MAX_PLANECOUNT]; 00023 } t_jit_op; 00024 00025 typedef struct _jit_op_vecdata 00026 { 00027 t_jit_op_fn opfn[JIT_MATRIX_MAX_PLANECOUNT]; 00028 } t_jit_op_vecdata; 00029 00030 #define JIT_OP_ADD_FUN(o,argcount,name,cfun,lfun,f32fun,f64fun) \ 00031 o = (t_jit_op_fn_object *)jit_op_fn_object_new(gensym(name),argcount);\ 00032 o->charfn = (t_jit_op_fn) jit_op_vector_##cfun##_char; \ 00033 o->longfn = (t_jit_op_fn) jit_op_vector_##lfun##_long; \ 00034 o->float32fn = (t_jit_op_fn) jit_op_vector_##f32fun##_float32; \ 00035 o->float64fn = (t_jit_op_fn) jit_op_vector_##f64fun##_float64; \ 00036 jit_op_fn_store(gensym(name),o) 00037 00038 #define JIT_OP_ADD_FUN_ALL(o,argcount,name,fun) JIT_OP_ADD_FUN(o,argcount,name,fun,fun,fun,fun) 00039 #define JIT_OP_ADD_FUN_INT(o,argcount,name,fun) JIT_OP_ADD_FUN(o,argcount,name,fun,fun,pass,pass) 00040 #define JIT_OP_ADD_FUN_FLOAT(o,argcount,name,fun) JIT_OP_ADD_FUN(o,argcount,name,pass,pass,fun,fun) 00041 00042 void *_jit_op_class=NULL; 00043 void *_jit_op_fn_class=NULL; 00044 t_hashtab *_jit_op_fn_hashtab=NULL; 00045 00046 void *jit_op_fn_object_new(t_symbol *name, long argcount); 00047 void jit_op_fn_object_free(t_jit_op_fn_object *x); 00048 00049 t_jit_err jit_op_init(void); 00050 void jit_op_vector_init(); 00051 t_jit_op *jit_op_new(void); 00052 void jit_op_free(t_jit_op *x); 00053 t_jit_err jit_op_getvecdata(t_jit_op *x, t_jit_op_vecdata *vd); 00054 t_jit_err jit_op_matrix_calc(t_jit_op *x, void *inputs, void *outputs); 00055 00056 void jit_op_calculate_ndim(t_jit_op_vecdata *vecdata, long dim, long *dimsize, long planecount, t_jit_matrix_info *in1_minfo, char *bip1, 00057 t_jit_matrix_info *in2_minfo, char *bip2, t_jit_matrix_info *out_minfo, char *bop); 00058 00059 void jit_op_vector_ignore (long n, void *vecdata, t_jit_op_info *in1, t_jit_op_info *in2, t_jit_op_info *out); 00060 00061 t_jit_err jit_op_init(void) 00062 { 00063 long attrflags=0; 00064 t_jit_object *attr,*mop; 00065 t_symbol *atsym; 00066 00067 atsym = gensym("jit_attr_offset"); 00068 00069 _jit_op_class = jit_class_new("jit_op",(method)jit_op_new,(method)jit_op_free, 00070 sizeof(t_jit_op),0L); 00071 00072 //add mop 00073 mop = jit_object_new(_jit_sym_jit_mop,2,1); 00074 jit_class_addadornment(_jit_op_class,mop); 00075 //add methods 00076 jit_class_addmethod(_jit_op_class, (method)jit_op_matrix_calc, "matrix_calc", A_CANT, 0L); 00077 //add attributes 00078 attrflags = JIT_ATTR_GET_DEFER_LOW | JIT_ATTR_SET_USURP_LOW; 00079 attr = jit_object_new(_jit_sym_jit_attr_offset_array,"op",_jit_sym_symbol,JIT_MATRIX_MAX_PLANECOUNT,attrflags, 00080 (method)0L,(method)0L,calcoffset(t_jit_op,opsymcount),calcoffset(t_jit_op,opsym)); 00081 jit_class_addattr(_jit_op_class,attr); 00082 jit_class_register(_jit_op_class); 00083 00084 _jit_op_fn_class = jit_class_new("jit_op_fn",(method)jit_op_fn_object_new,(method)jit_op_fn_object_free, 00085 sizeof(t_jit_op_fn_object),0L); 00086 jit_class_register(_jit_op_fn_class); 00087 00088 jit_op_vector_init(); 00089 00090 return JIT_ERR_NONE; 00091 } 00092 00093 void *jit_op_fn_object_new(t_symbol *name, long argcount) 00094 { 00095 t_jit_op_fn_object *x; 00096 00097 x = jit_object_alloc(_jit_op_fn_class); 00098 x->name = name; 00099 x->argcount = argcount; 00100 x->charfn = (t_jit_op_fn) jit_op_vector_ignore; 00101 x->longfn = (t_jit_op_fn) jit_op_vector_ignore; 00102 x->float32fn = (t_jit_op_fn) jit_op_vector_ignore; 00103 x->float64fn = (t_jit_op_fn) jit_op_vector_ignore; 00104 00105 return x; 00106 } 00107 00108 void jit_op_fn_object_free(t_jit_op_fn_object *x) 00109 { 00110 // nada 00111 } 00112 00113 t_jit_op_fn_object *jit_op_fn_lookup(t_symbol *opsym) 00114 { 00115 t_jit_op_fn_object *o=NULL; 00116 00117 hashtab_lookup(_jit_op_fn_hashtab,opsym,(t_object **)&o); 00118 return o; 00119 } 00120 00121 t_jit_err jit_op_fn_store(t_symbol *opsym, t_jit_op_fn_object *x) 00122 { 00123 t_jit_op_fn_object *o=NULL; 00124 00125 hashtab_lookup(_jit_op_fn_hashtab,opsym,(t_object **)&o); 00126 if (o) 00127 return JIT_ERR_GENERIC; //already registered 00128 00129 hashtab_store(_jit_op_fn_hashtab,opsym,(t_object *)x); 00130 return JIT_ERR_NONE; 00131 } 00132 00133 void jit_op_vector_init() 00134 { 00135 t_jit_op_fn_object *o; 00136 00137 if (_jit_op_fn_hashtab) 00138 return; 00139 00140 _jit_op_fn_hashtab = hashtab_new(0); 00141 00142 // arith 00143 JIT_OP_ADD_FUN_ALL(o,1,"pass",pass); 00144 JIT_OP_ADD_FUN_ALL(o,2,"mult",mult); 00145 JIT_OP_ADD_FUN_ALL(o,2,"*",mult); 00146 JIT_OP_ADD_FUN_ALL(o,2,"div",div); 00147 JIT_OP_ADD_FUN_ALL(o,2,"/",div); 00148 JIT_OP_ADD_FUN(o,2,"add",adds,add,add,add); 00149 JIT_OP_ADD_FUN(o,2,"+",adds,add,add,add); 00150 JIT_OP_ADD_FUN_ALL(o,2,"addmod",add); 00151 JIT_OP_ADD_FUN_ALL(o,2,"+m",add); 00152 JIT_OP_ADD_FUN(o,2,"sub",subs,sub,sub,sub); 00153 JIT_OP_ADD_FUN(o,2,"-",subs,sub,sub,sub); 00154 JIT_OP_ADD_FUN_ALL(o,2,"submod",sub); 00155 JIT_OP_ADD_FUN_ALL(o,2,"-m",sub); 00156 JIT_OP_ADD_FUN_ALL(o,2,"mod",mod); 00157 JIT_OP_ADD_FUN_ALL(o,2,"%",mod); 00158 JIT_OP_ADD_FUN_ALL(o,2,"min",min); 00159 JIT_OP_ADD_FUN_ALL(o,2,"max",max); 00160 JIT_OP_ADD_FUN_ALL(o,2,"avg",avg); 00161 JIT_OP_ADD_FUN(o,1,"abs",pass,abs,abs,abs); 00162 JIT_OP_ADD_FUN_ALL(o,2,"absdiff",absdiff); 00163 JIT_OP_ADD_FUN_ALL(o,2,"flippass",flippass); 00164 JIT_OP_ADD_FUN_ALL(o,2,"!pass",flippass); 00165 JIT_OP_ADD_FUN_ALL(o,2,"flipdiv",flipdiv); 00166 JIT_OP_ADD_FUN_ALL(o,2,"!/",flipdiv); 00167 JIT_OP_ADD_FUN_ALL(o,2,"flipsub",flipsub); 00168 JIT_OP_ADD_FUN_ALL(o,2,"!-",flipsub); 00169 JIT_OP_ADD_FUN_ALL(o,2,"flipmod",flipmod); 00170 JIT_OP_ADD_FUN_ALL(o,2,"!%",flipmod); 00171 JIT_OP_ADD_FUN_FLOAT(o,2,"fold",fold); // only float for now 00172 JIT_OP_ADD_FUN_FLOAT(o,2,"wrap",wrap); // only float for now 00173 // bitwise (NO FLOAT VERSION) 00174 JIT_OP_ADD_FUN_INT(o,2,"bitand",bitand); 00175 JIT_OP_ADD_FUN_INT(o,2,"&",bitand); 00176 JIT_OP_ADD_FUN_INT(o,2,"bitor",bitor); 00177 JIT_OP_ADD_FUN_INT(o,2,"|",bitor); 00178 JIT_OP_ADD_FUN_INT(o,2,"bitxor",bitxor); 00179 JIT_OP_ADD_FUN_INT(o,2,"^",bitxor); 00180 JIT_OP_ADD_FUN_INT(o,1,"bitnot",bitnot); 00181 JIT_OP_ADD_FUN_INT(o,1,"~",bitnot); 00182 JIT_OP_ADD_FUN_INT(o,2,"rshift",rshift); 00183 JIT_OP_ADD_FUN_INT(o,2,">>",rshift); 00184 JIT_OP_ADD_FUN_INT(o,2,"lshift",lshift); 00185 JIT_OP_ADD_FUN_INT(o,2,"<<",lshift); 00186 // logical 00187 JIT_OP_ADD_FUN_ALL(o,2,"and",and); 00188 JIT_OP_ADD_FUN_ALL(o,2,"&&",and); 00189 JIT_OP_ADD_FUN_ALL(o,2,"or",or); 00190 JIT_OP_ADD_FUN_ALL(o,2,"||",or); 00191 JIT_OP_ADD_FUN_ALL(o,1,"not",not); 00192 JIT_OP_ADD_FUN_ALL(o,1,"!",not); 00193 JIT_OP_ADD_FUN_ALL(o,2,"gt",gt); 00194 JIT_OP_ADD_FUN_ALL(o,2,">",gt); 00195 JIT_OP_ADD_FUN_ALL(o,2,"lt",lt); 00196 JIT_OP_ADD_FUN_ALL(o,2,"<",lt); 00197 JIT_OP_ADD_FUN_ALL(o,2,"gte",gte); 00198 JIT_OP_ADD_FUN_ALL(o,2,">=",gte); 00199 JIT_OP_ADD_FUN_ALL(o,2,"lte",lte); 00200 JIT_OP_ADD_FUN_ALL(o,2,"<=",lte); 00201 JIT_OP_ADD_FUN_ALL(o,2,"eq",eq); 00202 JIT_OP_ADD_FUN_ALL(o,2,"==",eq); 00203 JIT_OP_ADD_FUN_ALL(o,2,"neq",neq); 00204 JIT_OP_ADD_FUN_ALL(o,2,"!=",neq); 00205 // logical pass 00206 JIT_OP_ADD_FUN_ALL(o,2,"gtp",gtp); 00207 JIT_OP_ADD_FUN_ALL(o,2,">p",gtp); 00208 JIT_OP_ADD_FUN_ALL(o,2,"ltp",ltp); 00209 JIT_OP_ADD_FUN_ALL(o,2,"<p",ltp); 00210 JIT_OP_ADD_FUN_ALL(o,2,"gtep",gtep); 00211 JIT_OP_ADD_FUN_ALL(o,2,">=p",gtep); 00212 JIT_OP_ADD_FUN_ALL(o,2,"ltep",ltep); 00213 JIT_OP_ADD_FUN_ALL(o,2,"<=p",ltep); 00214 JIT_OP_ADD_FUN_ALL(o,2,"eqp",eqp); 00215 JIT_OP_ADD_FUN_ALL(o,2,"==p",eqp); 00216 JIT_OP_ADD_FUN_ALL(o,2,"neqp",neqp); 00217 JIT_OP_ADD_FUN_ALL(o,2,"!=p",neqp); 00218 00219 // trig 00220 JIT_OP_ADD_FUN_FLOAT(o,1,"sin",sin); 00221 JIT_OP_ADD_FUN_FLOAT(o,1,"cos",cos); 00222 JIT_OP_ADD_FUN_FLOAT(o,1,"tan",tan); 00223 JIT_OP_ADD_FUN_FLOAT(o,1,"asin",asin); 00224 JIT_OP_ADD_FUN_FLOAT(o,1,"acos",acos); 00225 JIT_OP_ADD_FUN_FLOAT(o,1,"atan",atan); 00226 JIT_OP_ADD_FUN_FLOAT(o,2,"atan2",atan2); 00227 // hyperbolic trig 00228 JIT_OP_ADD_FUN_FLOAT(o,1,"sinh",sinh); 00229 JIT_OP_ADD_FUN_FLOAT(o,1,"cosh",cosh); 00230 JIT_OP_ADD_FUN_FLOAT(o,1,"tanh",tanh); 00231 JIT_OP_ADD_FUN_FLOAT(o,1,"asinh",asinh); 00232 JIT_OP_ADD_FUN_FLOAT(o,1,"acosh",acosh); 00233 JIT_OP_ADD_FUN_FLOAT(o,1,"atanh",atanh); 00234 // exponential/logarithmic 00235 JIT_OP_ADD_FUN_FLOAT(o,1,"exp",exp); 00236 JIT_OP_ADD_FUN_FLOAT(o,1,"exp2",exp2); 00237 JIT_OP_ADD_FUN_FLOAT(o,1,"ln",log); 00238 JIT_OP_ADD_FUN_FLOAT(o,1,"log",log); 00239 JIT_OP_ADD_FUN_FLOAT(o,1,"log2",log2); 00240 JIT_OP_ADD_FUN_FLOAT(o,1,"log10",log10); 00241 JIT_OP_ADD_FUN_FLOAT(o,2,"hypot",hypot); 00242 JIT_OP_ADD_FUN_FLOAT(o,2,"pow",pow); 00243 JIT_OP_ADD_FUN_FLOAT(o,1,"sqrt",sqrt); 00244 // rounding 00245 JIT_OP_ADD_FUN_FLOAT(o,1,"ceil",ceil); 00246 JIT_OP_ADD_FUN_FLOAT(o,1,"floor",floor); 00247 JIT_OP_ADD_FUN_FLOAT(o,1,"round",round); 00248 JIT_OP_ADD_FUN_FLOAT(o,1,"trunc",trunc); 00249 00250 } 00251 00252 00253 00254 void jit_op_vector_ignore (long n, void *vecdata, t_jit_op_info *in1, t_jit_op_info *in2, t_jit_op_info *out) 00255 { 00256 //nada 00257 00258 } 00259 00260 t_jit_op_fn jit_op_sym2fn(t_symbol *opsym, t_symbol *type) 00261 { 00262 t_jit_op_fn_object *o; 00263 t_jit_op_fn fn = (t_jit_op_fn)jit_op_vector_ignore; 00264 00265 if (o = jit_op_fn_lookup(opsym)) { 00266 if (type==_jit_sym_char) 00267 fn = o->charfn; 00268 else if (type==_jit_sym_long) 00269 fn = o->longfn; 00270 else if (type==_jit_sym_float32) 00271 fn = o->float32fn; 00272 else if (type==_jit_sym_float64) 00273 fn = o->float64fn; 00274 } 00275 return fn; 00276 } 00277 00278 /* 00279 if (type==_jit_sym_char) { 00280 if (opsym==ps_pass) { //arith(8bit fixed) 00281 return (t_jit_op_fn)jit_op_vector_pass_char; 00282 } else if (opsym==ps_mult) { 00283 return (t_jit_op_fn)jit_op_vector_mult_char; 00284 } else if (opsym==ps_div) { 00285 return (t_jit_op_fn)jit_op_vector_div_char; 00286 } else if (opsym==ps_add) { 00287 return (t_jit_op_fn)jit_op_vector_adds_char; 00288 } else if (opsym==ps_sub) { 00289 return (t_jit_op_fn)jit_op_vector_subs_char; 00290 } else if (opsym==ps_addm) { 00291 return (t_jit_op_fn)jit_op_vector_add_char; 00292 } else if (opsym==ps_subm) { 00293 return (t_jit_op_fn)jit_op_vector_sub_char; 00294 } else if (opsym==ps_mod) { 00295 return (t_jit_op_fn)jit_op_vector_mod_char; 00296 } else if (opsym==ps_min) { 00297 return (t_jit_op_fn)jit_op_vector_min_char; 00298 } else if (opsym==ps_max) { 00299 return (t_jit_op_fn)jit_op_vector_max_char; 00300 } else if (opsym==ps_avg) { 00301 return (t_jit_op_fn)jit_op_vector_avg_char; 00302 } else if (opsym==ps_absdiff) { 00303 return (t_jit_op_fn)jit_op_vector_absdiff_char; 00304 } else if (opsym==ps_flippass) { //fliparith(8bit fixed) 00305 return (t_jit_op_fn)jit_op_vector_flippass_char; 00306 } else if (opsym==ps_flipdiv) { 00307 return (t_jit_op_fn)jit_op_vector_flipdiv_char; 00308 } else if (opsym==ps_flipsub) { 00309 return (t_jit_op_fn)jit_op_vector_flipsub_char; 00310 } else if (opsym==ps_flipmod) { 00311 return (t_jit_op_fn)jit_op_vector_flipmod_char; 00312 } else if (opsym==ps_bitand) { //bitwise 00313 return (t_jit_op_fn)jit_op_vector_bitand_char; 00314 } else if (opsym==ps_bitor) { 00315 return (t_jit_op_fn)jit_op_vector_bitor_char; 00316 } else if (opsym==ps_bitxor) { 00317 return (t_jit_op_fn)jit_op_vector_bitxor_char; 00318 } else if (opsym==ps_bitnot) { 00319 return (t_jit_op_fn)jit_op_vector_bitnot_char; 00320 } else if (opsym==ps_rshift) { 00321 return (t_jit_op_fn)jit_op_vector_rshift_char; 00322 } else if (opsym==ps_lshift) { 00323 return (t_jit_op_fn)jit_op_vector_lshift_char; 00324 } else if (opsym==ps_and) { //logical 00325 return (t_jit_op_fn)jit_op_vector_and_char; 00326 } else if (opsym==ps_or) { 00327 return (t_jit_op_fn)jit_op_vector_or_char; 00328 } else if (opsym==ps_not) { 00329 return (t_jit_op_fn)jit_op_vector_not_char; 00330 } else if (opsym==ps_gt) { 00331 return (t_jit_op_fn)jit_op_vector_gt_char; 00332 } else if (opsym==ps_lt) { 00333 return (t_jit_op_fn)jit_op_vector_lt_char; 00334 } else if (opsym==ps_gte) { 00335 return (t_jit_op_fn)jit_op_vector_gte_char; 00336 } else if (opsym==ps_lte) { 00337 return (t_jit_op_fn)jit_op_vector_lte_char; 00338 } else if (opsym==ps_eq) { 00339 return (t_jit_op_fn)jit_op_vector_eq_char; 00340 } else if (opsym==ps_neq) { 00341 return (t_jit_op_fn)jit_op_vector_neq_char; 00342 } else if (opsym==ps_gtp) { //logical pass 00343 return (t_jit_op_fn)jit_op_vector_gtp_char; 00344 } else if (opsym==ps_ltp) { 00345 return (t_jit_op_fn)jit_op_vector_ltp_char; 00346 } else if (opsym==ps_gtep) { 00347 return (t_jit_op_fn)jit_op_vector_gtep_char; 00348 } else if (opsym==ps_ltep) { 00349 return (t_jit_op_fn)jit_op_vector_ltep_char; 00350 } else if (opsym==ps_eqp) { 00351 return (t_jit_op_fn)jit_op_vector_eqp_char; 00352 } else if (opsym==ps_neqp) { 00353 return (t_jit_op_fn)jit_op_vector_neqp_char; 00354 } else { //otherwise, ignore 00355 return (t_jit_op_fn)jit_op_vector_ignore; 00356 } 00357 } else if (type==_jit_sym_long) { 00358 if (opsym==ps_pass) { //arith 00359 return (t_jit_op_fn)jit_op_vector_pass_long; 00360 } else if (opsym==ps_mult) { 00361 return (t_jit_op_fn)jit_op_vector_mult_long; 00362 } else if (opsym==ps_div) { 00363 return (t_jit_op_fn)jit_op_vector_div_long; 00364 } else if (opsym==ps_add) { 00365 return (t_jit_op_fn)jit_op_vector_add_long; 00366 } else if (opsym==ps_sub) { 00367 return (t_jit_op_fn)jit_op_vector_sub_long; 00368 } else if (opsym==ps_mod) { 00369 return (t_jit_op_fn)jit_op_vector_mod_long; 00370 } else if (opsym==ps_min) { 00371 return (t_jit_op_fn)jit_op_vector_min_long; 00372 } else if (opsym==ps_max) { 00373 return (t_jit_op_fn)jit_op_vector_max_long; 00374 } else if (opsym==ps_abs) { 00375 return (t_jit_op_fn)jit_op_vector_abs_long; 00376 } else if (opsym==ps_avg) { 00377 return (t_jit_op_fn)jit_op_vector_avg_long; 00378 } else if (opsym==ps_absdiff) { 00379 return (t_jit_op_fn)jit_op_vector_absdiff_long; 00380 } else if (opsym==ps_flippass) { //fliparith 00381 return (t_jit_op_fn)jit_op_vector_flippass_long; 00382 } else if (opsym==ps_flipdiv) { 00383 return (t_jit_op_fn)jit_op_vector_flipdiv_long; 00384 } else if (opsym==ps_flipsub) { 00385 return (t_jit_op_fn)jit_op_vector_flipsub_long; 00386 } else if (opsym==ps_flipmod) { 00387 return (t_jit_op_fn)jit_op_vector_flipmod_long; 00388 } else if (opsym==ps_bitand) { //bitwise 00389 return (t_jit_op_fn)jit_op_vector_bitand_long; 00390 } else if (opsym==ps_bitor) { 00391 return (t_jit_op_fn)jit_op_vector_bitor_long; 00392 } else if (opsym==ps_bitxor) { 00393 return (t_jit_op_fn)jit_op_vector_bitxor_long; 00394 } else if (opsym==ps_bitnot) { 00395 return (t_jit_op_fn)jit_op_vector_bitnot_long; 00396 } else if (opsym==ps_rshift) { 00397 return (t_jit_op_fn)jit_op_vector_rshift_long; 00398 } else if (opsym==ps_lshift) { 00399 return (t_jit_op_fn)jit_op_vector_lshift_long; 00400 } else if (opsym==ps_and) { //logical 00401 return (t_jit_op_fn)jit_op_vector_and_long; 00402 } else if (opsym==ps_or) { 00403 return (t_jit_op_fn)jit_op_vector_or_long; 00404 } else if (opsym==ps_not) { 00405 return (t_jit_op_fn)jit_op_vector_not_long; 00406 } else if (opsym==ps_gt) { 00407 return (t_jit_op_fn)jit_op_vector_gt_long; 00408 } else if (opsym==ps_lt) { 00409 return (t_jit_op_fn)jit_op_vector_lt_long; 00410 } else if (opsym==ps_gte) { 00411 return (t_jit_op_fn)jit_op_vector_gte_long; 00412 } else if (opsym==ps_lte) { 00413 return (t_jit_op_fn)jit_op_vector_lte_long; 00414 } else if (opsym==ps_eq) { 00415 return (t_jit_op_fn)jit_op_vector_eq_long; 00416 } else if (opsym==ps_neq) { 00417 return (t_jit_op_fn)jit_op_vector_neq_long; 00418 } else if (opsym==ps_gtp) { //logical pass 00419 return (t_jit_op_fn)jit_op_vector_gtp_long; 00420 } else if (opsym==ps_ltp) { 00421 return (t_jit_op_fn)jit_op_vector_ltp_long; 00422 } else if (opsym==ps_gtep) { 00423 return (t_jit_op_fn)jit_op_vector_gtep_long; 00424 } else if (opsym==ps_ltep) { 00425 return (t_jit_op_fn)jit_op_vector_ltep_long; 00426 } else if (opsym==ps_eqp) { 00427 return (t_jit_op_fn)jit_op_vector_eqp_long; 00428 } else if (opsym==ps_neqp) { 00429 return (t_jit_op_fn)jit_op_vector_neqp_long; 00430 } else { //otherwise, ignore 00431 return (t_jit_op_fn)jit_op_vector_ignore; 00432 } 00433 00434 } else if (type==_jit_sym_float32) { 00435 if (opsym==ps_pass) { //arith 00436 return (t_jit_op_fn)jit_op_vector_pass_float32; 00437 } else if (opsym==ps_mult) { 00438 return (t_jit_op_fn)jit_op_vector_mult_float32; 00439 } else if (opsym==ps_div) { 00440 return (t_jit_op_fn)jit_op_vector_div_float32; 00441 } else if (opsym==ps_add) { 00442 return (t_jit_op_fn)jit_op_vector_add_float32; 00443 } else if (opsym==ps_sub) { 00444 return (t_jit_op_fn)jit_op_vector_sub_float32; 00445 } else if (opsym==ps_mod) { //no fmod yet 00446 return (t_jit_op_fn)jit_op_vector_pass_float32; 00447 } else if (opsym==ps_min) { 00448 return (t_jit_op_fn)jit_op_vector_min_float32; 00449 } else if (opsym==ps_max) { 00450 return (t_jit_op_fn)jit_op_vector_max_float32; 00451 } else if (opsym==ps_abs) { 00452 return (t_jit_op_fn)jit_op_vector_abs_float32; 00453 } else if (opsym==ps_avg) { 00454 return (t_jit_op_fn)jit_op_vector_avg_float32; 00455 } else if (opsym==ps_absdiff) { 00456 return (t_jit_op_fn)jit_op_vector_absdiff_float32; 00457 } else if (opsym==ps_flippass) { //fliparith 00458 return (t_jit_op_fn)jit_op_vector_flippass_float32; 00459 } else if (opsym==ps_flipdiv) { 00460 return (t_jit_op_fn)jit_op_vector_flipdiv_float32; 00461 } else if (opsym==ps_flipsub) { 00462 return (t_jit_op_fn)jit_op_vector_flipsub_float32; 00463 } else if (opsym==ps_flipmod) { //no fmod yet 00464 return (t_jit_op_fn)jit_op_vector_flippass_float32; 00465 } else if (opsym==ps_bitand) { //bitwise(pass?) 00466 return (t_jit_op_fn)jit_op_vector_pass_float32; 00467 } else if (opsym==ps_bitor) { 00468 return (t_jit_op_fn)jit_op_vector_pass_float32; 00469 } else if (opsym==ps_bitxor) { 00470 return (t_jit_op_fn)jit_op_vector_pass_float32; 00471 } else if (opsym==ps_bitnot) { 00472 return (t_jit_op_fn)jit_op_vector_pass_float32; 00473 } else if (opsym==ps_rshift) { 00474 return (t_jit_op_fn)jit_op_vector_pass_float32; 00475 } else if (opsym==ps_lshift) { 00476 return (t_jit_op_fn)jit_op_vector_pass_float32; 00477 } else if (opsym==ps_and) { //logical 00478 return (t_jit_op_fn)jit_op_vector_and_float32; 00479 } else if (opsym==ps_or) { 00480 return (t_jit_op_fn)jit_op_vector_or_float32; 00481 } else if (opsym==ps_not) { 00482 return (t_jit_op_fn)jit_op_vector_not_float32; 00483 } else if (opsym==ps_gt) { 00484 return (t_jit_op_fn)jit_op_vector_gt_float32; 00485 } else if (opsym==ps_lt) { 00486 return (t_jit_op_fn)jit_op_vector_lt_float32; 00487 } else if (opsym==ps_gte) { 00488 return (t_jit_op_fn)jit_op_vector_gte_float32; 00489 } else if (opsym==ps_lte) { 00490 return (t_jit_op_fn)jit_op_vector_lte_float32; 00491 } else if (opsym==ps_eq) { 00492 return (t_jit_op_fn)jit_op_vector_eq_float32; 00493 } else if (opsym==ps_neq) { 00494 return (t_jit_op_fn)jit_op_vector_neq_float32; 00495 } else if (opsym==ps_gtp) { //logical pass 00496 return (t_jit_op_fn)jit_op_vector_gtp_float32; 00497 } else if (opsym==ps_ltp) { 00498 return (t_jit_op_fn)jit_op_vector_ltp_float32; 00499 } else if (opsym==ps_gtep) { 00500 return (t_jit_op_fn)jit_op_vector_gtep_float32; 00501 } else if (opsym==ps_ltep) { 00502 return (t_jit_op_fn)jit_op_vector_ltep_float32; 00503 } else if (opsym==ps_eqp) { 00504 return (t_jit_op_fn)jit_op_vector_eqp_float32; 00505 } else if (opsym==ps_neqp) { 00506 return (t_jit_op_fn)jit_op_vector_neqp_float32; 00507 } //transcendental 00508 else if (opsym==ps_sin) { //trig 00509 return (t_jit_op_fn)jit_op_vector_sin_float32; 00510 } else if (opsym==ps_cos) { 00511 return (t_jit_op_fn)jit_op_vector_cos_float32; 00512 } else if (opsym==ps_tan) { 00513 return (t_jit_op_fn)jit_op_vector_tan_float32; 00514 } else if (opsym==ps_asin) { 00515 return (t_jit_op_fn)jit_op_vector_asin_float32; 00516 } else if (opsym==ps_acos) { 00517 return (t_jit_op_fn)jit_op_vector_acos_float32; 00518 } else if (opsym==ps_atan) { 00519 return (t_jit_op_fn)jit_op_vector_atan_float32; 00520 } else if (opsym==ps_atan2) { 00521 return (t_jit_op_fn)jit_op_vector_atan2_float32; 00522 } else if (opsym==ps_sinh) { //hyperbolic trig 00523 return (t_jit_op_fn)jit_op_vector_sinh_float32; 00524 } else if (opsym==ps_cosh) { 00525 return (t_jit_op_fn)jit_op_vector_cosh_float32; 00526 } else if (opsym==ps_tanh) { 00527 return (t_jit_op_fn)jit_op_vector_tanh_float32; 00528 } else if (opsym==ps_asinh) { 00529 return (t_jit_op_fn)jit_op_vector_asinh_float32; 00530 } else if (opsym==ps_acosh) { 00531 return (t_jit_op_fn)jit_op_vector_acosh_float32; 00532 } else if (opsym==ps_atanh) { 00533 return (t_jit_op_fn)jit_op_vector_atanh_float32; 00534 } else if (opsym==ps_exp) { //exponential/logarithmic 00535 return (t_jit_op_fn)jit_op_vector_exp_float32; 00536 } else if (opsym==ps_exp2) { 00537 return (t_jit_op_fn)jit_op_vector_exp2_float32; 00538 } else if (opsym==ps_ln) { 00539 return (t_jit_op_fn)jit_op_vector_log_float32; 00540 } else if (opsym==ps_log2) { 00541 return (t_jit_op_fn)jit_op_vector_log2_float32; 00542 } else if (opsym==ps_log10) { 00543 return (t_jit_op_fn)jit_op_vector_log10_float32; 00544 } else if (opsym==ps_hypot) { 00545 return (t_jit_op_fn)jit_op_vector_hypot_float32; 00546 } else if (opsym==ps_pow) { 00547 return (t_jit_op_fn)jit_op_vector_pow_float32; 00548 } else if (opsym==ps_sqrt) { 00549 return (t_jit_op_fn)jit_op_vector_sqrt_float32; 00550 } else if (opsym==ps_ceil) { //rounding 00551 return (t_jit_op_fn)jit_op_vector_ceil_float32; 00552 } else if (opsym==ps_floor) { 00553 return (t_jit_op_fn)jit_op_vector_floor_float32; 00554 } else if (opsym==ps_round) { 00555 return (t_jit_op_fn)jit_op_vector_round_float32; 00556 } else if (opsym==ps_trunc) { 00557 return (t_jit_op_fn)jit_op_vector_trunc_float32; 00558 } else { //otherwise, ignore 00559 return (t_jit_op_fn)jit_op_vector_ignore; 00560 } 00561 00562 } else if (type==_jit_sym_float64) { 00563 if (opsym==ps_pass) { //arith 00564 return (t_jit_op_fn)jit_op_vector_pass_float64; 00565 } else if (opsym==ps_mult) { 00566 return (t_jit_op_fn)jit_op_vector_mult_float64; 00567 } else if (opsym==ps_div) { 00568 return (t_jit_op_fn)jit_op_vector_div_float64; 00569 } else if (opsym==ps_add) { 00570 return (t_jit_op_fn)jit_op_vector_add_float64; 00571 } else if (opsym==ps_sub) { 00572 return (t_jit_op_fn)jit_op_vector_sub_float64; 00573 } else if (opsym==ps_mod) { //no fmod yet 00574 return (t_jit_op_fn)jit_op_vector_pass_float64; 00575 } else if (opsym==ps_min) { 00576 return (t_jit_op_fn)jit_op_vector_min_float64; 00577 } else if (opsym==ps_max) { 00578 return (t_jit_op_fn)jit_op_vector_max_float64; 00579 } else if (opsym==ps_abs) { 00580 return (t_jit_op_fn)jit_op_vector_abs_float64; 00581 } else if (opsym==ps_avg) { 00582 return (t_jit_op_fn)jit_op_vector_avg_float64; 00583 } else if (opsym==ps_absdiff) { 00584 return (t_jit_op_fn)jit_op_vector_absdiff_float64; 00585 } else if (opsym==ps_flippass) { //fliparith 00586 return (t_jit_op_fn)jit_op_vector_flippass_float64; 00587 } else if (opsym==ps_flipdiv) { 00588 return (t_jit_op_fn)jit_op_vector_flipdiv_float64; 00589 } else if (opsym==ps_flipsub) { 00590 return (t_jit_op_fn)jit_op_vector_flipsub_float64; 00591 } else if (opsym==ps_flipmod) { //no fmod yet 00592 return (t_jit_op_fn)jit_op_vector_flippass_float64; 00593 } else if (opsym==ps_bitand) { //bitwise(pass?) 00594 return (t_jit_op_fn)jit_op_vector_pass_float64; 00595 } else if (opsym==ps_bitor) { 00596 return (t_jit_op_fn)jit_op_vector_pass_float64; 00597 } else if (opsym==ps_bitxor) { 00598 return (t_jit_op_fn)jit_op_vector_pass_float64; 00599 } else if (opsym==ps_bitnot) { 00600 return (t_jit_op_fn)jit_op_vector_pass_float64; 00601 } else if (opsym==ps_rshift) { 00602 return (t_jit_op_fn)jit_op_vector_pass_float64; 00603 } else if (opsym==ps_lshift) { 00604 return (t_jit_op_fn)jit_op_vector_pass_float64; 00605 } else if (opsym==ps_and) { //logical 00606 return (t_jit_op_fn)jit_op_vector_and_float64; 00607 } else if (opsym==ps_or) { 00608 return (t_jit_op_fn)jit_op_vector_or_float64; 00609 } else if (opsym==ps_not) { 00610 return (t_jit_op_fn)jit_op_vector_not_float64; 00611 } else if (opsym==ps_gt) { 00612 return (t_jit_op_fn)jit_op_vector_gt_float64; 00613 } else if (opsym==ps_lt) { 00614 return (t_jit_op_fn)jit_op_vector_lt_float64; 00615 } else if (opsym==ps_gte) { 00616 return (t_jit_op_fn)jit_op_vector_gte_float64; 00617 } else if (opsym==ps_lte) { 00618 return (t_jit_op_fn)jit_op_vector_lte_float64; 00619 } else if (opsym==ps_eq) { 00620 return (t_jit_op_fn)jit_op_vector_eq_float64; 00621 } else if (opsym==ps_neq) { 00622 return (t_jit_op_fn)jit_op_vector_neq_float64; 00623 } else if (opsym==ps_gtp) { //logical pass 00624 return (t_jit_op_fn)jit_op_vector_gtp_float64; 00625 } else if (opsym==ps_ltp) { 00626 return (t_jit_op_fn)jit_op_vector_ltp_float64; 00627 } else if (opsym==ps_gtep) { 00628 return (t_jit_op_fn)jit_op_vector_gtep_float64; 00629 } else if (opsym==ps_ltep) { 00630 return (t_jit_op_fn)jit_op_vector_ltep_float64; 00631 } else if (opsym==ps_eqp) { 00632 return (t_jit_op_fn)jit_op_vector_eqp_float64; 00633 } else if (opsym==ps_neqp) { 00634 return (t_jit_op_fn)jit_op_vector_neqp_float64; 00635 } //transcendental 00636 else if (opsym==ps_sin) { //trig 00637 return (t_jit_op_fn)jit_op_vector_sin_float64; 00638 } else if (opsym==ps_cos) { 00639 return (t_jit_op_fn)jit_op_vector_cos_float64; 00640 } else if (opsym==ps_tan) { 00641 return (t_jit_op_fn)jit_op_vector_tan_float64; 00642 } else if (opsym==ps_asin) { 00643 return (t_jit_op_fn)jit_op_vector_asin_float64; 00644 } else if (opsym==ps_acos) { 00645 return (t_jit_op_fn)jit_op_vector_acos_float64; 00646 } else if (opsym==ps_atan) { 00647 return (t_jit_op_fn)jit_op_vector_atan_float64; 00648 } else if (opsym==ps_atan2) { 00649 return (t_jit_op_fn)jit_op_vector_atan2_float64; 00650 } else if (opsym==ps_sinh) { //hyperbolic trig 00651 return (t_jit_op_fn)jit_op_vector_sinh_float64; 00652 } else if (opsym==ps_cosh) { 00653 return (t_jit_op_fn)jit_op_vector_cosh_float64; 00654 } else if (opsym==ps_tanh) { 00655 return (t_jit_op_fn)jit_op_vector_tanh_float64; 00656 } else if (opsym==ps_asinh) { 00657 return (t_jit_op_fn)jit_op_vector_asinh_float64; 00658 } else if (opsym==ps_acosh) { 00659 return (t_jit_op_fn)jit_op_vector_acosh_float64; 00660 } else if (opsym==ps_atanh) { 00661 return (t_jit_op_fn)jit_op_vector_atanh_float64; 00662 } else if (opsym==ps_exp) { //exponential/logarithmic 00663 return (t_jit_op_fn)jit_op_vector_exp_float64; 00664 } else if (opsym==ps_exp2) { 00665 return (t_jit_op_fn)jit_op_vector_exp2_float64; 00666 } else if (opsym==ps_ln) { 00667 return (t_jit_op_fn)jit_op_vector_log_float64; 00668 } else if (opsym==ps_log2) { 00669 return (t_jit_op_fn)jit_op_vector_log2_float64; 00670 } else if (opsym==ps_log10) { 00671 return (t_jit_op_fn)jit_op_vector_log10_float64; 00672 } else if (opsym==ps_hypot) { 00673 return (t_jit_op_fn)jit_op_vector_hypot_float64; 00674 } else if (opsym==ps_pow) { 00675 return (t_jit_op_fn)jit_op_vector_pow_float64; 00676 } else if (opsym==ps_sqrt) { 00677 return (t_jit_op_fn)jit_op_vector_sqrt_float64; 00678 } else if (opsym==ps_ceil) { //rounding 00679 return (t_jit_op_fn)jit_op_vector_ceil_float64; 00680 } else if (opsym==ps_floor) { 00681 return (t_jit_op_fn)jit_op_vector_floor_float64; 00682 } else if (opsym==ps_round) { 00683 return (t_jit_op_fn)jit_op_vector_round_float64; 00684 } else if (opsym==ps_trunc) { 00685 return (t_jit_op_fn)jit_op_vector_trunc_float64; 00686 } else { //otherwise, ignore 00687 return (t_jit_op_fn)jit_op_vector_ignore; 00688 } 00689 } 00690 return (t_jit_op_fn)jit_op_vector_ignore; // $rbs$ -- warning fix 00691 } 00692 */ 00693 00694 t_jit_err jit_op_matrix_calc(t_jit_op *x, void *inputs, void *outputs) 00695 { 00696 t_jit_err err=JIT_ERR_NONE; 00697 long in1_savelock,in2_savelock,out_savelock; 00698 t_jit_matrix_info in1_minfo,in2_minfo,out_minfo; 00699 char *in1_bp,*in2_bp,*out_bp; 00700 long i,dimcount,planecount,dim[JIT_MATRIX_MAX_DIMCOUNT]; 00701 t_jit_op_vecdata vecdata; 00702 void *in1_matrix,*in2_matrix,*out_matrix; 00703 00704 in1_matrix = jit_object_method(inputs,_jit_sym_getindex,0); 00705 in2_matrix = jit_object_method(inputs,_jit_sym_getindex,1); 00706 out_matrix = jit_object_method(outputs,_jit_sym_getindex,0); 00707 00708 if (x&&in1_matrix&&in2_matrix&&out_matrix) { 00709 in1_savelock = (long) jit_object_method(in1_matrix,_jit_sym_lock,1); 00710 in2_savelock = (long) jit_object_method(in2_matrix,_jit_sym_lock,1); 00711 out_savelock = (long) jit_object_method(out_matrix,_jit_sym_lock,1); 00712 jit_object_method(in1_matrix,_jit_sym_getinfo,&in1_minfo); 00713 jit_object_method(in2_matrix,_jit_sym_getinfo,&in2_minfo); 00714 jit_object_method(out_matrix,_jit_sym_getinfo,&out_minfo); 00715 jit_object_method(in1_matrix,_jit_sym_getdata,&in1_bp); 00716 jit_object_method(in2_matrix,_jit_sym_getdata,&in2_bp); 00717 jit_object_method(out_matrix,_jit_sym_getdata,&out_bp); 00718 if (!in1_bp) { err=JIT_ERR_INVALID_INPUT; goto out;} 00719 if (!in2_bp) { err=JIT_ERR_INVALID_INPUT; goto out;} 00720 if (!out_bp) { err=JIT_ERR_INVALID_OUTPUT; goto out;} 00721 //compatible types? later support implicit type conversion 00722 if ((in1_minfo.type!=in2_minfo.type)||(in1_minfo.type!=out_minfo.type)) { err=JIT_ERR_MISMATCH_TYPE; goto out;} 00723 //get dimensions/planecount 00724 dimcount = out_minfo.dimcount; 00725 planecount = out_minfo.planecount; 00726 for (i=0;i<dimcount;i++) { 00727 //if dimsize is 1, treat as infinite domain across that dimension. 00728 //otherwise truncate if less than the output dimsize 00729 dim[i] = out_minfo.dim[i]; 00730 if ((in1_minfo.dim[i]<dim[i])&&in1_minfo.dim[i]>1) { 00731 dim[i] = in1_minfo.dim[i]; 00732 } 00733 if ((in2_minfo.dim[i]<dim[i])&&in2_minfo.dim[i]>1) { 00734 dim[i] = in2_minfo.dim[i]; 00735 } 00736 } 00737 00738 for (i=0;i<planecount;i++) { 00739 vecdata.opfn[i] = jit_op_sym2fn(x->opsym[i%x->opsymcount],in1_minfo.type); 00740 } 00741 jit_parallel_ndim_simplecalc3((method)jit_op_calculate_ndim, 00742 &vecdata, dimcount, dim, planecount, &in1_minfo, in1_bp, &in2_minfo, in2_bp, &out_minfo, out_bp, 00743 0 /* flags1 */, 0 /* flags2 */, 0 /* flags3 */); 00744 00745 } else { 00746 return JIT_ERR_INVALID_PTR; 00747 } 00748 00749 out: 00750 jit_object_method(out_matrix,_jit_sym_lock,out_savelock); 00751 jit_object_method(in2_matrix,_jit_sym_lock,in2_savelock); 00752 jit_object_method(in1_matrix,_jit_sym_lock,in1_savelock); 00753 return err; 00754 } 00755 00756 00757 void jit_op_calculate_ndim(t_jit_op_vecdata *vecdata, long dimcount, long *dim, long planecount, t_jit_matrix_info *in1_minfo, char *bip1, 00758 t_jit_matrix_info *in2_minfo, char *bip2, t_jit_matrix_info *out_minfo, char *bop) 00759 { 00760 long i,j,n; 00761 char *ip1=bip1,*ip2=bip2,*op=bop; 00762 t_jit_op_info in1_opinfo,in2_opinfo,out_opinfo; 00763 double zero=0; 00764 long onefn; 00765 t_jit_op_fn fn; 00766 00767 if (dimcount<1) return; //safety 00768 00769 switch(dimcount) { 00770 case 1: 00771 dim[1] = 1; 00772 case 2: 00773 //if planecount the same, flatten planes - treat as single plane data for speed 00774 n = dim[0]; 00775 onefn=1; 00776 fn = vecdata->opfn[0]; 00777 for (i=0;i<planecount;i++) { 00778 if (vecdata->opfn[i]!=fn) onefn=0; 00779 } 00780 if (onefn&&(in1_minfo->dim[0]>1)&&(in2_minfo->dim[0]>1)&&(out_minfo->dim[0]>1)&& 00781 (in1_minfo->planecount==in2_minfo->planecount)&&(in1_minfo->planecount==out_minfo->planecount)) { 00782 in1_opinfo.stride = 1; 00783 in2_opinfo.stride = 1; 00784 out_opinfo.stride = 1; 00785 n *= planecount; 00786 planecount = 1; 00787 } else { 00788 in1_opinfo.stride = in1_minfo->dim[0]>1?in1_minfo->planecount:0; 00789 in2_opinfo.stride = in2_minfo->dim[0]>1?in2_minfo->planecount:0; 00790 out_opinfo.stride = out_minfo->dim[0]>1?out_minfo->planecount:0; 00791 } 00792 if (in1_minfo->type==_jit_sym_char) { 00793 for (i=0;i<dim[1];i++){ 00794 for (j=0;j<planecount;j++) { 00795 in1_opinfo.p = bip1 + i*in1_minfo->dimstride[1] + j%in1_minfo->planecount; 00796 in2_opinfo.p = bip2 + i*in2_minfo->dimstride[1] + j%in2_minfo->planecount; 00797 out_opinfo.p = bop + i*out_minfo->dimstride[1] + j%out_minfo->planecount; 00798 (*(vecdata->opfn[j]))(n,vecdata,&in1_opinfo,&in2_opinfo,&out_opinfo); 00799 } 00800 } 00801 } else if (in1_minfo->type==_jit_sym_long) { 00802 for (i=0;i<dim[1];i++){ 00803 for (j=0;j<planecount;j++) { 00804 in1_opinfo.p = bip1 + i*in1_minfo->dimstride[1] + (j%in1_minfo->planecount)*4; 00805 in2_opinfo.p = bip2 + i*in2_minfo->dimstride[1] + (j%in2_minfo->planecount)*4; 00806 out_opinfo.p = bop + i*out_minfo->dimstride[1] + (j%out_minfo->planecount)*4; 00807 (*(vecdata->opfn[j]))(n,vecdata,&in1_opinfo,&in2_opinfo,&out_opinfo); 00808 } 00809 } 00810 } else if (in1_minfo->type==_jit_sym_float32) { 00811 for (i=0;i<dim[1];i++){ 00812 for (j=0;j<planecount;j++) { 00813 in1_opinfo.p = bip1 + i*in1_minfo->dimstride[1] + (j%in1_minfo->planecount)*4; 00814 in2_opinfo.p = bip2 + i*in2_minfo->dimstride[1] + (j%in2_minfo->planecount)*4; 00815 out_opinfo.p = bop + i*out_minfo->dimstride[1] + (j%out_minfo->planecount)*4; 00816 (*(vecdata->opfn[j]))(n,vecdata,&in1_opinfo,&in2_opinfo,&out_opinfo); 00817 } 00818 } 00819 } else if (in1_minfo->type==_jit_sym_float64) { 00820 for (i=0;i<dim[1];i++){ 00821 for (j=0;j<planecount;j++) { 00822 in1_opinfo.p = bip1 + i*in1_minfo->dimstride[1] + (j%in1_minfo->planecount)*8; 00823 in2_opinfo.p = bip2 + i*in2_minfo->dimstride[1] + (j%in2_minfo->planecount)*8; 00824 out_opinfo.p = bop + i*out_minfo->dimstride[1] + (j%out_minfo->planecount)*8; 00825 (*(vecdata->opfn[j]))(n,vecdata,&in1_opinfo,&in2_opinfo,&out_opinfo); 00826 } 00827 } 00828 } 00829 break; 00830 default: 00831 for (i=0;i<dim[dimcount-1];i++) { 00832 ip1 = bip1 + i*in1_minfo->dimstride[dimcount-1]; 00833 ip2 = bip2 + i*in2_minfo->dimstride[dimcount-1]; 00834 op = bop + i*out_minfo->dimstride[dimcount-1]; 00835 jit_op_calculate_ndim(vecdata,dimcount-1,dim,planecount,in1_minfo,ip1,in2_minfo,ip2,out_minfo,op); 00836 } 00837 } 00838 } 00839 00840 t_jit_op *jit_op_new(void) 00841 { 00842 t_jit_op *x; 00843 long i; 00844 00845 if (x=(t_jit_op *)jit_object_alloc(_jit_op_class)) { 00846 x->opsymcount = 1; 00847 for (i=0;i<JIT_MATRIX_MAX_PLANECOUNT;i++) 00848 x->opsym[i] = NULL; 00849 } else { 00850 x = NULL; 00851 } 00852 return x; 00853 } 00854 00855 void jit_op_free(t_jit_op *x) 00856 { 00857 //nada 00858 }
Copyright © 2008, Cycling '74